当我打算输入:X
:x
有没有办法禁用:X
加密,以便在vim中输入:X
无效?
我假设有一个命令可以放在.vimrc文件中?
答案 0 :(得分:10)
有一种使用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
不是第一个,则没有区别。
答案 1 :(得分:5)
使用:cnoreabbrev
覆盖:X
,其功能与:x
相同:
cnoreabbrev X x
:cnoreabbrev
首选:cabbrev
,因为:x
可能已经重新映射到其他内容。
请注意,通常使用cabbrev
会影响命令行中的所有单字母单词X
,例如:X X
会转换为:x x
,可能不是预期的。请参阅@ ZyX的答案以解决此问题。
答案 2 :(得分:1)
你可以使用:cmap
将X映射到x,但是有副作用,比如无法在任何地方使用字母X
:cmap X x
对于稍微不那么具有侵入性的版本
:cmap X^M x^M
只会在您之后立即按Enter键时将X映射到x。
答案 3 :(得分:1)
cmdalias.vim - Create aliases for Vim commands插件提供了更强大的ZyX答案实现。如果您不介意安装插件,那么您可以通过一种舒适且可扩展的方式来定义缩写:
:Alias X x