Вставка одного символа в Vim с помощью атомной операции
Я давно использовал этот очень полезный ярлык в vim:
nmap <space> i <esc>r
это означает, что если я нажимаю space f, например, он будет вставлять один символ f
в заданную позицию.
К сожалению, однако, это не является атомарным, т.е. если я нажимаю
space f, а затем перемещаюсь в другом месте, затем нажмите
., я получаю эквивалент
r f, а не
space f.
все это имеет смысл, но вот вопрос: есть ли способ сделать этот атомный, так что . повторит операцию "вставить символ", и поэтому отменить и т.д. все относятся к ней как к одной операции?
Ответы
Ответ 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 :-)
Ответ 5
nmap <Space> xPpr
Как предложено этими людьми:
http://objectmix.com/editors/148791-vim-command-insert-single-character-return-normal-mode.html