Comment puis-je utiliser mon trackpad pour le défilement horizontal?


10

Je viens de remarquer que mon défilement trackpad fonctionne dans Vim, l'inertie et tout. Je voudrais que cela fonctionne horizontalement - afin que je puisse faire défiler vers le haut et vers le bas pour faire bouger le curseur de gauche à droite au lieu de maintenir enfoncée la touche flèche droite pendant d'énormes périodes de temps.

Comment puis-je mapper mon défilement vers la gauche / droite?


2
Sidenote: si vous appuyez sur la même touche de mouvement plusieurs fois de suite, vous vous trompez probablement (utilisez wWeE$)}etc.), et si vous utilisez les touches fléchées, vous utilisez définitivement Vim à tort.
Poignée de porte

Réponses:


4

Selon :help scroll-mouse-wheella réponse, non si vous utilisez l'interface graphique Win32.

D'autre part, à l'aide de l'interface graphique X11 ou de la console vim avec prise en charge de la souris, la molette envoie des pressions de touches que vous pouvez remapper.

Ainsi, vous pourriez obtenir le comportement que vous décrivez par

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

Notez que j'utilise nmappour la cartographie en mode normal.

Pour obtenir un comportement similaire dans d'autres modes, vous pouvez mapper vers la direction au lieu de la touche normale. Par exemple, pour le mouvement en mode insertion:

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

Pour définir ces valeurs par défaut, collez-les au bas de votre vimrc.


Je pense que l'OP utilise OSX, donc ni Win32 ni X11 (très probablement).
Seth

1
Y a-t-il une réponse pour OSX?
bsmith89

Hélas, la documentation de vim ne mentionne pas OSX et je n'ai pas de machine OSX à portée de main pour l'essayer. :-(
John O'M.

1
ah, j'aurais dû le mentionner - j'utilise OS X, mais SSHing sur un serveur Ubuntu la plupart du temps.
Annuler le

C'est une bonne nouvelle! Si le vim à l'autre extrémité du ssh répond aux événements de défilement, votre émulateur de terminal envoie les événements de défilement et la réponse ci-dessus devrait fonctionner pour vous, à la fois en exécutant localement vim et en exécutant à distance vim. Si vous commentez avec le nom de votre émulateur de terminal, je l'ajouterai à la réponse.
John O'M.

4

J'ai trouvé un moyen de le faire avec Hammerspoon et une utilisation intelligente de la cartographie.

La première partie configure Shift+ ScrollUpet Shift+ ScrollDownpour faire défiler horizontalement. Pour ce faire, vous avez mis l'extrait de code suivant dans votre .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>

Notez que nous devons utiliser <S-2-ScrollWheelUp>des éléments similaires, car ils sont également envoyés en tant que clés au terminal. Je n'ai trouvé aucune documentation à ce sujet (j'ai compris cela en utilisant Ctrl+ Vlors du défilement en mode insertion).

Après cela, nous devons remapper les parchemins horizontaux en Shift+ parchemins verticaux. Pour ce faire, nous plaçons l'extrait de code suivant dans 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

Nous créons la scrollBindvariable juste pour que l'observateur de frappe ne soit pas effacé par le garbage collector de Lua.


C'est une astuce astucieuse, utiliser ^ v en mode insertion pour voir les clés envoyées! J'ai également eu du mal à trouver de la documentation, mais je n'ai pas de PC (et de souris à molette). J'essaie de simuler une roue avec un écran tactile. Je me demande si vous avez également découvert les touches de la molette de défilement horizontale. Je m'attendais à ce qu'ils soient 66/67 (après 64/65 pour monter / descendre), et ils sont censés être des boutons numéro 6/7, mais cela ne semble pas fonctionner. Merci!
hyperpallium

2

Si vous utilisez MacVim sur OS X, cela fonctionnera avec un trackpad:

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

Je suis conscient que la situation d'OP est différente, mais c'est une réponse valable pour certains utilisateurs.
David Lord
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.