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/

10-17 00:35