Mapuj klawisz Escape na: q w vimie w trybie normalnym

0

Korzystam z vima jako przeglądarki w komendzie północy i chcę szybko przeglądać i zamykać plik. Jak mogę odwzorować klawisz Escape :qw trybie normalnym, aby vim zakończył działanie tylko wtedy, gdy nic się nie zmieni?

Oxy
źródło
Dlaczego nie użyć rzeczywistej „przeglądarki” zamiast edytora?
romainl
Ponieważ daje mi to znacznie więcej możliwości, takich jak konfigurowalne podświetlenie kodu. I mogę edytować plik w przypadku, który mi się podoba, i wyjść bez bólu, jeśli nie zostanie zmodyfikowany.
Oxy

Odpowiedzi:

0

Aby to zrobić tylko dla bieżącej vimsesji, wpisz następujące polecenia (in vim). (Spacje są dodawane dla przejrzystości. Nie wpisuj spacji, chyba że wskazałem Space).

:mapSpaceCtrl+ VEscSpace:qCtrl+VEnterEnter

Aby to zrobić tylko dla reszty bieżącej sesji terminalu, wpisz następujące polecenia (w terminalu, tj. Powłoka). (Podziały linii są dodawane dla zachowania przejrzystości. Wpisz następujące w jednym wierszu; nie pisz, Enterchyba że wskazałem Enter).

E  X  I  N  I  T  =
"  :  m  a  p  Space  Ctrl+ V  Esc  Space  :  q  Ctrl+V  Enter  "  Enter

i wtedy

export EXINITEnter

Aby zmiany były „trwałe” (tzn. Dopóki nie zmienisz plików), umieść powyższe polecenia ( EXINIT="…"i export EXINIT) w swoim .bash_profilei / lub .bashrc. (Możesz złożyć je razem w tym samym wierszu, oddzielając je ;. Możesz to skrócić, łącząc je w export EXINIT="…".) To nie zadziała, dopóki nie zalogujesz się ponownie, a nawet dopóki nie uruchomisz nowej powłoki, chyba że po prostu wpisz EXINITpolecenia lub sourceplik, w którym wstawiasz EXINITpolecenia.

Uwaga: jeśli nie używasz bash jako podstawowej powłoki, może być konieczne zmodyfikowanie powyższej powłoki.

Alternatywnie spróbuj wstawić :map …polecenie do .exrcpliku.


W przypadku, gdy nie jest to oczywiste,

: ciąg  mapy 1 ciąg 2

(w vi/ vim) tworzy mapowanie (tłumaczenie), dzięki czemu podczas pisania (w trybie komend) edytor zachowuje się tak, jak podczas pisania . A + to znak super-escape, który informuje zarówno / i powłokę (w rzeczywistości prawdopodobnie wszystkie programy lub przynajmniej większość z nich), że następujący znak ma być interpretowany jako dosłowny znak tekstowy, a nie jako kontrola postać. Zauważ, że +, po którym następuje znak powrotu karetki, często wyświetlany jako ; ale w tym jest to interpretowane jako .string1string2CtrlVvivimCtrlVEnter^M:map string2Enter

G-Man
źródło
Dzięki G-Man. Pierwsze podejście działa doskonale (ale jak wiadomo, jest bezużyteczne). Drugi nie działa. Jestem na Mac OS. Czy masz pojęcie, dlaczego to nie działa?
Oxy
Postępowałem zgodnie z tą samą procedurą dotyczącą ~/.exrcpliku i to również nie działa.
Oxy
@Oxy: Zredagowałem odpowiedź, aby wyjaśnić możliwe nieporozumienia. Nie wiem, dlaczego to nie działa. Czy potrafisz wprowadzić inne polecenia za vimpomocą dowolnej z tych technik? Na przykład, czy masz już osobę, ~/.exrcktórej treść działa? Jeśli wpiszesz export EXINIT=":map q jjjj"; vim some_file, czy ( q) powoduje, że kursor przesuwa się o cztery linie w dół? Jeśli wpiszesz export EXINIT=":set list"; vim some_file, czy wyświetla się $na końcach linii (i czy wyświetla tabulatory jako ^I)?
G-Man
Nie, nie ma. Dziwne!
Oxy
Cóż, vipowinien być vina całym świecie, ale OS X to nie Linux. Spróbuj zbadać visystem OS X (zacznij od man vi, a następnie wyszukaj Super User, a następnie Google), aby sprawdzić, czy ma on inny sposób pozwalający ci przejść przez polecenia inicjalizacji.
G-Man