为啥 "map! <C-q> :q <CR> " 在 vim 中不起作用?
Posted
技术标签:
【中文标题】为啥 "map! <C-q> :q <CR> " 在 vim 中不起作用?【英文标题】:Why doesn't "map! <C-q> :q <CR> " work in vim?为什么 "map! <C-q> :q <CR> " 在 vim 中不起作用? 【发布时间】:2011-12-14 14:10:03 【问题描述】:我在命令行模式下输入:map! <C-q> :q <CR>
,然后回到普通模式,按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!
用于指定insert
和command-line
模式下的映射。
normal-mode
mappings(通常)是这样指定的:
:nmap <C-Q> :q<CR>
【讨论】:
我使用的是 Fedora 15。但是 :map!:nmap
也可以在原版vim
中使用。由于我概述的原因,控制字符没有以终端模式进入应用程序。 bitmask's answer 详细说明如何解决此问题。
Ctrl+q 可以单手完成(按下 2 个键)。 :q enter 需要两只手(按下 4 个键( shift+; q enter ))。有人可能会得出结论,ctrl+q 的输入时间大约是 :q 输入的一半,这使得它更有效。
感谢@Johnysweb 的链接以上是关于为啥 "map! <C-q> :q <CR> " 在 vim 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
请问:为啥配置Spring MVC的DispatcherServlet的url-pattern为/能访问JSP,而不能访问JS、CSS文件?
为啥 jsonDecode 返回一个不可转换为 Map<String, Map<String, String>> 的值?
为啥 java.util.Properties 实现 Map<Object,Object> 而不是 Map<String,String>