在vim中将保存(:w<cr>)分配给<leader>w

3

我希望在vim的插入模式下能够保存文件。我想使用以下快捷方式:

inoremap <leader>w <Esc>:w<cr> 

虽然这个快捷键在插入模式下保存文件,但光标会停留在比实际手动输入“Esc :w”和“Enter”时多一个位置。这是个问题,因为当我在一行的末尾使用快捷键时,它会跳到下一行,然后我必须回到我保存的起点。
如果有人能帮我将"w"映射成与我手动输入"Esc :w"和"Enter"时完全相同的操作,我将不胜感激。
我应该补充说,如果我使用以下按键映射,一切都按我想要的方式工作:
inoremap <C-s> <esc>:w<CR>

然而,我想避免同时按下CTRLs。可能是<leader>出了问题,但我无法弄清楚问题出在哪里(我使用,作为我的leader key)。

3个回答

10
虽然可以讨论您的插入模式映射的适用性,但您问题的根本原因是映射定义中存在尾随空格;即Vim将其读作如下内容:
inoremap <leader>w <Esc>:w<cr><Space>

甚至在:imap <Leader>w输出中也可以看到这一点!正常模式下,<Space>将光标向右移动一个位置(与l相似),这就解释了意外的移动。


3
试试这个方法:
inoremap <silent> <leader>w <C-o>:w<CR>

这个想法是可以使用Ctrl-o从插入模式下直接运行命令。请查看:help i_CTRL-O获取更多详情。


0
为什么不简单地这样做呢?
inoremap <leader>w <Esc>h:w<cr> 

(不包括额外的h,用于返回一个字符吗?)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接