在vim中,如何将“保存”(:w
)映射到 ctrl - s 。
我正在尝试“映射”命令,但是当我按 ctrl - s 时xterm会冻结。
如果我给 ctrl - v , ctrl - s 仍然只看到{{1} },而不是^
。
答案 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)
alias vim="stty stop '' -ixoff; vim"
为什么?,发生了什么?请参阅Here,但基本上对于大多数终端 ctrl + s 已经用于某些东西,所以这个别名是vim,这样在我们运行vim之前我们就会关闭那个映射。
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
那里有人有解决方法吗?感谢。