noremap <C-S> :update<CR>
vnoremap <C-S> <ESC>:update<CR>
inoremap <C-S> <ESC>:update<CR>
这些是我设置的绑定(bind),使Vim通过保存缓冲区来响应Ctrl + S。我并没有真正使用它,但是对于断奶的开/关或与其他编辑器进行交互的短暂时间来说,这是非常方便的,我们偶尔都会被迫忍受,并且它们总是仅提供用于提交更改的单个绑定(bind)。
无论如何,有时候,例如当Vim处于命令行模式(输入
:
命令或/
搜索)时,即使我使用如下所示的绑定(bind),按Ctrl + S也会失败:noremap! <C-S> <ESC>:update<CR>
它基本上会退出命令条目(显然是发送命令或搜索,即使我绑定(bind)了
<ESC>
!也是不希望的),并且无法运行:update
。如果我将Vim留在命令行模式但仍使用绑定(bind),如何使它工作?
最佳答案
解决方案是使用Ctrl+C
强制取消所有输入内容。这将成功发出以下:update
。
cnoremap <C-S> <C-C>:update<CR>
提示:您需要配置终端/ shell 程序设置,以确保Ctrl + S不会发送“XOFF”信号,从而使其暂时停止接受键(然后通过Ctrl + Q关闭)。这是一次性配置,通过在Shell或终端客户端上进行配置可能就足够了。
关于Vim:映射在命令行模式下工作的键序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17663867/