Come posso usare il mio trackpad per lo scorrimento orizzontale?


10

Ho appena notato che il mio scroll trackpad funziona in Vim, inerzia e tutto il resto. Mi piacerebbe cambiarlo per lavorare in orizzontale - così posso scorrere su e giù per far muovere il cursore a sinistra ea destra invece di tenere premuto il tasto freccia destro per enormi quantità di tempo.

Come posso mappare il mio scorrimento sul movimento sinistro / destro?


2
Sidenote: se si preme lo stesso tasto di movimento più di alcune volte di seguito, probabilmente lo si sta facendo in modo sbagliato (usare wWeE$)}ecc.), E se si usano i tasti freccia si sta sicuramente usando Vim sbagliato.
Doorknob,

Risposte:


4

Secondo :help scroll-mouse-wheella risposta è no se si utilizza la GUI Win32.

D'altra parte, usando la GUI X11 o vim console con supporto del mouse, la rotella invia i tasti premuti che puoi rimappare.

Quindi, potresti ottenere il comportamento descritto da

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

Si noti che sto usando nmapper la mappatura in modalità normale.

Per ottenere un comportamento simile in altre modalità, è possibile mappare la direzione anziché il tasto normale. Ad esempio per il movimento in modalità inserimento:

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

Per renderli predefiniti, incollali nella parte inferiore di VIMRC.


Credo che l'OP stia usando OSX, quindi né Win32 né X11 (molto probabilmente).
Seth,

1
C'è una risposta per OSX?
bsmith89,

Purtroppo, la documentazione di VIM non menziona OSX e non ho una macchina OSX a portata di mano su cui provarla. :-(
John O'M.

1
ah, avrei dovuto menzionarlo: sto eseguendo OS X, ma SSHing su un server Ubuntu per la maggior parte del tempo.
Annulla

Questa è una buona notizia! Se il vim sull'altra estremità di ssh risponde agli eventi di scorrimento, allora l'emulatore di terminale sta inviando gli eventi di scorrimento e la risposta sopra dovrebbe funzionare per te, sia eseguendo localmente vim sia eseguendo in remoto vim. Se commenti con il nome del tuo emulatore di terminale, lo aggiungerò alla risposta.
John O'M.

4

Ho scoperto un modo per farlo con Hammerspoon e un uso intelligente della mappatura.

La prima parte sta configurando Shift+ ScrollUpe Shift+ ScrollDownper scorrere in orizzontale. Per fare ciò, hai inserito il seguente snippet di codice nel tuo .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>

Nota che dobbiamo usare <S-2-ScrollWheelUp>e simili perché vengono inviati anche come chiavi al terminale. Non ho trovato alcuna documentazione a riguardo (l'ho capito usando Ctrl+ Vdurante lo scorrimento in modalità inserimento).

Dopodiché, dobbiamo rimappare le pergamene orizzontali a Shift+ pergamene verticali. Per fare ciò, inseriamo il seguente frammento in 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

Creiamo la scrollBindvariabile in modo tale che l'osservatore dei tasti non venga cancellato dal Garbage Collector di Lua.


È un trucco intelligente, usare ^ v in modalità insert per vedere le chiavi inviate! Ho anche avuto difficoltà a trovare la documentazione, ma manca un PC (e un mouse con rotellina). Sto cercando di simulare una ruota con un touchscreen. Mi chiedo se ti è capitato di scoprire anche i tasti per la rotella di scorrimento orizzontale. Mi aspettavo che fossero 66/67 (dopo il 64/65 per su / giù), e sono pensati per essere i numeri dei pulsanti 6/7, ma non sembra funzionare. Grazie!
iperpallium,

2

Se usi MacVim su OS X, funzionerà con un trackpad:

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

Sono consapevole che la situazione di OP è diversa, ma questa è una risposta valida per alcuni utenti.
David Lord,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.