:X当我想打字时,我发现自己在打:x
有没有办法禁用:X加密,以便输入:Xvim 无效?
我假设有一个命令可以放在 .vimrc 文件中?
有一种使用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!)。
搜索(/X很好),input()提示等完全没有区别,如果键入X的不是第一个也没有区别。
使用与以下相同的功能:cnoreabbrev覆盖::X:x
cnoreabbrev X x
:cnoreabbrev优先于:cabbrev因为:x可能已经被重新映射到其他东西。
请注意,使用cabbrev通常会影响命令行中的所有单字母单词X,例如:X X将转换为:x x,可能不是预期的。请参阅@ZyX 的答案以解决此问题。
您可以使用:cmap将 X 映射到 x,但有副作用,例如无法在任何地方使用字母 X
:cmap X x
对于侵入性稍低的版本
:cmap X^M x^M
只有在您之后立即按 Enter 时才会将 X 映射到 x。
cmdalias.vim - Create aliases for Vim commands插件提供了 ZyX 答案的更强大的实现。如果您不介意安装插件,您将获得一种舒适且可扩展的方式来定义缩写:
:Alias X x