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+D
aby odłączyć ekran od terminala, a następnie biegnij, screen -D -R
aby 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+Z
i wpisać fg
ten 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
[
A
na 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
Możesz to naprawić szybko i łatwo
:!reset
źródło
Jeśli używasz iTerm, możesz odzyskać swoją sesję vim, naciskając
command+d
icommand+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ś.źródło
Mapuję Command-r na „Ignoruj” w mapowaniach klawiszy iTerm.
źródło