在 Vim (7.2) 中,有一个普通模式命令r
可以将单个字符替换为另一个字符。例如,键入rX
将用 替换光标下的一个字符X
,然后返回到普通模式。
是否有一个正常模式命令可以插入单个字符然后返回正常模式?
答案1
MelBurslan 是正确的,这个功能本身并不存在,但创建用户定义的命令并不是真正实现它的方法。我花了几分钟时间思考,想出了这个:
:nmap <silent> ,s "=nr2char(getchar())<cr>P
它使用了一些 Vim 技巧,涉及从寄存器(在本例中为“表达式”寄存器)“放入”文本。插入寄存器的表达式是“ nr2char(getchar())
”,它将返回单个字符串。
我以这种方式构建映射的原因是,在映射“中途”获取用户输入比较棘手并且可能会出现不可预测的行为;即使这种映射也会在等待用户输入字符时将光标放到状态区域。
答案2
感谢 Johnny 在下面的评论中给我们这个精彩的答案:
":nmap <C-i> i_<Esc>r"
它将 Control + i 映射为插入单个字符,并且非常简洁。
在你的 vimrc 文件中,它看起来像这样:
nnoremap <C-i> i_<Esc>r
我改变了我的映射以使用空间,你可以将你的映射更改为你喜欢的键:
nnoremap <Space> i_<Esc>r
答案3
据我所知,任何广泛传播的 vi 编辑器都没有这样的功能,但 vim 具有创建自定义命令的功能。之前曾在此处讨论过:在此主题中
您也许能够创建自定义命令来执行您想要做的事情。
答案4
这个解决方案很棒。但是考虑到“e”会将你移动到单词末尾,我更喜欢用右键移动“l”,就像这样
:nmap <C-i> li_<Esc>r
或者在 .vimrc 中
nnoremap <C-i> li_<Esc>r