2016-02-03 51 views
1

我试图让Ctrl-S保存,但vim似乎没有采用任何与控制字符的映射。这些都没有工作:Vim不会采用在插入模式下使用CTRL键的映射

inoremap <C-S> <Esc>:update<Enter> 
map <C-S> <Esc>:update<Enter> 
nnoremap <C-S> <Esc>:update<Enter> 

控制键是怎么回事?我该如何解决它?

编辑: 答案here不适用于我。

我试过stty stop ^-stty -ixon,它最终让信号通过vim,但在插入模式下映射仍然不会被拾取。所以现在看来​​它只是插入模式导致了问题。在插入模式与按Ctrl

其它的映射也不起作用:

inoremap <C-g> <C-O>:update<CR> 

解决方案:这个问题的出现是因为我在的vimrc了set paste。删除该行解决了问题。仍然不知道为什么。

+2

可能重复[在vim中如何映射“保存”到ctrl-s](http://stackoverflow.com/questions/3446320/in-vim-how-to-map-save-to-ctrl-s ) – glts

+0

@glts这些解决方案不适合我。更新了问题以反映我所尝试的内容。 – beane

+0

此外,请不要在问题中添加“解决方案”,这不是它在这里的工作原理。 – glts

回答

0

这是因为我在的vimrc了set paste。我仍然不明白为什么,但它看起来像删除该行解决它。

不知道如何解决它,但。

+0

绝不应该在vimrc中设置'paste'。这是暂时的选项,然后再切换。 – glts

+0

你能告诉我更多吗?我喜欢拥有它,所以我可以不用考虑而从其他来源复制和粘贴大量文本。 – beane

+1

正如':h'paste''解释的那样,这个选项旨在支持Vim在终端中快速粘贴。粘贴处于活动状态时,映射不起作用。使用'pastetoggle'功能可以在需要时快速启用/禁用'paste',参见[':h'pastetoggle''](http://vimdoc.sourceforge.net/htmldoc/options.html#'pastetoggle') 。 – glts

2

流量控制可能是有效的,这会阻止Vim看到<C-s>序列。如果是这样的话,你可以在你的.bash_profile/.zshrc关闭流量控制像这样的东西:

stty -ixon 
+0

让我在那里的一半! Vim现在可以识别这个信号,但它仍然不会接受任何使用'ctrl'的映射。 – beane

0

看起来像你想保存不离开插入模式。给这个镜头,它为我工作。

inoremap <C-s> <Esc>:update<CR>i

+0

这对我也不起作用。相同的映射可以在任何其他模式下工作,我可以在插入模式下使用元键进行映射。我认为这是因为某些原因,我的插入模式不喜欢ctrl。 – beane