为啥 "map! <C-q> :q <CR> " 在 vi​​m 中不起作用?

Posted

技术标签:

【中文标题】为啥 "map! <C-q> :q <CR> " 在 vi​​m 中不起作用?【英文标题】:Why doesn't "map! <C-q> :q <CR> " work in vim?为什么 "map! <C-q> :q <CR> " 在 vi​​m 中不起作用? 【发布时间】:2011-12-14 14:10:03 【问题描述】:

我在命令行模式下输入:map! &lt;C-q&gt; :q &lt;CR&gt;,然后回到普通模式,按ctrl-q,vim没有退出。为什么?

【问题讨论】:

Jan Hudec describes that ^S can't be mapped -- 也许^Q 因同样的原因而失败?至少对我来说,^S^Q 仍然适用于 XON 和 XOFF。 另见***.com/questions/791765/… 也许***.com/questions/7652590/… 上的答案可以应用于您的问题。 【参考方案1】:

正如 Johnsyweb 建议的那样,Ctrl-Q 一开始并没有到达 Vim。这也适用于流行的 Ctrl-S。两者都可以通过添加来修复

silent !stty -ixon > /dev/null 2>/dev/null

发送到您的.vimrc,因为它会强制这些控制序列到达应用程序。

【讨论】:

我测试过了。它适用于我的机器。您使用的是什么外壳和什么终端仿真器(如果有)? @river - 尝试将 stty -ixon 放入您的 .bashrc 中。启动一个新终端,然后启动 vim。 @Ixs 使用连接到 putty-256color 终端的 putty 测试了 stty -ixon 并且工作正常 - 谢谢【参考方案2】:

为什么有人想在plethora already available 中添加另一种退出 Vim 的方法,这超出了我的理解。不过……

在 Fedora 15 上,Ctrl-Q 可能被您的终端捕获为 XON (resume),因此无法到达 Vim 以退出应用程序。

您可以检查映射中是否存在错误或冲突,如下所示:

:verbose map! <C-Q>

:map! 用于指定insertcommand-line 模式下的映射。

normal-mode mappings(通常)是这样指定的:

:nmap <C-Q> :q<CR>

【讨论】:

我使用的是 Fedora 15。但是 :map! :q 也不起作用,我尝试了许多其他组合键。 @Downvoter:你能指出这个答案有什么问题或遗漏吗? :nmap 也可以在原版vim 中使用。由于我概述的原因,控制字符没有以终端模式进入应用程序。 bitmask's answer 详细说明如何解决此问题。 Ctrl+q 可以单手完成(按下 2 个键)。 :q enter 需要两只手(按下 4 个键( shift+; q enter ))。有人可能会得出结论,ctrl+q 的输入时间大约是 :q 输入的一半,这使得它更有效。 感谢@Johnysweb 的链接

以上是关于为啥 "map! <C-q> :q <CR> " 在 vi​​m 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

请问:为啥配置Spring MVC的DispatcherServlet的url-pattern为/能访问JSP,而不能访问JS、CSS文件?

echarts为啥运行magictype后,不显示图标

为啥 jsonDecode 返回一个不可转换为 Map<String, Map<String, String>> 的值?

为啥 java.util.Properties 实现 Map<Object,Object> 而不是 Map<String,String>

java里set list 为啥能遍历集合

使用echarts进行数据图形化显示,为啥visualMap没有起作用