开发者

Making inserting a single character in Vim an atomic operation

I've long used this very useful shortcut in vim:

nmap <space> i <esc>r

this means that if I press spacef, for example, it will insert a single character f at the given position.

unfortunately, however, this is not atomic, ie, if I press spacef and then navigate somewhere else, then press ., I get the equivalent of rf, not spacef.

all this makes sense, but here's the question: is there a way of making this atomic, so that开发者_StackOverflow . will repeat the 'insert character' operation, and so that undo etc all treat it as one operation, too?


Awesome! Michael's answer pointed me to the plugin I needed to finish my plugin, which can now do what you want - I had been trying to figure out how to do this for ages!

1) Install Tim Pope's plugin

2) Install my plugin

3) Add a mapping to your .vimrc:

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


Does this work for you?

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


You might want to have a look at this plugin script. It may be possible to configure your map so it can be supported. Read the supporting docs

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


Sorry I can't provide a specific answer to your problem but I will note that I tend to use the . key when I have to reproduce quite a lot of commands (e.g. I want to insert f 5 or more times).

If that is the case here, I don't think the saving of using your macro is worth it. You save one keystroke by using your macro rather than ifesc and that operation is atomic so you could then . to your heart's content.

I would just use the non-macro version if I know I want to repeat it a lot.

P.S. You know I'm starting to like the <kbd> tag quite a bit :-)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜