2013-07-15 56 views
3
noremap <C-S> :update<CR>  
vnoremap <C-S> <ESC>:update<CR> 
inoremap <C-S> <ESC>:update<CR> 

这些是我设置的绑定,让Vim通过保存缓冲区来响应Ctrl + S。我并没有真正使用这种方法,但对于短暂断断续续或与其他编辑进行交互(这些编辑偶尔会被迫忍受,并且总是仅提供单一的变更绑定)非常方便。Vim:映射在命令行模式下工作的键序列

无论如何,有倍,如在Vim是在命令行模式(进入:命令或/搜索)当按下Ctrl + S键将失败,即使我使用这样的绑定:

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

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

如果我离开命令行模式下的Vim,但仍然使用绑定,我该如何使它工作?

回答

3

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

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

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

+1

'stty -ixon'关闭流量控制 –

+0

事实上,我在'〜/ .zshrc'中有这样一行' –

+0

@Steven Lu非常感谢您的回答,它的确有很大的帮助。 – whitesiroi