¿Cómo puedo usar mi trackpad para el desplazamiento horizontal?

10

Acabo de notar que mi desplazamiento del trackpad funciona en Vim, inercia y todo. Me gustaría cambiar esto para que funcione horizontalmente, de modo que pueda desplazarme hacia arriba y hacia abajo para hacer que el cursor se mueva hacia la izquierda y hacia la derecha en lugar de mantener presionada la tecla de flecha derecha durante mucho tiempo.

¿Cómo puedo asignar mi desplazamiento al movimiento izquierdo / derecho?

Deshacer
fuente
2
Nota al margen: si está presionando la misma tecla de movimiento más de unas pocas veces seguidas, probablemente lo esté haciendo mal (use, wWeE$)}etc.), y si está usando las teclas de flecha, definitivamente está usando Vim incorrectamente.
Pomo de la puerta

Respuestas:

4

De acuerdo con :help scroll-mouse-wheella respuesta es no si está utilizando la GUI de Win32.

Por otro lado, usando X11 GUI o consola vim con soporte para mouse, la rueda envía pulsaciones de teclas que puedes reasignar.

Entonces, podría obtener el comportamiento que describe por

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

Tenga en cuenta que estoy usando nmappara el mapeo en modo normal.

Para obtener un comportamiento similar en otros modos, puede asignar a la dirección en lugar de la tecla normal. Por ejemplo, para el movimiento del modo de inserción:

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

Para hacer estos valores predeterminados, pégalos en la parte inferior de tu vimrc.

John O'M.
fuente
Creo que el OP está usando OSX, por lo que ni Win32 ni X11 (muy probablemente).
Seth
1
¿Hay una respuesta para OSX?
bsmith89
Por desgracia, la documentación de vim no menciona OSX y no tengo una máquina OSX a mano para probarla. :-(
John O'M.
1
Ah, debería haber mencionado esto: estoy ejecutando OS X, pero SSHing en un servidor Ubuntu la mayor parte del tiempo.
Deshacer
¡Esas son buenas noticias! Si el vim en el otro extremo del ssh responde a los eventos de desplazamiento, su emulador de terminal está enviando los eventos de desplazamiento y la respuesta anterior debería funcionar para usted, tanto ejecutando localmente vim como ejecutando remotamente vim. Si comentas con el nombre de tu emulador de terminal, lo agregaré a la respuesta.
John O'M.
4

Descubrí una forma de hacerlo con Hammerspoon y el uso inteligente de la cartografía.

La primera parte es configurar Shift+ ScrollUpy Shift+ ScrollDownpara desplazarse horizontalmente. Para hacer eso, ha puesto el siguiente fragmento de código en su .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>

Tenga en cuenta que tenemos que usar <S-2-ScrollWheelUp>y similares porque también se envían como claves al terminal. No encontré documentación sobre esto (descubrí esto usando Ctrl+ Vmientras me desplazaba en modo de inserción).

Después de eso, tenemos que reasignar los pergaminos horizontales a Shift+ pergaminos verticales. Para hacerlo, colocamos el siguiente fragmento en 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

Creamos la scrollBindvariable solo para que el recolector de basura de Lua no borre el observador de pulsaciones de teclas.

thalesmello
fuente
¡Es un truco inteligente, usar ^ v en el modo de inserción para ver las claves enviadas! También he tenido problemas para encontrar documentación, pero me falta una PC (y un mouse con rueda). Estoy tratando de simular una rueda con una pantalla táctil. Me pregunto si también descubriste las claves para la rueda de desplazamiento horizontal. Esperaba que fueran 66/67 (después de 64/65 para arriba / abajo), y están destinados a ser los botones número 6/7, pero no parece estar funcionando. ¡Gracias!
hyperpallium
2

Si usa MacVim en OS X, esto funcionará con un trackpad:

set mouse=n " enable mouse in normal mode
set nowrap  " disable line wrapping (so there's something to scroll to)
David Lord
fuente
Soy consciente de que la situación de OP es diferente, pero esta es una respuesta válida para algunos usuarios.
David Lord