2013-05-15 2 views
2

Как я понимаю, ctrl-d и ctrl-u прокрутите окно по количеству строк, которое задано в опции scroll, которая по умолчанию составляет половину высоты окна , Можно ли его изменить для прокрутки на треть высоты окна?vi/vim: как прокручивать треть высоты окна

+0

Ой, получилось, что это произойдет в меньшей степени, было бы здорово. – alxndr

ответ

2

Используйте следующую команду ex. Он использует переменную lines, которая показывает, сколько строк показано в окне и вычисляет третью.

:execute "set scroll=" .&lines/3 

EDIT: При изменении размеров окна значение прокрутки не изменится, поэтому добавьте следующую автокоманду к вашим vimrc, чтобы исправить это:

:au VimResized * execute "set scroll=" . &lines/3 
+0

Это будет трюк! Спасибо – alxndr

+2

@Alexander, '& lines' - это высота Vim в целом, а не высота текущего окна. Используйте 'winheight ('.')', Чтобы получить высоту текущего окна. – romainl

2

Значение по умолчанию scroll динамично - может быть 12 в одном окне и 21 в другом - но пропорция, 50%, жестко закодирована. AFAIK, эта пропорция, используемая для вычисления scroll, динамически не может быть изменена.

Вы можете изменить значение scroll довольно легко с чем-то вроде этого:

execute "set scroll=" . winheight('.')/3 

Теперь вы должны найти, как, когда и где использовать этот фрагмент кода. autocmd кажется хорошим выбором, но какое событие мы будем использовать? WinEnter/WinLeave? CursorMove? Что-то другое?

Возможно, простое сопоставление, которое переопределяет значение по умолчанию? Что-то вроде:

nnoremap <C-d> :execute "normal! " . winheight('.')/3 . "^D"<CR> 
" type <C-v> then <C-d> to produce ^D 
Смежные вопросы