Сделать вставку одного символа в Vim атомарной операцией

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

nmap <space> i <esc>r

это означает, что если я нажму spacef, например, он вставит один символ fв данной позиции.

к сожалению, однако, это не атомарно, то есть, если я нажимаю spacefи затем перемещаюсь куда-то еще, затем нажимаю ., я получаю эквивалент rf, а не spacef.

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

19 vim
13.10.2009 02:02:23
5 ОТВЕТОВ
РЕШЕНИЕ

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

1) Установите плагин Тима Попа

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

3) Добавьте отображение к вашему .vimrc:

nnoremap <space> :<C-U>call InsertChar#insert(v:count1)<CR>
11
13.10.2009 03:30:25
это намного сложнее, чем я ожидал, но делает курсор красным (что очень удобно), позволяет отмену с escape, и может быть именно тем, что я использую с этого момента в ...
Peter 13.10.2009 06:51:48
Я только обнаружил это сегодня, но я все еще хочу сказать, что это изменит жизнь! Спасибо!
Umang 31.08.2010 14:50:16

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

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

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

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

2
13.10.2009 02:24:11
безусловно, и это мое текущее поведение - но использование этого ярлыка настолько удобно, что я хочу, чтобы его можно было использовать постоянно. меньше о сохранении ключей, а больше о согласованности :)
Peter 13.10.2009 02:20:48
+1 за случайный постскриптум (который, я предполагаю, не издевается надо мной :))
Peter 13.10.2009 02:24:16
Нет, я на самом деле никогда не использовал его раньше, я обычно использовал разметку блочных цитат, но kbd намного лучше для ключей.
paxdiablo 13.10.2009 02:25:39

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

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

3
13.10.2009 02:35:34
Большое спасибо за это. похоже, что @too много подход php довольно хорошо, и он основан на этом.
Peter 13.10.2009 06:52:21

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

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>
7
13.10.2009 05:51:49
Это хорошо, и, безусловно, одно из возможных решений. Недостатком этого подхода является то, что курсор исчезает, когда вы нажимаете пробел, поэтому вы теряете путь к месту вставки символа. Подход @too много php гораздо сложнее, но имеет преимущество, что курсор остается на месте.
Peter 13.10.2009 06:51:05
Если вы делаете быстрые вставки, отсутствие курсора не так уж и раздражает.
Maxim Kim 13.10.2009 07:29:14
Это замечательно! Я использовал Kнесвязанный, использующий тот же iпалец, и Ким начинает с К. Я считаю, что именно так разработчики наносили на карту ключи.
Eric Fortis 8.08.2011 20:54:22
nmap <Space> xPpr

Как предложено этими людьми:

http://objectmix.com/editors/148791-vim-command-insert-single-character-return-normal-mode.html

-1
16.02.2013 19:42:44