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


10

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

Как я могу сопоставить мою прокрутку движению влево / вправо?


2
Примечание: если вы нажимаете одну и ту же клавишу перемещения несколько раз подряд, вы, вероятно, делаете это неправильно (используйте wWeE$)}и т. Д.), А если вы используете клавиши со стрелками, вы определенно используете Vim неправильно.
дверная ручка

Ответы:


4

Согласно :help scroll-mouse-wheelответу нет, если вы используете Win32 GUI.

С другой стороны, используя графический интерфейс X11 или консоль 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'sinit.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)

Я знаю, что у OP другая ситуация, но это правильный ответ для некоторых пользователей.
Дэвид Лорд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.