Jak używać gładzika do przewijania w poziomie?

10

Właśnie zauważyłem, że przewijanie gładzika działa w Vimie, bezwładności i wszystkim. Chciałbym to zmienić, aby działało w poziomie - więc mogę przewijać w górę i w dół, aby kursor poruszał się w lewo i prawo zamiast przytrzymywać prawy klawisz strzałki przez długi czas.

Jak zmapować moje przewijanie do ruchu w lewo / w prawo?

Cofnij
źródło
2
Sidenote: jeśli naciskasz ten sam klawisz ruchu więcej niż kilka razy z rzędu, prawdopodobnie robisz to źle (użyj wWeE$)}itp.), A jeśli używasz klawiszy strzałek, zdecydowanie używasz Vima źle.
Klamka

Odpowiedzi:

4

Zgodnie :help scroll-mouse-wheelz odpowiedzią nie, jeśli używasz GUI Win32.

Z drugiej strony, przy użyciu graficznego interfejsu użytkownika X11 lub konsoli vim z obsługą myszy, koło wysyła naciśnięcia klawiszy, które można odwzorować.

Możesz uzyskać zachowanie, które opisujesz

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

Zauważ, że używam nmapdo mapowania w trybie normalnym.

Aby uzyskać podobne zachowanie w innych trybach, możesz odwzorować kierunek zamiast normalnego klawisza. Np. Dla ruchu w trybie wstawiania:

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

Aby ustawić je jako domyślne, przyklej je na dole vimrc.

John O'M.
źródło
Wierzę, że OP używa OSX, więc ani Win32, ani X11 (najprawdopodobniej).
Seth
1
Czy jest odpowiedź na OSX?
bsmith89
Niestety, dokumentacja vima nie wspomina o OSX i nie mam pod ręką maszyny OSX do wypróbowania. :-(
John O'M.
1
ah, powinienem o tym wspomnieć - używam OS X, ale przez większość czasu korzystam z SSHing na serwerze Ubuntu.
Cofnij
To dobra wiadomość! Jeśli vim na drugim końcu ssh reaguje na zdarzenia przewijania, emulator terminala wysyła zdarzenia przewijania i powyższa odpowiedź powinna działać dla Ciebie, zarówno lokalnie, jak i zdalnie. Jeśli skomentujesz nazwę swojego emulatora terminala, dodam ją do odpowiedzi.
John O'M.
4

Wymyśliłem sposób na zrobienie tego dzięki Hammerspoon i sprytnemu użyciu mapowania.

Pierwszą częścią jest konfiguracja Shift+ ScrollUpi Shift+ ScrollDowndo przewijania w poziomie. Aby to zrobić, umieściłeś następujący fragment kodu w swoim .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>

Pamiętaj, że musimy używać <S-2-ScrollWheelUp>i tym podobnych, ponieważ są one wysyłane jako klucze do terminala. Nie znalazłem dokumentacji na ten temat (zorientowałem się, używając Ctrl+ Vpodczas przewijania w trybie wstawiania).

Następnie musimy ponownie mapować zwoje poziome na Shift+ zwoje pionowe. Aby to zrobić, umieszczamy następujący fragment w 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

Tworzymy scrollBindzmienną tylko po to, aby obserwator naciśnięć klawiszy nie był usuwany przez moduł wyrzucający śmieci Lua.

thalesmello
źródło
To sprytna sztuczka, aby użyć ^ v w trybie wstawiania, aby zobaczyć klucze wysłane! Miałem też problemy ze znalezieniem dokumentacji, ale brakuje mi komputera (i kółka myszy). Próbuję symulować koło za pomocą ekranu dotykowego. Zastanawiam się, czy zdarzyło ci się także odkryć klucze do poziomego kółka przewijania. Spodziewałem się, że będą to 66/67 (po 64/65 w górę / w dół), i mają to być przyciski numer 6/7, ale wydaje się, że to nie działa. Dzięki!
hyperpallium
2

Jeśli korzystasz z MacVim na OS X, będzie to działać z gładzikiem:

set mouse=n " enable mouse in normal mode
set nowrap  " disable line wrapping (so there's something to scroll to)
David Lord
źródło
Wiem, że sytuacja OP jest inna, ale dla niektórych użytkowników jest to poprawna odpowiedź.
David Lord