Каков наилучший способ сделать плавную прокрутку в Vim? - PullRequest
68 голосов
/ 31 октября 2010

Основные команды прокрутки в Vim:

  1. Ctrl - B и Ctrl - F , а также PageUp и PageDown прокрутка на полную страницу
  2. Ctrl - U и Ctrl - D прокрутка половины страницы по умолчанию
  3. Ctrl - Y и Ctrl - E прокрутить одну строку

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

Поскольку в настоящее время нет первой сторонней поддержки плавной прокрутки, какие наименее нежелательные обходные пути / плагины?

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

Ответы [ 8 ]

32 голосов
/ 30 августа 2012

Обновление : теперь я перенес этот код, несколько реорганизованный в соответствии с рекомендациями на :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>

9 голосов
/ 31 октября 2010

В vim's tips.txt есть простой взлом с повторным отображением:

Smooth scrolling                    *scroll-smooth*

If you like the scrolling to go a bit smoother, you can use these mappings:

    :map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
    :map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>
6 голосов
/ 26 мая 2013

Недавний плагин

Я разместил нечто подобное здесь , но в основном есть отличный плагин, который мы можем использовать сейчас для прокрутки, называемый terryma / vim-smooth-scroll . Это обеспечивает очень приятную и плавную прокрутку.


Установка довольно проста:

1 Я использую Vundle , поэтому я просто добавил это в .vimrc.bundles :

Bundle terryma/vim-smooth-scroll

В последней версии Vundle, доступной сегодня, 29 апреля 2016 года, вы можете поместить ее в .vimrc :

Plugin 'terryma/vim-smooth-scroll'

2 Как указано в документе, вы можете установить 3 аргумента: расстояние , продолжительность и скорость .

Я использую это в моем .vimrc файле:

noremap <silent> <c-b> :call smooth_scroll#up(&scroll*2, 10, 4)<CR>
noremap <silent> <c-f> :call smooth_scroll#down(&scroll*2, 10, 4)<CR>
4 голосов
/ 05 апреля 2013

Бесстыдный плагин, но я создал здесь плагин, который вы можете использовать для простой настройки расстояния, скорости и продолжительности анимации прокрутки: https://github.com/terryma/vim-smooth-scroll

3 голосов
/ 01 декабря 2010

Что я делаю, я устанавливаю повторение клавиатуры очень быстро, около 120 символов в секунду, и задержка мала. Затем я сопоставляю с 4j и 4k Я перемещаюсь вверх и вниз по исходному коду, используя j и k, который перемещает курсор вверх и вниз красиво и быстро, довольно плавно. Но вот хорошая часть, и это работает на Linux, а не Windows. Вот уже несколько лет клавиатурный ввод X11 работает таким образом, что при нажатии и удерживании j он, очевидно, начинает выводить j символов. Но когда вы продолжаете удерживать j, а затем также нажимаете клавишу ctrl, X11 начинает выдавать символы c-j без необходимости повторного нажатия клавиши j. Затем, когда вы отпускаете клавишу ctrl и продолжаете нажимать j, X11 продолжает снова вводить j. Таким образом, j заставляет курсор начать двигаться красиво и плавно вниз, и вы можете периодически нажимать ctrl, не отпуская j, чтобы придать ему импульс, толчок.

Кроме того, я делаю то, что делает Девин, и я устанавливаю scrolloffset на 5.

Наконец, я поменяю местами Ctrl и Cap Lock. Положение клавиши ctrl по умолчанию полностью задерживается (без обид). Это заставляет вас поворачивать левую руку. Я почти никогда не использую Caps Lock, поэтому меняю их местами. Тогда мой левый розовый палец может дотянуться до клавиши ctrl без каких-либо движений йоги.

Эти вещи работали для меня годами. Я использую только vim, а не gvim.

3 голосов
/ 01 ноября 2010

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

установить так = 7

номер "прокрутки" так "(по умолчанию 0)global
{not in Vi}
Минимальное количество строк экрана, которые нужно держать над и под курсором.Это сделает некоторый контекст видимым, где вы работаете.Если вы установите его на очень большое значение (999), строка курсора всегда будет в середине окна (за исключением начала или конца файла или при переносе длинных строк).Для горизонтальной прокрутки см. «Sidescrolloff».ПРИМЕЧАНИЕ. Этот параметр имеет значение 0, если установлено значение «совместимо».

2 голосов
/ 21 декабря 2016

Плагин cskeeters / vim-smooth-scroll поддерживает плавную прокрутку и не требует настройки.Он поддерживает плавную прокрутку с zt, zz и zb.Это вилка плагин Террима .Некоторые открытые запросы были применены.

0 голосов
/ 29 апреля 2016

Я только что нашел этот плагин , который называется "ускоренная плавная прокрутка" ("Плагин Vim для ускоренной плавной прокрутки (отображение на <C-D>/<C-U>, <C-F>/<C-B>)")), который можно использовать, например, через Vundle.поместив эту строку в ваш .vimrc:

Plugin 'yonchu/accelerated-smooth-scroll'

Затем, перезапустив Vim и запустив команду :PluginInstall, затем снова перезапустите Vim и используйте <C-D> (Команды Ctrl + D ) и <C-O> ( Ctrl + O ) обычно.

К сожалению, этот плагин также перемещает курсор вместо того, что я хотел: просто прокрутить экран, как команды <C-E> и <C-Y>.

...