/ / Jak wyłączyć dziwne znaki z "trybu wklejania" na terminalu domyślnym Mac OS X? - linux, macos

Jak wyłączyć dziwne znaki z "trybu wklejania" na terminalu domyślnym Mac OS X? - Linux, MacOS

Napotkałem problem z moim terminalem, w którym podczas wklejania tekstu jest on poprzedzany przez 00~ i sufiks z 01~.

Na przykład podkreślę tekst i pchnę Command-C. Następnie pcham Command-V do terminala i widzę, jak te dziwne postacie pojawiają się na początku i końcu tekstu.

Na przykład mogę podkreślić text i wklej go do terminalu. Widzę 00~text01~.

Tekst może pochodzić z dowolnego miejsca, nawet zSam terminal. Nie mam zainstalowanych żadnych wtyczek do kopiowania / wklejania, jest to zwykłe kopiowanie / wklejanie. Używam domyślnego terminala Mac bez żadnych modyfikacji.

Zrobiłem kilka wyszukiwania online, najwyraźniej wklejopakowuje tekst w znaki specjalne, dzięki czemu niektóre aplikacje zobaczą wklejony tekst i będą go poprawnie obsługiwać. Jednak terminal nie obsługuje tego poprawnie, a zatem nie usuwa dziwnych znaków. Najwyraźniej ten tryb wklejania jest nazywany "trybem wklejania w nawiasie" http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Bracketed-Paste-Mode

Znalazłem inne pytanie, które dało rozwiązanie, jak rozwiązać ten problem na komputerze z systemem Linux, ale po wypróbowaniu tego rozwiązania nadal mam ten sam problem.

Czy ktoś może mi powiedzieć, w jaki sposób mogę wyłączyć tryb wklejania w terminalu? Albo powiedz mi, jaki jest właściwy sposób na pozbycie się tych irytujących postaci?

Odpowiedzi:

2 dla odpowiedzi № 1

To może nie odnosić się bezpośrednio do twojego problemu, ale znalazłem ten symptom prawdopodobnie w moim przypadku, spowodowany przez mojego redaktora z wyboru "mcedit" (Midnight Commander)

Aby złagodzić problem związany z błędem, dodałem następującą funkcję do mojego pliku .bashrc:

### vvv "function mcedit" is a fix-up for the ~0/~1 paste problem function mcedit() { command mcedit $@ ; printf "e[?2004l" ; }

Następnie "source .bashrc"

Teraz za każdym razem, gdy wykonuję polecenie "mcedit", automatycznie dodaje on "printf" e [? 2004l "", kiedy zamykam, aby zresetować "tryb wklejania w nawiasie"

Działa dla mnie, YMMV.


0 dla odpowiedzi nr 2
  1. Tekst znalazł się w buforze "system" (np. X, MacOS / Aqua) skądś, być może z tego samego terminala. Tekst nie został tutaj zmieniony.

  2. Tekst jest wklejony do terminala; to znaczy, "system" widzi, że terminal (np. xterm) odbiera niezmienioną sekwencję znaków z bufora kopii. Terminal zdaje sobie sprawę, że jest to wklejanie, a nie wejście klawiatury.

  3. Terminal wysyła sekwencję znaków wbufor do programu działającego na pierwszym planie (powłoka, edytor, cokolwiek). Do programu odbierane dane są nie do odróżnienia od wprowadzania danych przez użytkownika za pomocą klawiatury.

Dyskusja

Ta przejrzystość (lub nieprzejrzystość? cokolwiek) jest często dobrą rzeczą podobną do paradygmatu Unixa w ogólności z przezroczystą instalacją rurową. Czasami jednak programy radziły sobie z danymi lepiej, gdyby wiedziały, że są wklejane. Na przykład edytor taki jak vim może wyłączyć automatyczne wcięcie - w końcu kod jest już prawdopodobnie wcięty!

Bracked wklej

Wchodzić nawias wklejony. Zasadniczych powodów paradygmatprzejrzyste rurociągi danych nie mogą być zmieniane; ale dane mogą być udekorowane sekwencjami, które zwykle nie pojawiałyby się na wejściu terminalu, aby zaznaczyć jego początek i koniec. Jeśli terminal jest tak skonfigurowany - dla xterma konfiguracja będzie wysyłana ESC [ ? 2 0 0 4 l - wklejone dane zawierają sekwencje specjalne: ESC [ 2 0 0 ~ <buffer contents> ESC [ 2 0 1 ~.

Program pierwszoplanowy odbiera te "udekorowane" dane i jest w stanie obsłużyć program, a naiwny program traktuje je jako dane wejściowe użytkownika, czyli to, co widzisz.

Środki zaradcze

W twoim przypadku są dwa problemy: Terminal kończy się niespodziewanie w trybie wklejania; a program odbiorczy - przypuszczalnie powłoka - nie radzi sobie z tym.

  • Jednym z rozwiązań jest user83536 "s: Zidentyfikuj program, który pozostawia terminal w tym stanie i wywołaj go przez opakowanie, które po wyłączeniu programu po prostu wyłącza tryb wklejania w bryłkach.

  • Program prawdopodobnie próbował wyłączyć tryb wklejania w nawiasach, ale nie powiodło się. Jednym z powodów może być wysłanie niewłaściwej sekwencji ucieczki. Spróbuj ustawić TERMINAL zmienna środowiskowa do wartości najlepiej opisującej twój terminal.

  • Spróbuj wyłączyć nawias wklejony w niewłaściwej aplikacji. W vim można powiedzieć set t_BE=. To uniemożliwia vimowi umieszczenie terminala w trybie wklejania w nawias i gdy jest ustawione w sesji, wysyła "terminalowy tryb pasty" do terminala.

  • Embrace bracked paste. To dobry pomysł. Dla basha i innych programów używających readline można by powiedzieć set enable-bracketed-paste on. W przypadku vima można zastosować się do sugestii tutaj.