在Vim中插入单个字符进行原子操作

时间:2009-10-13 02:02:24

标签: vim

我在vim中使用了这个非常有用的快捷方式:

nmap <space> i <esc>r

这意味着如果我按 space f ,它将在给定位置插入一个字符f

然而,不幸的是,这不是原子的,即,如果我按 space f 然后导航到其他地方,则按,我得到相当于 r f ,而不是 space f

这一切都有道理,但问题是:有没有办法制作这个原子,所以会重复'插入字符'操作,所以撤消等都将它视为一个操作呢?

5 个答案:

答案 0 :(得分:11)

真棒!迈克尔的回答向我指出了我需要完成插件的插件,它现在可以做你想做的事了 - 我一直试图弄清楚如何做这个年龄!

1)安装Tim Pope's plugin

2)安装my plugin

3)添加映射到.vimrc

nnoremap <space> :<C-U>call InsertChar#insert(v:count1)<CR>

答案 1 :(得分:7)

这对你有用吗?

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>

答案 2 :(得分:3)

您可能想看一下这个插件脚本。您可以配置地图以便支持它。阅读支持文档

http://www.vim.org/scripts/script.php?script_id=2136

答案 3 :(得分:2)

很抱歉,我无法为您的问题提供具体的答案,但我会注意到,当我必须重现相当多的命令时,我倾向于使用键(例如我想插入 f 5次或更多次。)

如果是这种情况,我认为保存使用宏是不值得的。您可以使用宏而不是 i f esc 来保存一次击键,并且该操作原子,这样您就可以了到你心里。

如果我知道我想重复一遍,我会使用非宏版本。

P.S。你知道我开始喜欢&lt; kbd&gt;标签相当多: - )

答案 4 :(得分:-1)