在vim中如何将“save”映射到ctrl-s

时间:2010-08-10 05:33:55

标签: vim

在vim中,如何将“保存”(:w)映射到 ctrl - s

我正在尝试“映射”命令,但是当我按 ctrl - s 时xterm会冻结。

如果我给 ctrl - v ctrl - s 仍然只看到{{1} },而不是^

5 个答案:

答案 0 :(得分:95)

Ctrl + S 是终端停止更新的常用命令,这是一种减慢输出的方法,因此您可以在没有的终端上读取它回滚缓冲区。首先找出你是否可以configure your xterm Ctrl + S 传递给应用程序。然后这些map命令将起作用:

noremap <silent> <C-S>          :update<CR>
vnoremap <silent> <C-S>         <C-C>:update<CR>
inoremap <silent> <C-S>         <C-O>:update<CR>

顺便说一句:如果 Ctrl + S 冻结终端,请输入 Ctrl + Q 再次启动它

答案 1 :(得分:62)

在使用VI的linux中,您想要按 Ctrl - S 并保存文档。这对我有用,在你的.vimrc文件中添加以下三行。此文件应位于您的主目录中:/home/el/.vimrc如果此文件不存在,您可以创建它。

:nmap <c-s> :w<CR>
:imap <c-s> <Esc>:w<CR>a

第一行说:在文档中按 Ctrl - S 将执行:w <enter>键盘组合。

第二行说:在“插入”模式下按文件中的 Ctrl - S 将转为正常模式,执行:w <enter,然后按a返回插入模式。在此事件期间,您的光标可能会移动。

您可能会注意到按 Ctrl - S 执行“XOFF”会停止接收命令(如果您使用的是ssh)。

要解决此问题,请将这两个命令放在〜/ .bash_profile

bind -r '\C-s'
stty -ixon

这样做是关闭 Ctrl - S 的绑定,并在按 Ctrl - 取值。请注意,在对.bash_profile进行更改后,必须使用命令'source .bash_profile'或logout / login重新运行它。

更多信息:http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files

答案 2 :(得分:8)

Mac OSX终端+ zsh?

在.zprofile

alias vim="stty stop '' -ixoff; vim"

为什么?,发生了什么?请参阅Here,但基本上对于大多数终端 ctrl + s 已经用于某些东西,所以这个别名是vim,这样在我们运行vim之前我们就会关闭那个映射。

在你的.vimrc

nmap <c-s> :w<cr>
imap <c-s> <esc>:w<cr>a

<强>为什么呢?发生了什么?这个应该非常明显,我们只是将 ctrl + s 映射到不同的击键,具体取决于我们是否处于正常模式或插入模式。

答案 3 :(得分:7)

我有一个post

VIM

# ~/.vimrc
nnoremap <c-s> :w<CR> # normal mode: save
inoremap <c-s> <Esc>:w<CR>l # insert mode: escape to normal and save
vnoremap <c-s> <Esc>:w<CR> # visual mode: escape to normal and save

zsh(如果你使用的话)

# ~/.zshrc
# enable control-s and control-q
stty start undef
stty stop undef
setopt noflowcontrol

bash(如果你使用的话)

# ~/.bash_profile or ~/.bashrc
# enable control-s and control-q
stty -ixon

答案 4 :(得分:0)

每当我尝试上述设置时,无法通过CTRL + S从INSERT模式保存,每当我在GNOME终端版本3.26.2中运行的VIM中按CTRL + S时,我得到

^S

那里有人有解决方法吗?感谢。