Dlaczego tryb wklejania w nawiasach jest sporadycznie włączony na ekranie mojego terminalu?

23

Używam Ubuntu 14.04 i mam dziwny problem z ekranem terminala, który mnie bardzo denerwuje. Czy ktoś może mi w tym pomóc lub wyjaśnić, jeśli robię coś złego lub niezgodnego z linuksem? Mam jakieś rozwiązanie, ale chcę zrozumieć, dlaczego tak się dzieje wielokrotnie.

Często kopiuję polecenia bash z moich notatek lub Internetu i czasami otrzymuję dziwne symbole 0 ~ i 1 ~, które zawijają rzeczy, które skopiowałem. Jest to bardzo denerwujące i dzieje się to całkowicie przypadkowo.

Po długich poszukiwaniach dowiedziałem się, że ta funkcja nazywa się trybem wklejania z nawiasami, więc teraz używam tego polecenia, printf "\e[?2004l"aby naprawić terminal, jeśli ten tryb nagle się włączy.

Czy można w jakiś sposób trwale wyłączyć tę funkcję? Stawiłem temu czoła na wszystkich maszynach Ubuntu, które teraz pracuję. Wcześniej korzystałem z Ubuntu 10.10 i 12.04 i nigdy wcześniej nie miałem takiego problemu.

artemdevel
źródło

Odpowiedzi:

11

Możesz wyłączyć tryb wklejania w nawiasach.

Aby spróbować tymczasowo, w bash:

bind 'set enable-bracketed-paste off'

Następnie, jeśli podoba ci się to, jak to się zachowuje, możesz umieścić to ustawienie w swoim ~/.inputrcsystemie lub w całym systemie w /etc/inputrc(lub gdziekolwiek to jest na Ubuntu).

jwd
źródło
4
Wydaje mi się, że to wszystko sprawia, że ​​nie mogę wpisać litery „p” (i tylko małej litery „p”) ani wkleić jej w ogóle, i nic więcej
Brian mówi Przywróć Monikę
@BrianLeishman Ze względu na szczególny sposób bindanalizowania argumentów, których nie rozpoznaje, tak się stanie, jeśli uruchomisz to polecenie przy użyciu Readline przed wersją 7 lub Bash przed 4.4. Ta odpowiedź nie przyniesie nic użytecznego do czasu następnego wydania Ubuntu (17.04).
Anthony G - sprawiedliwość dla Moniki
Te printfprace podejście, ale to nie działa, gdy umieścić w moim .bashrc, a funkcja jakoś obraca się z powrotem na okresowo. bindPodejście łamie mi klawiatury ( pklawisz nie praca , and putting that line in my ~ / .inputrc` prace, przez 10 sekund, a następnie rozpoczyna się konsola barfing się -enaset-enaset-...zawsze po 10 sekundach od zastosowania. I wreszcie po prostu ręcznie uaktualnione do bash 4.4 od źródła do ustalenia głupi problem
Chmura
1
Prawidłowe polecenie to bind 'set enable-bracketed-paste off'(ze spacją zamiast pierwszego „-”. Edycja tylko jednego znaku wydaje się niemożliwa.
Arrow
7

Możesz umieścić to polecenie w swoim bashrc. Wtedy obowiązywałoby ono przy każdym otwarciu terminala.

Po prostu wpisz vi ~/.bashrci dodaj printf "\e[?2004l"na końcu i zapisz plik za pomocą:wq

MOHRE
źródło
Tak, tak naprawdę zrobiłem to na początku :) później właśnie wyłączyłem ten tryb, jak sugerował @jwd.
artemdevel
1
echo 'printf "\e[?2004l"' >> ~/.bashrcrobi to samo w jednym wierszu i możesz to sprawdzić za pomocą tail -n1 ~/.bashrc. Nie trzeba używać vi.
pzkpfw
6

Aby odpowiedzieć na pierwotne pytanie, dlaczego tak się dzieje, oto możliwy scenariusz:

  • Mój komputer domowy miał nową wersję zsh, która obsługiwała wklejanie w nawiasach kwadratowych (nazwijmy to powłoką A)
  • Zsunąłem się do komputera z moją powłoką ustawioną na starszą wersję bash, która nie obsługuje wklejania w nawiasach (powłoka B)

Problem w tym, że mój program terminalowy nadal uważa, że ​​wklejanie w nawiasach jest włączone, gdy sshing z powłoki A do powłoki B, więc ciągle dodaje znaki wokół wklejonej zawartości (bity 0 ~ i 1 ~). Powłoka B nie obsługuje ich, więc po prostu przepuszcza je bez zmian. Musisz powiedzieć swojemu terminalowi, aby wyłączył nawias klamrowy, dzięki temu, że twoja powłoka wydrukuje specjalną sekwencję zmiany znaczenia - i tak właśnie printf "\e[?2004l"działa.

Istnieje kilka sposobów rozwiązania tego problemu:

  1. Jeśli w ogóle nie zależy ci na wklejaniu w nawiasach, wyłącz ją na powłoce A, aby nigdy nie była włączona (odpowiedź @ jwd)

  2. Jeśli chcesz nadal używać wklejania w nawiasach na powłoce A, ale wyłącz na powłoce B, dodaj sekwencję zmiany znaczenia do .bashrc(odpowiedź @ MOHRE)

  3. Zaktualizuj powłokę B, aby obsługiwała wklejanie w nawiasach, aby poprawnie interpretowała znaki 0 ​​~ i 1 ~.

Uwaga dodatkowa: jeśli używasz ekranu GNU, musisz uruchomić to printfpolecenie poza ekranem. Wygląda na to, że nie działa w środku.

rjh
źródło
Dzięki @rjh :) Ale nigdy nie korzystałem z zsh ani nie miałem problemu z ssh tak jak to opisałeś. Wygląda na to, że lata temu Ubuntu było źle skonfigurowane.
artemdevel