13

这对 SO 来说可能不是一个好问题,但多年来一直困扰着我,而 Google 也不知道,所以让我们试一试,因为它确实会影响我每周的编程工作:

我经常发现自己处于缺少一个字符的情况,例如“=”而不是“==”,缺少空格,用引号/括号括起来等。

那么,为什么vim没有正确的命令来插入单个字符呢?我的意思是,支持计数和重复.

什么是基本原理,我缺少什么正确的使用模式,这使得这个功能变得不必要?我似乎一直都需要它,所以一定有一些原因它还没有被添加到原来的vi中。

我知道添加一个简单的基本键绑定之类:nmap <Space> i_<Esc>r的很容易,但是在新环境中进行快速编辑时,这是相当不方便的,而且这个简单的版本无论如何都不能正常工作。

PS。如果实际上有一个默认绑定只插入一个字符,总共两次击键并保持在命令模式,类似于r用两次击键替换一个字符,我承诺第一个答案是 100 的赏金,它告诉我它是什么。

4

3 回答 3

7

对我来说,i <Char> Esc(没有修饰键的 3 次击键)非常短且内置。您已经发现了自定义映射,可以将其减少到两次击键;我也从你的开始,随着时间的推移,它变得更加先进以满足我的需要,并添加了映射变体以在光标位置或之后插入单个空格。

据推测,没有内置命令,因为键空间(特别是对于单个未移位键)非常有限,这个不能证明这样的主要空间是合理的,并且任何多键替代方案(如以 开头的 Vim g)将是在效率方面毫无价值。

于 2013-02-28T10:29:41.643 回答
6

,没有默认的键绑定(:viusage正常模式命令的完整列表)。

如果你想知道为什么,恐怕你得问问 Bram Moolenaar 或 Bill Joy。

但这里有一个想法:对光标rs的字符进行处理。他们所做的相当有限且是一维的,但是您的命令将如何工作?

它会像在当前字符之前i插入那个单个字符还是会像在当前字符之后插入那个单个字符一样工作?a

因为“插入文本”可以在当前字符之前之后i发生,所以我们有而且a,而且很明显,我们需要两个命令来快速插入单个字符。

这使问题变得更加复杂。

我们应该使用什么键,因为所有的字母键都已经被占用了?<C-something>? <C-i>被占用,<C-a>也被占用。<C-S-i>并且<C-S-a>都是不实用的并且不能保证在任何地方都可以工作,那又如何?<M-something>? 它也不会在任何地方都有效。也许是两个字符的映射?但是哪一个并遵循什么助记逻辑?

于 2013-02-28T10:37:48.430 回答
2

我也为这个问题而苦苦挣扎,我在互联网上的某个地方(我不记得在哪里)找到了这样做的人:

:nnoremap s :exec "normal i".nr2char(getchar())."\e"<CR>

它并不完美,因为它不支持计数,但.我现在使用它可以重复它,所以也许其他用户也会对此感到满意。

于 2015-05-21T09:50:59.797 回答