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

问题描述 投票:0回答:5

在vim中,如何将“保存”(

:w
)映射到ctrl-s

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

如果我给出 ctrl-vctrl-s,我仍然只看到

^
,而不是
^S

vim
5个回答
168
投票

Ctrl+S是终端停止更新的常用命令,这是一种减慢输出速度的方法,以便您可以在没有回滚缓冲区的终端上读取它。首先查明您是否可以 配置 xterm 以将 Ctrl+S 传递给应用程序。然后这些地图命令将起作用:

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 使其再次运行。


81
投票

在使用 VI 的 Linux 中,您需要按 Ctrl-S 并让它保存您的文档。这对我有用,将以下三行放入您的 .vimrc 文件中。该文件应位于您的主目录中:

~/.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-S 时消除屏幕上的任何 XOFF 消息。请注意,对 .bash_profile 进行更改后,您必须使用命令“source .bash_profile”或注销/登录重新运行它。

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


15
投票

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

12
投票

Mac OSX 终端 + zsh?

在您的 .z 个人资料中

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

为什么?,发生了什么事?参见这里,但基本上对于大多数终端来说ctrl+s已经用于某些用途,因此这个别名vim以便在我们运行vim之前关闭该映射。

在你的.vimrc中

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

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


0
投票

如果您使用 nvim 和 init.lua,请添加以下行

vim.keymap.set({'i'}, '<C-s>', '<C-o>:w<ENTER>')
vim.keymap.set({'n'}, '<C-s>', ':w<ENTER>')
© www.soinside.com 2019 - 2024. All rights reserved.