Как перемещать экран без перемещения курсора в Vim?

Недавно я обнаружил Ctrl + E и Ctrl + Y ярлыки для Vim, которые соответственно перемещают экран вверх и вниз с помощью одного шага, не перемещая курсора.

Знаете ли вы какую-либо команду, которая оставляет курсор там, где она есть, но перемещает экран так, что линия с курсором становится первой строкой? (с командой для последней строки будет хороший бонус).

Я могу добиться этого, вручную нажав Ctrl + E (или Ctrl + Y) правильное количество раз, но с командой, которая каким-то образом сделает это непосредственно, будет приятным.

Любые идеи?

Ответ 1

  • z z - переместить текущую строку в середину экрана
    ( Осторожно с z z, если у вас случайно есть Caps Lock, вы сохраните и выйдете из vim!)
  • z t - перемещение текущей строки в верхней части экрана.
  • z b - перемещение текущая строка в нижней части экран

Ответ 2

Дополнительно:

  • Ctrl - y Перемещает экран вверх на одну строку
  • Ctrl - e Перемещает экран вниз на одну строку.
  • Ctrl - u Перемещает курсор и экран вверх ½ страницы
  • Ctrl - d Перемещает курсор и экран вниз ½ страницы
  • Ctrl - b Перемещает экран вверх на одну страницу, курсор на последнюю строку
  • Ctrl - f Перемещает экран вниз на одну страницу, курсор в первую строку

Ctrl - y и Ctrl - e изменяют только положение курсора, если оно будет перемещено за пределы экрана.

Предоставлено http://www.lagmonster.org/docs/vi2.html

Ответ 3

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

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g

Ответ 4

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

"keep cursor in the middle all the time :)
nnoremap k kzz
nnoremap j jzz
nnoremap p pzz
nnoremap P Pzz
nnoremap G Gzz
nnoremap x xzz
inoremap <ESC> <ESC>zz
nnoremap <ENTER> <ENTER>zz
inoremap <ENTER> <ENTER><ESC>zzi
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza

Так, чтобы курсор оставался в середине экрана, а экран двигался вверх или вниз.

Ответ 5

Чтобы оставить курсор в том же столбце, когда вы используете Ctrl + D, Ctrl + F, Ctrl + B, Ctrl + U, G, H, M, L, G G

вы должны определить следующую опцию:

:set nostartofline

Ответ 6

Вы можете прикрепить команды перемещения курсора к числу, и это повторит эту команду, которая много раз

1 0 Ctrl + E будет делать Ctrl + E 10 раз вместо одного.

Ответ 8

z Enter выполняет именно этот вопрос.

Он работает там, где странно z z не будет работать (vim 7.4.1689 на Ubuntu 2016.04 LTS без специального .vimrc)

Ответ 9

Удивило, что никто не использует опцию Scrolloff, которая удерживает курсор в середине страницы. Попробуйте это с помощью:

:set so=999

Это первый рекомендуемый метод на вики-сайте vim, который хорошо работает.

Ответ 10

Иногда полезно прокручивать текст с помощью клавиш K и J. Поэтому у меня есть эта функция "режим прокрутки" в моем .vimrc(также привязана к zs)

scroll_mode.vim

Ответ 11

Существует новый плагин, который я написал, он позволяет вам перемещаться по файлу отверстия, не перемещая позицию курсора. Это основано на сгибе линий между вашей позицией и вашей целевой позицией, а затем перепрыгнуть через сгиб. Или прервите это и не двигайтесь вообще.

Также легко быстро переключаться между курсором - это первая строка, курсор - это последняя строка, а курсор находится в середине, просто нажимая j, k или l (когда вы находитесь в режиме плагина).

Я думаю, это было бы хорошо подходит здесь: https://github.com/anschnapp/move-less

Ответ 12

Я использовал эти ярлыки в прошлом:

z + enter → перемещает текущую строку в верхнюю часть экрана

z + . → перемещает текущую строку в центр экрана

z + - → перемещает текущую строку вниз

..Если не очевидно:

enter означает ВОЗВРАТ или КЛЮЧ ВВОДА

. означает клавишу DOT или "полный останов" (.)

- означает ключ HYPHEN (-)

FWIW, z. позволяет избежать опасности сохранения и закрытия vi, случайно набрав ZZ, если заглавные буквы включены.

Надеюсь, это поможет..