9

:X当我想打字时,我发现自己在打:x

有没有办法禁用:X加密,以便输入:Xvim 无效?

我假设有一个命令可以放在 .vimrc 文件中?

4

4 回答 4

11

有一种使用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的不是第一个也没有区别。

于 2013-07-22T18:30:35.863 回答
6

使用与以下相同的功能:cnoreabbrev覆盖::X:x

cnoreabbrev X x

:cnoreabbrev优先于:cabbrev因为:x可能已经被重新映射到其他东西。

请注意,使用cabbrev通常会影响命令行中的所有单字母单词X,例如:X X将转换为:x x,可能不是预期的。请参阅@ZyX 的答案以解决此问题。

于 2013-07-22T17:36:20.810 回答
2

您可以使用:cmap将 X 映射到 x,但有副作用,例如无法在任何地方使用字母 X

:cmap X x

对于侵入性稍低的版本

:cmap X^M x^M

只有在您之后立即按 Enter 时才会将 X 映射到 x。

于 2013-07-22T17:35:13.757 回答
1

cmdalias.vim - Create aliases for Vim commands插件提供了 ZyX 答案的更强大的实现。如果您不介意安装插件,您将获得一种舒适且可扩展的方式来定义缩写:

:Alias X x
于 2013-07-23T09:20:32.443 回答