Dlaczego cmd-r psuje Vima na Macu? Co tak naprawdę próbuje zrobić?

19

Ciągle się z tym spotykam, ponieważ jestem programistą stron internetowych, „cmd-r” ma taki efekt uboczny, że uniemożliwia działanie klawiszy strzałek w dowolnym trybie, ale nie mogę sobie wyobrazić, że to jest cel i nie mogłem znaleźć wszelka dokumentacja tego, co faktycznie powinna zrobić.

Edycja: Najwyraźniej jest to właściwie polecenie terminalu Mac, „Send Reset”, więc myślę, że teraz jest to pytanie: „Do czego służy polecenie send reset?” Wyjaśnia jednak, dlaczego nie udało mi się go znaleźć w dokumentach vim.

GlyphGryph
źródło

Odpowiedzi:

16

Aby uniknąć tej irytacji, ponownie przypisuję Command-R do „Ignoruj” w mapowaniu klawiszy iTerm.

wprowadź opis zdjęcia tutaj

Christian Long
źródło
Dziękuję Ci. To było strasznie denerwujące.
ThinkingInBits
10

Dzieje się tak nawet wtedy, gdy nie używam screena i odkryłem, że mogę wrócić do normalności, czyszcząc terminal z uruchomionym vimem (przetestowałem to również z tmuxem, ale nie screenem:

:!clear
mtjburton
źródło
6

Tutaj udzielono odpowiedzi na to pytanie: podczas uruchamiania ekranu w OSX, Command + R przesuwa klawisze strzałek w vimie na wszystkich ekranach

Skopiowana odpowiedź:

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 uruchom 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, aby uzyskać 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 zaobserwować 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 godz. 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

Munen
źródło
Tak, stwierdziłem, że po tym, jak napisałem, zobaczyłem „Polecenie resetowania terminala wysłane przez Command + R resetuje klawisze kursora do domyślnych.”, Nadal byłoby świetnie wiedzieć dokładnie, dlaczego tak się dzieje. Najbardziej szczerze interesuje mnie wiedza na temat zamierzonego użycia tego polecenia, na co nie ma odpowiedzi.
GlyphGryph