SSH miażdży znaki w vim / nano na zdalnym serwerze

18

... i doprowadza mnie to do szaleństwa.

Zasadniczo (dzieje się to w ciągu ostatnich kilku miesięcy) loguję się na kilka różnych serwerów CentOS (jeden Linode, drugi VPS i host współdzielony, do którego mam dostęp do powłoki), działając z wersji 5.5, 5.7 i 6 z mojego Komputer Mac z systemem OS X Lion i terminalem.

Gruntownie:

$ ssh [email protected]

[remote-host] $ nano somefile.txt

Gdy zacznę edytować plik, jeśli używam klawiszy strzałek, aby poruszać się po kursorze, lub zaczynam usuwać, a następnie pisać ponownie, kursor przeskakuje nieco, a jeśli zapiszę plik i otworzę go ponownie, to oczywiste, że kursor był , w rzeczywistości skacząc po całym szeregu bez wyraźnego powodu.

W końcu dostaję takie słowa, jak „To jest nowy tekst”. Kiedy wpisałem (do zwariowanego edytora) „To jest wiersz tekstu”.

Jest to duży problem, jeśli chodzi o edycję plików konfiguracyjnych, ponieważ często muszę edytować jedną linię, zapisywać i zamykać, a następnie ponownie otwierać, aby upewnić się, że linia jest poprawna ... a następnie edytować inną linię ... i robi się to dość denerwujące .

Znalazłem problemy z renderowaniem Linima Lisha Shell Vima i Nano: linie nie pojawiają się / pozycje kursora są nieprawidłowe , ale nie wiem, czy to wiele dotyczy, ponieważ dotyczy to w szczególności Lisha.

geerlingguy
źródło
1
Hej @geerlingguy, wysłałem odpowiedź na to pytanie lata temu, kiedy twoje imię nic dla mnie nie znaczyło, ale teraz regularnie używam twojej pracy. Dziękuję za wszystkie Twoje odpowiedzi.
dbenton
1
@dbenton - Pomagam, pomagasz, jesteśmy szczęśliwą społecznością :)
geerlingguy

Odpowiedzi:

14

[ Aktualizacja: Począwszy od Mac OS X Mountain Lion 10.8, Terminal obsługuje sekwencję ucieczki Backtab, eliminując ten problem.]

Wersja (s?) Nano na tych serwerach czasami wysyła sekwencję Backtab (ESC [Z) podczas przesuwania kursora w lewo o jeden znak, ale Terminal nie obsługuje tej sekwencji, więc nano uważa, że ​​kursor się poruszył, gdy nie ma ' t, a jego idea dotycząca bieżącej pozycji kursora nie jest zsynchronizowana z terminalem.

Z powodów, których nie mogę pojąć, nano wysyła Tabelę Wsteczną, gdy przesuwa się w lewo, a kursor jest jednym znakiem po prawej stronie tabulatora. Podobnie, IIRC, wysyła Tab (Control-I), gdy przesuwa się w prawo, a kursor jest jednym znakiem po lewej stronie tabulatora. Nie wiem, dlaczego robi to wokół tabulatorów zamiast zawsze przesuwać się w lewo / prawo przy użyciu tych samych sekwencji znaków. Wersja nano dostarczana z systemem Mac OS X Lion 10.7 tego nie robi.

Nano robi to tylko wtedy, gdy terminfo mówi, że funkcja cbtjest obsługiwana. Domyślne terminfo dla Terminala to xterm-256color, które deklaruje tę możliwość i mapuje ją do sekwencji Backtab. Obejściem tego problemu jest ustawienie TERMzmiennej środowiskowej na coś, co nie deklaruje tej możliwości. Możesz to zrobić na komputerze lokalnym przed wywołaniem sshlub w pliku startowym powłoki na zdalnym hoście. Ustawienie tej wartości xterm-colorspowoduje, że będzie to szczypta, chociaż nie jest to zalecane, ponieważ wyłącza inne ważne zachowania (np. 256 kolorów, BCE, alternatywne zachowanie zawartości ekranu). (Bardziej ciężkim podejściem jest dostosowanie pliku xterm-256color(lub xterm) terminfo na zdalnym hoście do usunięcia cbt.)

Zalecane jest dostosowanie hosta zdalnego (w taki czy inny sposób), więc dostosowania nie mają zastosowania lokalnie ani do innych hostów zdalnych, ale najprostszym obejściem jest zmiana ustawienia preferencji terminala, które należy zastosować xterm-colorzamiast xterm-256color:

Terminal> Preferencje> Ustawienia> [profil]> Zaawansowane> Zadeklaruj terminal jako:

Zalecam zduplikowanie istniejącego profilu ustawień, dostosowanie go i używanie go tylko podczas łączenia się z tymi zdalnymi hostami.

Chris Page
źródło
Ustawienie xterm-color zdecydowanie działa - czy możesz opracować sposób dostosowania mojego pliku terminfo na zdalnym hoście? Link by zadziałał, ale prawdopodobnie będę co jakiś czas wracał do tego postu, aby pamiętać tę wskazówkę :)
geerlingguy,
1
@geerlingguy Modyfikacja istniejącej definicji terminfo . Usuń cbt=\E[Zwpis z .tipliku źródłowego.
TachyonVortex
Pomogło mi to, ustawiłem opcję z xterm-256color na xterm, a teraz mogę wybierać, kopiować itp., Tak jak wcześniej. (Nie wiem jak i kto zmienił tę opcję). Dzięki!
Spacebiker,
8

Miałem ten sam problem. Znalazłem ten wątek, który zalecał między innymi zmienną środowiskową na zdalnym serwerze:

export TERM=xterm-color

Dodanie tego do ~ / .bash_profile rozwiązało problem. To rozwiązanie jest proste i ma tę zaletę, że wpływa tylko na konkretnego użytkownika na określonym hoście.

dbenton
źródło
2

Miałem ten sam problem w programie MobaXTerm. Przyczyną problemu był klawisz -K, którego użyłem, aby włączyć NumPada w Nano podczas korzystania z PuTTY. Jak się dowiedziałem w MobaXTerm -K nie jest potrzebne (numpad działa domyślnie) i bez niego klawisze strzałek działają poprawnie i nie wstawiają śmieci losowo.

Tooluka
źródło
1

OSX 10.7.4 z systemem Centos działającym jako system operacyjny gościa

W ramach preferencji terminala OSX, ustawień, zaawansowane

Declare terminal as:xterm-color
Strict VT-100 keypad behaviour - TICKED!

Nigdy więcej problemów :)

Jarrod
źródło
Należy pamiętać, że preferencja „Zachowanie klawiatury VT-100” jest całkowicie niezwiązana z niniejszymi pytaniami i nie ma wpływu na wynik.
Chris Page
1

Dla użytkowników MobaXterm. Jeśli nie używasz -K i nadal występuje problem. Upewnij się, że poniższe wiersze są zakomentowane w pliku / etc / nanorc.

# set rebinddelete

# set rebindkeypad

czysty tekst
źródło
0

Prawdopodobnym problemem jest to, że tak, zarówno lokalna maszyna, jak i serwer SĄ na systemach unix z nano, ale te wersje nano mogą być inne.

export TERM=xterm-color
boulder_ruby
źródło
-1

Jeśli otrzymujesz „To jest nowy tekst” i wpisałeś „To jest wiersz tekstu” (muszę założyć, że twój raport jest poprawny), masz niestabilny klawisz „kontrolny”, cokolwiek jest na Macu (polecenie ? jabłko?). Ponieważ nano używa klawiszy Control + do „przeskakiwania”, a ty masz mniej znaków niż wpisane, więc mamy a) znaki znikające b) sekwencje kontrolne pojawiające się z niczego, co powoduje, że a) staje się b) jest logiczne.

Możesz także mieć jakiś wstrętny skrót klawiszowy / program makro / whatnot. Podejrzewam, że należy to do superużytkownika, a nie do błędu serwera, ale utrzymam flagowanie, może ktoś ma realistyczną odpowiedź związaną z SSH.

chx
źródło
Zdarza się to, gdy używam klawiszy strzałek do poruszania się tam i z powrotem po linii, częściej niż kiedy piszę. Ale wydaje się dość losowy. Wypróbuję szybko sugestię Chrisa, aby zobaczyć, czy to działa, ale dziękuję za odpowiedź!
geerlingguy,