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

Выровнять область в VIM без перемещения курсора в верхнюю часть блока?

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

В соответствии с VIM help: "Обратите внимание, что после символьной команды yank, Vim оставляет курсор на первом дергавшемся символе, который ближе всего к началу буфера". По-видимому, похоже, что поведение ведет себя аналогичным образом.

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

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

Спасибо заранее.

4b9b3361

Ответ 1

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

 ']  `]         To the last character of the previously changed or
                yanked text.  {not in Vi} 

Ответ 2

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

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

Ответ 3

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

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

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

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

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

проверить fooobar.com/questions/18170/...

Ответ 4

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

Ответ 5

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

Здесь мое решение в .vimrc.

function! YRRunAfterMaps()
  vmap y ygv<Esc>
endfunction