Подтвердить что ты не робот

Вставка одного символа в Vim с помощью атомной операции

Я давно использовал этот очень полезный ярлык в vim:

nmap <space> i <esc>r

это означает, что если я нажимаю space f, например, он будет вставлять один символ f в заданную позицию.

К сожалению, однако, это не является атомарным, т.е. если я нажимаю space f, а затем перемещаюсь в другом месте, затем нажмите ., я получаю эквивалент r f, а не space f.

все это имеет смысл, но вот вопрос: есть ли способ сделать этот атомный, так что . повторит операцию "вставить символ", и поэтому отменить и т.д. все относятся к ней как к одной операции?

4b9b3361

Ответ 1

Awesome! Майкл ответ указал мне на плагин, который мне нужен, чтобы закончить мой плагин, который теперь может делать то, что вы хотите - я пытался выяснить, как это сделать на века!

1) Установите плагин Tim Pope

2) Установите мой плагин

3) Добавьте сопоставление с вашим .vimrc:

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

Ответ 2

Это работает для вас?

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

Ответ 3

Возможно, вы захотите посмотреть этот плагин script. Возможно, вы сможете настроить свою карту, чтобы ее можно было поддерживать. Прочтите поддерживающие документы

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

Ответ 4

Извините, я не могу дать конкретный ответ на вашу проблему, но я буду замечать, что я предпочитаю использовать клавишу ., когда мне приходится воспроизводить довольно много команд (например, я хочу вставить f 5 или больше раз).

Если это так, я не думаю, что экономия на использовании вашего макроса того стоит. Вы сохраняете одно нажатие клавиши, используя свой макрос, а не i f esc, и эта операция является атомарной, поэтому вы можете . добавить к своему сердечному содержимому.

Я бы просто использовал версию, отличную от макроса, если я знаю, что хочу много повторять.

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