Vim w OSX: Jak zrobić page-up / page-down / przejść do EOL poprzez plik vim otwarty w terminalu?

28

W kitach, czyli przede wszystkim w VIM, mogłem wykonać następujące czynności:

  • Strona w górę / w dół: Używanie natywnego klawisza Strona w górę / w dół. W Macu alternatywą jest Fn + góra / dół, który nie działa w terminalu (nie przewija się w pliku vim, ale przewija bufor terminala)
  • Podobnie, klawisze Fn + prawy / lewy nie zabierają mnie na początek / koniec linii

Jak emulować tę funkcjonalność w Mac OS X?

TCSGrad
źródło
Może pomóc wyjaśnić twoje pytanie, jeśli zastąpisz lub zwiększysz „Fn + prawo / lewo” na „Home / End”, co właśnie robią te kombinacje Fn.
Chris Page

Odpowiedzi:

48

To nie jest specjalnie pytanie Mac, to naprawdę pytanie vi.

W trybie nawigacji ctrl-f przewija stronę w dół, a ctrl-b przewija stronę w górę (pomyśl „F” w przód i „B”). Ctrl-d przewija w dół o pół strony, a Ctrl-u przewija w górę o pół strony.

^ zabierze Cię na początek linii, a $ do końca. Wiem, wiem, ale są tego historyczne powody.

Oto naprawdę dobra ściągawka na temat kontrolek vi. vi jest nieco tajemnicze, ale po jego internalizacji jest najszybszym i najsprytniejszym edytorem tekstu na świecie.

Dan Ray
źródło
1
„To nie jest specjalnie pytanie Mac, to naprawdę pytanie vi”. Chodzi głównie o to, jak skonfigurować mapę klawiszy aplikacji Mac OS X Terminal, ale okazuje się, że druga część pytania, dotycząca początku / końca linii, ma już mapowanie w Terminalu i jednym z możliwych rozwiązań jest edycja mapy vi do Zrozum to. Alternatywnie można edytować mapę klawiatury terminala.
Chris Page
16

Domyślne preferencje terminala mapują Shift- Page Upi Shift- Page Downna sekwencje znaków, które każą programom takim jak Vim i Emacs przewijać ( ESC [ 5 ~i ESC [ 6 ~).

Jeśli chcesz, aby te klawisze wysyłały sekwencje znaków do terminala bez Shiftmodyfikatora, możesz dostosować mapę klawiatury:

Terminal> Preferencje> Ustawienia> [profil]> Klawiatura

Jeśli to zrobisz, zalecam odwrócenie znaczenia Shiftmodyfikatora dla tych kluczy poprzez zamianę mapowań dla klawiszy przesuniętych i nieprzesuniętych, aby alternatywne zachowania były nadal dostępne. Zobacz także Zobacz menu, które zawiera przewijania komend, które używają Commandmodyfikatora więc są one dostępne niezależnie od klawiatury mapie terminala.

Podobnie Shift- HomeiShift - Endsą mapowane, aby przejść na początek / koniec bieżącej linii ( ESC [ Hi ESC [ F). Sekwencje te są zrozumiałe dla Basha, ale może być konieczne dostosowanie Vima, aby je zrozumieć, lub edycja mapowań specjalnie dla Vima. Vim, Emacs i niektóre inne programy wysyłają sekwencję ucieczki, aby wprowadzić terminal do „Trybu kursora aplikacji”, w którym wysyłane są klawisze Home / End ESC O Hi ESC O F, ale Terminal (od 10.9) nie implementuje tego zachowania. Możesz więc zmienić mapę klawiatury, aby zamiast tego wysłać te inne kody (Bash również je rozumie). (W przypadku innych systemów operacyjnych, Homei Endsą stosowane do startu / końca linii, więc terminal zapewnia im Shiftmodyfikator symetrii).

Control- Left ArrowiControl - Right Arrowsą również domyślnie odwzorowane na sekwencje „przenieś na początek / koniec linii”, chociaż różnią się one od sekwencji zamapowanych na Shift- Homei Shift- End. Zamiast tego są odwzorowane na sekwencje kompatybilne z Emacsem i Bash ESC [ 5 Doraz ESC [ 5 C. Zakładając, że nie są one używane przez Vima, najprostszym podejściem byłoby dostosowanie Vima do akceptowania ich przy użyciu ~ / .vimrc.

Pamiętaj, że w nowszych wersjach systemu macOS Terminal nie ma już wyraźnych mapowań dla HomeEnd domyślnego preferencji i preferencji. Zamiast tego zachowuje się dynamicznie, gdy klawisze automatycznie odwzorowują początek / koniec linii, gdy aktywny jest ekran alternatywny - np. Podczas korzystania z aplikacji pełnoekranowej, takiej jak emacs, vim, screen lub tmux. Podczas używania programu zorientowanego liniowo, takiego jak powłoka na ekranie głównym, domyślnie kontynuują przewijanie widoku terminala. ShiftModyfikator odwraca zachowanie.

Chris Page
źródło
@ MarkHu Omówiłem to w ostatnim akapicie.
Chris Page
Jak opisano częściowo w ostatnim akapicie, wartości domyślne mogą być inne / brakować w innych wersjach MacOS. Do wersji 10.13.6 musiałem dodać \033[5~(i ... 6.) Dla PageDown / Up.
MarkHu
2

Najłatwiejszym i najlepszym rozwiązaniem jest n+ , gdzien jest liczba linii, które chcesz zejść, i jest klawiszem w dół.

Regularnie robię 12+ i 22+ .

T.Woody
źródło
1

Byłem przyzwyczajony do Home / End, który doprowadził mnie do początku i końca linii w trybie wstawiania (od użycia w Windows i myślę, że Linux), którego Mac nie obsługuje. Jest to szczególnie denerwujące, ponieważ kiedy używam vima na zdalnym systemie, nie mogę tego łatwo zrobić. Po kilku bolesnych próbach i błędach wymyśliłem kilka.vimrc linii, które robią to samo, i ostatecznie znalazłem kogoś, kto wymyślił podobne rozwiązanie tutaj:

https://coderwall.com/p/fd_bea

Cieszyć się.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
użytkownik1442960
źródło