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


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.