Як я можу використовувати трекпад для горизонтальної прокрутки?


10

Я щойно помітив, що мій прокрутка трекпад працює у Vim, за інерцією та ін. Я хотів би змінити це, щоб воно працювало горизонтально - так що я можу прокручувати вгору та вниз, щоб змусити курсор рухатись вліво-вправо, замість того, щоб утримувати праву клавішу зі стрілкою протягом величезної кількості часу.

Як я можу відобразити рух прокрутки вліво / вправо?


2
Сторінка: якщо ви натискаєте одну і ту ж клавішу руху кілька разів поспіль, ви, ймовірно, робите це неправильно (використовуйте wWeE$)}і т.д.), а якщо ви використовуєте клавіші зі стрілками, ви точно не використовуєте Vim.
Doorknob

Відповіді:


4

Відповідно до :help scroll-mouse-wheelвідповіді немає, якщо ви використовуєте графічний інтерфейс Win32.

З іншого боку, використовуючи X11 GUI або консоль vim із підтримкою миші, колесо надсилає натискання клавіш, які ви можете перезавантажити.

Отже, ви можете отримати поведінку, яку ви описуєте

:nmap <ScrollWheelUp> h
:nmap <ScrollWheelDown> l

Зверніть увагу, що я використовую nmapдля відображення в звичайному режимі.

Щоб отримати подібну поведінку в інших режимах, ви можете зіставити напрямок замість звичайної клавіші. Напр. Для руху режиму вставки:

:imap <ScrollWheelUp> <Left>
:imap <ScrollWheelDown> <Right>

Щоб зробити ці типовими, дотримуйтесь їх у нижній частині вашого vimrc.


Я вважаю, що OP використовує OSX, тому ні Win32, ні X11 (швидше за все).
Сет

1
Чи є відповідь для OSX?
bsmith89

На жаль, документація на vim не згадує OSX, і я не маю під рукою OSX, на якій можна спробувати. :-(
Джон О'М.

1
ах, я повинен був це згадати - я запускаю OS X, але SSHing на сервері Ubuntu більшу частину часу.
Скасувати

Це гарна новина! Якщо vim на іншому кінці ssh відповідає на події прокрутки, то ваш емулятор термінала надсилає події прокрутки, і відповідь, описаний вище, повинен працювати для вас, як локально запущений vim, так і віддалений запущений vim. Якщо ви коментуєте ім'я емулятора вашого терміналу, я додаю його до відповіді.
Джон О'М.

4

Я придумав спосіб зробити це за допомогою Hammerspoon і розумним використанням карти.

Перша частина налаштовує Shift+ ScrollUpі Shift+ ScrollDownдля прокручування по горизонталі. Для цього ви помістили такий фрагмент коду у свій .vimrc:

nnoremap <S-ScrollWheelUp> <ScrollWheelLeft>
nnoremap <S-2-ScrollWheelUp> <2-ScrollWheelLeft>
nnoremap <S-3-ScrollWheelUp> <3-ScrollWheelLeft>
nnoremap <S-4-ScrollWheelUp> <4-ScrollWheelLeft>
nnoremap <S-ScrollWheelDown> <ScrollWheelRight>
nnoremap <S-2-ScrollWheelDown> <2-ScrollWheelRight>
nnoremap <S-3-ScrollWheelDown> <3-ScrollWheelRight>
nnoremap <S-4-ScrollWheelDown> <4-ScrollWheelRight>

Зауважте, що ми маємо використовувати <S-2-ScrollWheelUp>і подібне, оскільки вони також надсилаються як ключі до терміналу. Я не знайшов жодної документації про це (я зрозумів це, використовуючи Ctrl+ Vпід час прокрутки в режимі вставки).

Після цього ми повинні перевстановити горизонтальні прокрутки до Shift+ вертикальних прокруток. Для цього ми розміщуємо наступний фрагмент у «Hammerspoon»init.lua

scrollBind = hs.eventtap.new({hs.eventtap.event.types.scrollWheel}, function(e)
  if is_active('iTerm2') then
    local horizontalOffset = e:getProperty(hs.eventtap.event.properties.scrollWheelEventDeltaAxis2)

    if horizontalOffset ~= 0 then
      hs.eventtap.scrollWheel({ 0, horizontalOffset }, {"shift"}, 'pixel')
      return true
    end
  end

  return false
end):start()

function is_active(program_name)
  local active_window_name = hs.window.focusedWindow():application():name()
  return active_window_name == program_name
end

Ми створюємо scrollBindзмінну просто так, щоб спостерігач натискань клавіш не стирав сміттєзбірник Lua.


Це розумний трюк, щоб використовувати ^ v у режимі вставки, щоб побачити надіслані клавіші! У мене також були проблеми з пошуком документації, але не вистачає ПК (і колеса миші). Я намагаюся імітувати колесо з сенсорним екраном. Цікаво, чи траплялось вам виявити клавіші для горизонтального колеса прокрутки. Я очікував, що вони будуть 66/67 (після 64/65 для вгору / вниз), і вони мають бути цифрами кнопок 6/7, але це, здається, не працює. Дякую!
гіперпалій

2

Якщо ви використовуєте MacVim в OS X, це буде працювати з трекпад:

set mouse=n " enable mouse in normal mode
set nowrap  " disable line wrapping (so there's something to scroll to)

Я знаю, що ситуація з ОП відрізняється, але це правдива відповідь для деяких користувачів.
Девід Лорд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.