Вытащить область в VIM без перемещения курсора в верхнюю часть блока? - PullRequest
48 голосов
/ 27 сентября 2010

Есть ли простой способ (т. Е. Без написания сценария или сложной последовательности клавиш), чтобы вырвать группу линий и оставить курсор там, где был выполнен янк, в отличие от начала блока?

Согласно справке VIM: «Обратите внимание, что после посимвольной команды восстановления, Vim оставляет курсор на первом символе восстановления, который находится ближе всего к началу буфера». По-видимому, линия ведет себя аналогично.

Это немного раздражает меня, так как я склонен выбирать большой регион сверху вниз, Yank, а затем вставлять рядом или ниже дна выбранной области. Сегодня я устанавливаю отметку (m-x) непосредственно перед Янком, а затем прыгаю назад, но я подозреваю, что может быть другая последовательность Янки, которая будет делать то, что мне нужно.

Я много раз искал в SO и в Интернете. Существует так много существующего материала "ярлыков VIM", чтобы пройти через него, но я пока не нашел решения для этого.

Заранее спасибо.

Ответы [ 6 ]

61 голосов
/ 27 сентября 2010

Не совсем отвечаю на ваш вопрос, но, возможно, '] решит вашу проблему?

 ']  `]         To the last character of the previously changed or
                yanked text.  {not in Vi} 
32 голосов
/ 27 сентября 2010

Если вы используете визуальные блоки (v), то после восстановления блока вы можете использовать gv для повторного выбора того же блока (который также перемещает курсор в положение, в котором он находился до восстановления).Если вы затем нажмете клавишу Esc, блок будет отменен без перемещения курсора.

Также может представлять интерес команда ctrl-o в режиме визуального блока, которая перемещается между началом и концом выбранного блока.

2 голосов
/ 16 августа 2016

Если вы дергаете в визуальном режиме, вы также можете использовать '> или `>, чтобы перейти к последней строке / символу только что выдернутого визуального выделения. В этом контексте это, по сути, то же самое, что и '] и `], что, очевидно, не поддерживается, например, во ВсВим.

1 голос
/ 29 апреля 2014

Я не уверен, изменился ли YankRing с момента опубликования решения vmap ygv<Esc>, но оно не сохранилось для меня после добавления его в мой .vimrc.YankRing фактически переписал его.

Вот мое решение в .vimrc.

function! YRRunAfterMaps()
  vmap y ygv<Esc>
endfunction
1 голос
/ 12 января 2014

:y3 восстановит три целые строки из текущей текущей строки. Если вы точно знаете, сколько строк нужно восстановить, эта команда очень удобна.:help :yank для подробной информации.

:%y выберет весь буфер без перемещения курсора, как ggvG$y, без вспышки выделения выделения и изменения регистра "*.

Я использую эту карту режима вставки:

function! SelectAll()
  %y*
endfun
imap <expr> <F3> SelectAll()

ps: если вы предпочитаете <C-V> для вставки (вне vim), используйте %y+

check https://stackoverflow.com/a/1620030/2247746

0 голосов
/ 20 ноября 2018

Я не знаю, что произошло в это время, но в IdeaVim принятые ответы не работают так, как мне бы хотелось.(Не перемещайте курсор на янки)

Для меня, что трюк состоял в том, чтобы просто установить отметку перед янки и перейти к этому позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...