Каков наилучший способ сделать гладкую прокрутку в Vim?

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

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

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

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

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

Ответ 1

Обновление: теперь я переместил этот код, немного переработав в соответствии с рекомендациями в :help write-plugin, в Github repo.

Использование клавиатуры

Вот что я имею в своем .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, я использую десять миллисекунд). Примечание: точно так же, как замедление частоты кадров на видео, если вы слишком медленно замедляете прокрутку, это будет отрывной прокруткой, а не гладкой прокруткой. Но все, что лучше всего подходит вам.
  • Работает в обычном режиме или режиме вставки.

Примечание: все копии и пасты, помните, что символ ^ указывает символ управления; copy-paste приведет к недействительным результатам, и их необходимо ввести вручную!

  • ^YCTRL - V, затем CTRL - Y
  • ^ECTRL - V, затем CTRL - E

Однако синтаксисы стиля <C-U> и <Enter> буквально набираются как эти символы; команда карты интеллектуально преобразует их в управляющие символы.

Использование мыши

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

Для меня поддержка мыши позволяет плавно прокручивать колесико мыши. Кроме того, для меня наиболее важна гладкая прокрутка, когда я смотрю вокруг (то есть в нормальном режиме), а не когда я редактирую (в режиме вставки), и если я не активно редактирую, то нужно, чтобы мои руки оставались на клавиатура всегда удаляется, поэтому это хорошо работает.

На основе этого вопроса, хотя казалось бы, что некоторые люди должны сделать еще одну ручную настройку, кроме простого поворота мыши (я просто использую set mouse=n):


My .vimrc имеет следующие строки

 set mouse=a
 map <ScrollWheelUp> <C-Y>
 map <ScrollWheelDown> <C-E>

Ответ 2

В vim 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>

Ответ 3

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

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


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

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

Bundle terryma/vim-smooth-scroll

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

Plugin 'terryma/vim-smooth-scroll'

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

Я использую это в файле .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

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

установите so = 7

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

Ответ 5

Что я делаю, так это то, что я установил повторение клавиатуры очень быстро, около 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 полностью заторможенна (не предусмотрено нарушение). Это заставляет вас вращать левую руку. Я почти никогда не использую кепки, поэтому я их заменяю. Затем мой левый розовый палец может достигать клавиши Ctrl без каких-либо шагов йоги.

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

Ответ 6

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

Ответ 7

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

Ответ 8

Я только что нашел этот плагин, названный "ускоренным-гладким прокруткой" ( "Плагин 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>.