在 Vim 中插入单个字符?

在 Vim 中插入单个字符?

在 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

相关内容