如何在 vim 中禁用内置命令
Posted
技术标签:
【中文标题】如何在 vim 中禁用内置命令【英文标题】:How to disable a built-in command in vim 【发布时间】:2010-12-19 17:12:36 【问题描述】:在 vim 中,当我点击 :wq
时,几乎总是在尝试输入 :w
时发生意外。我想禁用:wq
。
我找到的最接近的是cmap
,但它有一些奇怪的行为。如果我做类似的事情
:cmap wq w
我什至不能输入:wq
;它只是在命令模式下将击键序列wq
重新映射到w
。例如,现在我不能在包含wq
的字符串上输入搜索/替换命令。
我只想将确切的命令 :wq
别名为 :w
或无操作。有没有办法做到这一点?
编辑:澄清了为什么 :cmap
不适合我
【问题讨论】:
【参考方案1】:更好的解决方案是:
:cabbrev wq w
但我不确定为什么 cmap
不能正常工作。
实际上我已经映射了一个我的功能键来保存文件:
:map <F2> :w<CR>
:nmap <F2> <ESC>:w<CR>i
更新:在第一个命令中纠正了错字。
UPDATE2:可能的解决方法:
:cabbrev wq<CR> w
HTH
【讨论】:
你能解释一下:cabbrew 吗? 我觉得应该是:cabbrev
。 :cabbrev wq w
将在您按空格或回车后将 wq 更改为 w,因此它将使 :wq
执行 :w
。请参阅:help :cabbrev
和:help :ab
了解更多信息。
对不起,我想我的问题不够清楚。如果你执行 :cmap 并且它也似乎是 :cabbrew,这意味着命令模式下的“wq”击键序列映射到“wq”以外的其他东西。因此,例如,您不能对包含“wq”的字符串进行搜索/替换。我想做的就是让它,所以如果我输入确切的命令:wq,它的别名是“w”或no-op。
感谢 AI,已纠正错字。我正在深入研究这个问题。因为这不是正确的解决方案。
只是顺便说声谢谢 - 我正试图让自己摆脱标签,所以 cabbrev tabnew help!<CR>
让 vim 在我每次尝试制作标签时都会给出错误消息。【参考方案2】:
看起来最好的选择就是习惯 :cmap
的行为。在极少数情况下,我想输入键盘序列wq
,我可以点击wq
,稍等片刻,然后再次点击q
。我确实找到了this possible solution,但它对我的口味来说太复杂了。
【讨论】:
【参考方案3】:我添加了一行补丁并运行 dpkg-rebuildpackage 将:wa
重命名为:wwa
:
--- neovim/src/nvim/ex_cmds.lua
+++ neovim/src/nvim/ex_cmds.lua
@@ -3057,7 +3057,7 @@
func='ex_wnext',
,
- command='wall',
+ command='wwall',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
addr_type=ADDR_LINES,
func='do_wqall',
您需要在debian/patches/
中创建此补丁并将其添加到debian/patches/series
。
【讨论】:
以上是关于如何在 vim 中禁用内置命令的主要内容,如果未能解决你的问题,请参考以下文章