如何在vim中禁用内置命令

use*_*509 8 vim command built-in remap

在vim中,当我点击:wq它时几乎总是在尝试输入时发生的事故:w.我想禁用:wq.

我找到的最接近的是cmap,但它有一些奇怪的行为.如果我做的事情

:cmap wq w
Run Code Online (Sandbox Code Playgroud)

我甚至不能输入:wq; 它只是将击键序列重新映射wqw命令模式.例如,我不能在包含的字符串上输入搜索/替换命令wq.

我只是想别名的准确命令:wq:w或无操作.有没有办法做到这一点?

编辑:澄清为什么:cmap不是我的选择

Zso*_*kai 5

更好的解决方案可以是:

:cabbrev wq w
Run Code Online (Sandbox Code Playgroud)

但我不确定为什么cmap不能正常工作。实际上我已经映射了一个我的功能键来保存文件:

:map <F2> :w<CR>
:nmap <F2> <ESC>:w<CR>i
Run Code Online (Sandbox Code Playgroud)

更新:在第一个命令中更正了错字。

UPDATE2:可能的解决方法:

:cabbrev wq<CR> w
Run Code Online (Sandbox Code Playgroud)

HTH

  • 我认为它应该是`:cabrev`。`:cabrev wq w` 会在你按下空格或回车后将 wq 变成 w,所以它会让 `:wq` 做 `:w`。有关更多信息,请参阅 `:help :cabbrev` 和 `:help :ab`。 (2认同)

use*_*509 0

看来最好的选择就是习惯:cmap行为。在极少数情况下,我想输入键盘序列,wq我只需点击wq,稍等一下,然后q再次点击即可。我确实找到了这个可能的解决方案,但它对我的口味来说太复杂了。