Vim:映射在命令行模式下工作的键序列

Ste*_* Lu 5 vim

noremap <C-S> :update<CR>      
vnoremap <C-S> <ESC>:update<CR>
inoremap <C-S> <ESC>:update<CR>
Run Code Online (Sandbox Code Playgroud)

这些是我设置的绑定,通过保存缓冲区让Vim响应Ctrl + S. 我并没有真正使用它,但这对于断断续续/断开或与其他编辑器交互的时间非常方便,我们偶尔会被迫忍受这些编辑器,并且总是只提供用于提交更改的单个绑定.

无论如何,有时候,例如当Vim处于命令行模式(输入:命令或/搜索)时按Ctrl + S将失败,即使我使用这样的绑定:

noremap! <C-S> <ESC>:update<CR>
Run Code Online (Sandbox Code Playgroud)

它基本上退出命令条目(显然发送命令或搜索,这也是不受欢迎的,即使我绑定<ESC>!)并且无法运行:update.

如果我将Vim保留在命令行模式但仍然使用绑定,我怎样才能使它工作?

Ste*_* Lu 5

解决方案是用来Ctrl+C强制取消输入的内容.这成功发出以下内容:update.

cnoremap <C-S> <C-C>:update<CR>
Run Code Online (Sandbox Code Playgroud)

提醒您:您需要配置终端/ shell设置以确保Ctrl + S不发送"XOFF"信号,这会使其暂时停止接受密钥(然后使用Ctrl + Q关闭密钥).这是一次性配置,通过在shell或终端客户端上配置可能就足够了.