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.