5
noremap <C-S> :update<CR>      
vnoremap <C-S> <ESC>:update<CR>
inoremap <C-S> <ESC>:update<CR>

这些是我设置的绑定,以使 Vim 通过保存缓冲区来响应 Ctrl+S。我并没有真正使用它,但这对于我们偶尔被迫忍受的短暂断奶或与其他编辑器交互非常方便,并且总是只为提交更改提供单一绑定。

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

noremap! <C-S> <ESC>:update<CR>

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

如果我让 Vim 处于命令行模式但仍然使用绑定,如何使它工作?

4

1 回答 1

5

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

cnoremap <C-S> <C-C>:update<CR>

一个警告:您需要配置终端/shell 设置,以确保 Ctrl+S 不会发送“XOFF”信号,这会使其暂时停止接受键(随后使用 Ctrl+Q 将其关闭)。这是一次性配置的事情,通过在 shell 或终端客户端上进行配置可能就足够了。

于 2013-07-15T21:01:37.930 回答