vim — остановить прокрутку после завершения первого файла

#vim

#vim

Вопрос:

По умолчанию, когда вы прокручиваете вниз до конца отображаемого буфера в окне vim, вы можете прокручивать до тех пор, пока последняя строка файла не окажется в первой строке области отображения vim. Все остальные строки области отображения отмечены символами «~». Есть ли конфигурация для остановки прокрутки, когда последняя строка файла находится внизу окна vim?

Редактировать: чтобы быть более точным, это поведение применимо только к прокрутке колесика мыши или навигации по клавишам PgDown, которые заполняют экран этими несуществующими линейными метками. Если курсор перемещается строка за строкой с помощью клавиши со стрелкой вниз, он правильно останавливается на последней строке файла.

Комментарии:

1. Интересно, удалось ли вам заставить VIM работать так, как вы хотели?

Ответ №1:

Просто zb выровнять текущую строку по нижней части окна.

Например. Gzb

Неудивительно, что существует семейство связанных движений панорамирования:

  • zj вниз
  • zk вверх
  • zt Наверх
  • zb внизу
  • zz центр (середина)
  • zz центр (середина)

Для полноты:

  • zl / zL вертикальный поворот вправо
  • zh / zH вертикальный поворот влево

Кроме того, взгляните на scrolloff

Я использую

 :set scrolloff=2
  

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

  • подкачка C-d/C-u, hjkl и частые перемещения панорамирования с помощью (в основном) zz
  • навигация }/{
  • ctags для всех других потребностей навигации

Комментарии:

1. Да, у меня уже есть настройка scrolloff. Но это не влияет на PgDown или прокрутку колесика мыши.

2. Есть ли способ переназначить PgDown или прокрутку колесиком мыши вниз, чтобы использовать комбинацию, основанную на команде ‘z’, для автоматической остановки их в последней строке файла?

3. На самом деле возможным решением является переназначение клавиши прокрутки колесика мыши и страницы вниз на команду ‘}’. Спасибо, что сообщили мне об этих командах навигации

4. Очевидно, что решение в моем последнем комментарии не будет работать в режиме вставки… Есть ли какая-либо другая комбинация для прокрутки вниз в режиме вставки?

5. Да, вы можете использовать ctrl-O для вызова команды обычного режима в режиме вставки. Тем не менее, я не вижу необходимости прокручивать в режиме вставки — это портит (отслеживание моего мозга) элементы отмены

Ответ №2:

Я так не думаю. Но даже если бы это было так, как бы вы хотели, чтобы он вел себя, если бы в вашем файле было меньше строк, чем на вашем экране? Вам пришлось бы как-то отображать эти несуществующие строки.

У вас должен быть какой-то способ указать vim отображать эти строки, если видна верхняя часть файла, но не разрешать им отображать, если верхняя часть не видна.

Комментарии:

1. Конечно, если файл не содержит достаточно строк, чтобы заполнить экран, нет проблем с этими несуществующими метками строк. Я просто не хочу, чтобы PgDown или прокрутка колесика мыши шли ниже конца файла

Ответ №3:

Нет, ваше описание неверно.

Когда вы прокручиваете строку за строкой вниз с помощью стрелок или клавиш j / k, Vim остановится в нижней части экрана. То есть он не будет заполнять экран несуществующими строками.

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

Комментарии:

1. Да, это то, чего я хочу избежать: наличие несуществующих строк на экране с использованием PgDown или прокрутки колесика мыши!

2. @greydet — Ну, а как бы вы хотели, чтобы Vim вел себя, когда вы нажимаете на последнюю страницу?

Ответ №4:

Я только что нашел это (http://vimrc-dissection .blogspot.se/2009/02/fixing-pageup-and-pagedown.html ):

 map <silent> <PageUp> 1000<C-U>
map <silent> <PageDown> 1000<C-D>
imap <silent> <PageUp> <C-O>1000<C-U>
imap <silent> <PageDown> <C-O>1000<C-D>
  

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

 map <ScrollWheelUp> H5k
map <ScrollWheelDown> L5j
  

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

 map <ScrollWheelUp> <C-U>
map <ScrollWheelDown> <C-D>
  

Если вы не возражаете против очень быстрой прокрутки…