Обновление : теперь я перенес этот код, несколько реорганизованный в соответствии с рекомендациями на :help write-plugin
, в Github-репо .
Использование клавиатуры
Вот что у меня есть в моих .vimrc
:
function SmoothScroll(up)
if a:up
let scrollaction="^Y"
else
let scrollaction="^E"
endif
exec "normal " . scrollaction
redraw
let counter=1
while counter<&scroll
let counter+=1
sleep 10m
redraw
exec "normal " . scrollaction
endwhile
endfunction
nnoremap <C-U> :call SmoothScroll(1)<Enter>
nnoremap <C-D> :call SmoothScroll(0)<Enter>
inoremap <C-U> <Esc>:call SmoothScroll(1)<Enter>i
inoremap <C-D> <Esc>:call SmoothScroll(0)<Enter>i
Особенности:
- Прокрутка на основе опции Vim
scroll
. - Настраиваемая скорость прокрутки (настройте аргумент времени команды
sleep
; я использую десять миллисекунд). Примечание : так же, как замедление частоты кадров в видео, если слишком сильно замедлить плавную прокрутку, это будет прерывистая прокрутка, а не плавная прокрутка.Но все, что вам подходит. - Работает в обычном режиме или в режиме вставки.
Примечание : все, что вы копируете и вставляете, помните, что ^
символ обозначает управляющий символ;Копирование-вставка приведет к неверным результатам, и они должны быть введены вручную!
^Y
- CTRL - V затем CTRL - Y ^E
- CTRL - V затем CTRL - E
Однако синтаксисы в стиле <C-U>
и <Enter>
буквально набираются как эти символы;команда map интеллектуально преобразует их в управляющие символы.
Использование мыши
В вопросе упоминается, что прокрутка с помощью мыши работает хорошо в GVim, но желательно использовать клавиатуру.Для меня это означает, что спрашивающий может быть заинтересован в решении для мыши, если оно работает в обычном терминале Vim.
Для меня включение поддержки мыши позволяет плавно перемещаться по колесу мыши.Кроме того, для меня плавная прокрутка наиболее важна, когда я смотрю по сторонам (то есть в обычном режиме), а не когда я редактирую (в режиме вставки), и если я не активно редактирую, мои руки должны оставаться наКлавиатура всегда удаляется, так что это хорошо работает.
На основании этот вопрос , тем не менее, может показаться, что некоторым людям приходится выполнять некоторые дополнительные настройки вручную, а не просто поворачиватьмышь (я просто использую set mouse=n
):
Мой .vimrc
имеет следующие строки
set mouse=a
map <ScrollWheelUp> <C-Y>
map <ScrollWheelDown> <C-E>