有一种使用cnoreabbrev / cnoremap的标准方法:在用X替换X之前检查它是否是命令行中的唯一字符:
cnoremap <expr> X (getcmdtype() is# ':' && empty(getcmdline())) ? 'x' : 'X'
要么
cnoreabbrev <expr> X (getcmdtype() is# ':' && getcmdline() is# 'X') ? 'x' : 'X'
.区别在于,首先会阻止您输入:Xfoo(将转换为:xfoo),第二个不会,但会阻止输入:X! (将翻译成:x!这确实有意义,不像:X!).