在Vim中插入单个字符?


25

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

是否有普通模式命令插入单个字符然后返回普通模式?



有关全面的解决方案,请参见vim.wikia.com/wiki/Insert_a_single_character
Maxim Suslov

Answers:


6

MelBurslan是正确的,因为它本身不存在,但是创建用户定义的命令并不是创建它的真正方法。我修补了几分钟,想到了这个:

:nmap <silent> ,s "=nr2char(getchar())<cr>P

它使用一些Vim技巧,涉及从寄存器(在本例中为“表达式”寄存器)“放入”文本。插入寄存器的表达式是“ nr2char(getchar())”,它将返回一个字符串。

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


8

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

":nmap <C-i> i_<Esc>r"

它将Control + i映射为插入单个字符,并且非常简洁。

在您的vimrc文件中,它看起来像:

nnoremap <C-i> i_<Esc>r

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

nnoremap <Space> i_<Esc>r

1
这是最简洁明了的答案。
Dylanthepiguy

4

据我所知,在任何广泛分布的vi编辑器中都没有这种功能,但是vim具有创建自定义命令的功能。之前已经在这里讨论过:在此线程中

您可能可以按照自己的意愿创建自定义命令。


3
这是映射Ctrl-I以插入单个字符的命令:“:nmap <Ci> i_ <esc> r”
Johnny

2

一种简单的方法是使用“剪切” x和“放置” p命令。说这*是您要插入的字符。使用插入i * Esc。然后打x。那会削减角色。现在,您可以点击p以放置单个字符。如果您需要将该字符插入300次,则可以输入:300p

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.