在vim中,如何将“保存”(
:w
)映射到ctrl-s。
我正在尝试“映射”该命令,但是当我按 ctrl-s 时,xterm 冻结。
如果我给出 ctrl-v,ctrl-s,我仍然只看到
^
,而不是 ^S
。
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 使其再次运行。
在使用 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
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
alias vim="stty stop '' -ixoff; vim"
为什么?,发生了什么事?参见这里,但基本上对于大多数终端来说ctrl+s已经用于某些用途,因此这个别名vim以便在我们运行vim之前关闭该映射。
nmap <c-s> :w<cr>
imap <c-s> <esc>:w<cr>a
为什么?发生了什么? 这应该是非常明显的,我们只是将 ctrl+s 映射到不同的击键,具体取决于我们是处于正常模式还是插入模式。
如果您使用 nvim 和 init.lua,请添加以下行
vim.keymap.set({'i'}, '<C-s>', '<C-o>:w<ENTER>')
vim.keymap.set({'n'}, '<C-s>', ':w<ENTER>')