在 Vim 中插入单个字符?

Joh*_*ing 32 vim

在 Vim (7.2) 中,有一个普通模式命令r可以用另一个字符替换单个字符。例如,键入rX会将光标下的一个字符替换为X,然后返回到正常模式。

是否有正常模式命令可以插入单个字符然后返回正常模式?

Mat*_*t C 10

感谢约翰尼在下面的评论中给了我们这个了不起的答案:

":nmap <C-i> i_<Esc>r"
Run Code Online (Sandbox Code Playgroud)

这映射 Control + i 以插入单个字符,并且非常简洁。

在您的 vimrc 文件中,这将如下所示:

nnoremap <C-i> i_<Esc>r
Run Code Online (Sandbox Code Playgroud)

我更改了我的映射以使用空间,您可以将您的映射更改为您的首选键:

nnoremap <Space> i_<Esc>r
Run Code Online (Sandbox Code Playgroud)

  • 这是最简洁、最简单的答案。 (2认同)

Hep*_*ite 6

MelBurslan 是正确的,此功能本身并不存在,但创建用户定义的命令并不是真正的创建方式。我琢磨了几分钟,想出了这个:

:nmap <silent> ,s "=nr2char(getchar())<cr>P
Run Code Online (Sandbox Code Playgroud)

它使用了一些 Vim 技巧,涉及从寄存器“放置”文本,在这种情况下是“表达式”寄存器。插入寄存器的表达式是“ nr2char(getchar())”,它将返回单个字符串。

我以这种方式构建映射的原因是,在映射“中途”获取用户输入很棘手,而且行为可能无法预测;即使这种映射也会在等待用户输入字符时将光标下拉到状态区域。