podczas uruchamiania ekranu w OSX, Command + R przesuwa klawisze strzałek w vimie na wszystkich ekranach

15

Jak to rozwiązujesz? ponieważ przez cały czas naciskasz polecenie r, aby ponownie załadować przeglądarkę, i często jesteś w terminalu.

Ponieważ nie zastanawiałem się, jak ponownie włączyć klawisze strzałek, obecnie zabijam wszystkie ekrany i ponownie uruchamiam ekran, co jest uciążliwe.

Der Hochstapler
źródło

Odpowiedzi:

28

Jako dobry mały adwokat Vima, mam obowiązek powiedzieć ci, abyś nauczył się używać hjkl jako klawiszy kursora. W połowie odkrywania problemu myślałem, że rozwiązał się w tajemniczy sposób, dopóki nie zdałem sobie sprawy, że testuję przy użyciu hjkl zamiast rzeczywistych klawiszy strzałek.

Tak czy inaczej, teraz prawdziwa odpowiedź.

Zamiast wyłączać wszystkie ekrany i restartować, możesz skorzystać z możliwości poruszania się między terminalami. Naciśnij, CTRL+A CTRL+Daby odłączyć ekran od terminala, a następnie biegnij, screen -D -Raby ponownie podłączyć . To powinno sprawić, że klawisze strzałek znów będą działać.

Jeśli nie jesteś na ekranie, ale tylko w Vimie, możesz CTRL+Zi wpisać fgten sam efekt.

Możesz także obejść problem z klawiszem kursora w Vimie, ale reset mógł zmienić inne opcje terminala, więc bezpieczniej jest postępować zgodnie z powyższym opisem, aby nie dostrzec innych problemów z wyświetlaniem / klawiaturą. Jeśli mimo wszystko chcesz ponownie przypisać, oto one:

map <Esc>[A <Up>
map <Esc>[B <Down>
map <Esc>[C <Right>
map <Esc>[D <Left>

Brudne szczegóły:

Zarówno Vim, jak i screen używają biblioteki ncurses do zarządzania terminalem. Jedną z rzeczy, które ncurses robi, kiedy przejmuje kontrolę nad terminalem kompatybilnym z VT100, jest przełączanie klawiszy strzałek w „tryb aplikacji”, który zmienia kody, które wysyłają. Na przykład klawisz strzałki w górę zmienia się z Esc [ Ana Esc O A. Emitowany w tym celu kod sterujący VT100 to Esc [ ? 1 h. Polecenie resetowania terminala wysłane przez Command + R resetuje klawisze kursora do wartości domyślnych.

Ekran odłączania i ponownego podłączania powoduje, że ncurses ponownie przejmuje kontrolę nad terminalem, który ponownie stosuje wszystkie ustawienia, które lubi, więc jest to prawdopodobnie najbardziej przenośny i niezawodny sposób na przywrócenie normalnego działania.

Kody kontrolne VT100: http://www.handshake.de/infobase/dfue/prgrmmer/t322.htm

Jander
źródło
Innym problemem może być typ terminalu mylący vim, patrz Błędne klucze w vimie podczas uruchamiania w tmux
kynan
dziękuję za to rozwiązanie! to mnie denerwuje jako programistę. w przeglądarce często naciskasz cmd-r, aby odświeżyć ekran, a czasami musiałem przypadkowo uderzać w cmd-r. do tej pory nie mogłem zrozumieć, dlaczego wycierano mi klawisze strzałek. a dla was, hjkl purists, głównym powodem, dla którego nie używam hjkl, jest to, że nie są one dostępne do poruszania kursorem w trybie wstawiania. rozwiąż ten problem, a ja ponownie się zastanowię.
rev.
6

Możesz to naprawić szybko i łatwo :!reset

GlyphGryph
źródło
1

Jeśli używasz iTerm, możesz odzyskać swoją sesję vim, naciskając command+dicommand+w

Dlaczego?

command+d podzieli panel terminala, magicznie przywracając ten, z którego przyszedłeś.

command+w zamknie teraz właśnie podzielony panel, który właśnie otworzyłeś.

Adam Grant
źródło
1

Mapuję Command-r na „Ignoruj” w mapowaniach klawiszy iTerm.

Zrzut ekranu okna dialogowego preferencji iTerm2

Christian Long
źródło