如何在 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!&lt;CR&gt; 让 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 中禁用内置命令的主要内容,如果未能解决你的问题,请参考以下文章

禁用内置语音识别命令?

自定义Spring Shell

linux基础命令汇总

从零开始配置 vim(18)——终端模式

从零开始配置 vim(18)——终端模式

在嵌入式 Python 中禁用内置模块导入