禁用Vim中的“进入Ex模式”

80

我每天不小心都会得到以下信息10次。

进入 Ex 模式。 输入 "visual" 回到 Normal 模式。

你如何在 Vim 中禁用导致此消息出现的组合键?


9
太高兴找到这个问题了……让我猜猜,你也是使用 Dvorak 键盘的用户,是吗? :) - Nik Reiman
1
@NikReiman 是的,你说得对。我现在已经使用Dvorak键盘大约三年半了,从2008年10月开始的。 - Léo Léopold Hertz 준영
1
这里有一个链接,解释了该模式的作用:http://aplawrence.com/Words2005/2005_02_10.html - dreftymac
同意下面所有的答案,你可以简单地映射它。但是你确定要禁用ex模式吗?它可能非常有用,这里有一个由vimgirl制作的视频,展示了你可以在ex模式下做什么: https://www.youtube.com/watch?v=QP_xm0VwQa0&feature=youtu.bePS(5年前我的手腕开始疼痛,然后疼痛消失后我切换到了dvorak键盘布局,这是一个很棒的键盘布局) - songz
5个回答

59
"" 的作用是将键映射为“无操作”。请参见 ":h "。
:map Q <Nop>

把它放在你的~/.vimrc文件中:
map Q <Nop>

.


这个命令在命令模式下对我有效,但是如何将其放入.vimrc文件中呢?我尝试了很多变化,但都没有成功。 - Andrew Wagner
在我的 .vimrc 文件中,"map Q <ESC>" 起作用了。只是不要尝试在同一行后面添加任何注释。 - Andrew Wagner
9
建议始终使用noremap而不是plain map,请参考http://learnvimscriptthehardway.stevelosh.com/chapters/05.html。在这种情况下,理论上可能永远不会重新映射一次映射(我认为),但在任何情况下都不使用“plain map”是一个好策略。 - Niels Bom
@NielsBom 感谢您指出这一点!您救了我的一天,并向我解释了关于Vim中我的错误的许多内容。在您的评论之前,我没有意识到这一点。 - Léo Léopold Hertz 준영
q:(在Neovim中)也会使我进入ex模式,添加 nnoremap q: <Nop> 来修复这个问题。 - xeruf

32

本答案基于NielsBom在2012年10月的评论和BrianCarper在2009年8月的回答。

我认为NielsBom是完全正确的,请参见这篇文章。 在Vim中,map命令真的很危险,这在多年中给我带来了很多问题。 在NielsBom的评论之前,我并没有意识到这一点。因此,请改用以下命令:

:nnoremap Q <Nop>

2
@NielsBohrn 的观点有所不同: 他建议使用 nore 版本的 map 命令来防止右侧重新映射。在这种情况下,这将是 :nnoremap Q <Nop>,但由于右侧是 <Nop>,所以重新映射是无关紧要的。 - glts
评论已包含在答案中。我选择了NielsBom的建议作为接受的答案,因为这正是我所寻找的。 - Léo Léopold Hertz 준영
@glts 这是一个我没有考虑过的有趣观点。感谢您分享。同时,这个 nnoremap 版本并不会真正造成任何伤害,而且实际上可能会防止未来出现问题,例如如果有人盲目地复制此映射以创建另一个没有 <Nop> 作为目标的映射。我肯定也犯过这样的错误。为了正确性、简洁性和认知负担的考虑,我认为我们最好假装 *map 版本不存在,而是在任何地方都使用 *noremap 版本,即使它们是多余的。 - John Karahalis
1
不要忘记,使用 gQ 也可以进入 ex 模式。使用 :nnoremap gQ <Nop> 禁用它。 - John Karahalis
1
...并且 nnoremap q: <Nop> - xeruf

26

"combo" 是 Q。 要禁用它,只需将 Q 映射到其他内容即可:

:map Q <whatever>

我使用gq来格式化文本。

如果你不想让它执行任何操作,请将其映射到<Nop>

:map Q <Nop>

谢谢!我习惯使用QQ来重新格式化我的段落,然后切换到Debian系统,结果一切都乱了套。 - undefined

-1

如果您不想将其映射到其他内容,请使用:unmap。如果您有其他想法,:map也可以 - 查看帮助页面以查看指定要在哪些模式下使用映射的变体。


2
:unmap 可以删除映射,但不会删除默认值,就像在这种情况下一样。 - R. Martinho Fernandes
起初我也是这么想的。我的答案最初也提到了 :unmap,就像你的一样,但后来我在我的 vim 中尝试了一下,才意识到它不起作用。 - R. Martinho Fernandes

-5

另一个,虽然稍微有些极端的选择,是切换到https://neovim.io,该版本已完全删除ex-mode,因为实际上没有人在使用它做任何事情。


5
我正在使用Neovim,按下Q会进入 Ex 模式。 - Sam A. Horvath-Hunt
在一些特殊情况下,ex模式可能会很有用。 - FERcsI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接