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


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.