:X
当我想打字时,我发现自己在打:x
有没有办法禁用:X
加密,以便输入:X
vim 无效?
我假设有一个命令可以放在 .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