Ekran Bash vs. Gnu: Zamień Ctrl-A na Ctrl-Shift-A

44

Jestem nowym użytkownikiem GNU Screen. Używam Basha od bardzo dawna i chcę wypróbować GNU Screen.

Jak wiadomo, GNU Screen używa „Ca” (Control-A) jako znaku polecenia. Problem w tym, że koliduje to z funkcją edycji linii w Bash (i GNU Readline), ponieważ Control-A w Bash przejdzie na początek linii. ”

Wiem, że mogę ustawić znak polecenia na inną sekwencję klawiszy , np. „^ Q” lub „'' (Backtick), ale mam problem ze znalezieniem innej sekwencji klawiszy, która nie jest jeszcze używana (^ Q jest używane przez terminal , podczas pisania skryptów powłoki używany jest backtick). Wygląda na to, że Postać Dowodzenia może mieć tylko jeden lub dwa znaki. Czy mogę ustawić znak kontrolny GNU Screen na „Control-Shift-A”?

(Nie mogę jeszcze użyć więcej niż jednego hiperłącza, więc nie mogę połączyć się z dokumentacją Bash)

Stefan Lasiewski
źródło
5
Aby nie dezorientować się podczas korzystania screenz innych systemów, najlepiej trzymać się domyślnych skrótów klawiszowych lub przynajmniej nauczyć się ich najpierw. ^A adomyślnie wyśle ​​zwykłą ^Akombinację klawiszy. Jest to trochę niewygodne, jeśli często używasz tego zestawu; Z HOMEtego powodu zwykle używam klucza. Ale to też nie zawsze działa.
intuicyjnie
Brak miłości dla Ctrl-space. Działa świetnie.
Wildcard

Odpowiedzi:

18

Problem z Control- Shift- Apolega na tym, że większość programów emulujących terminal nie wysyła do niego innego kodu niż ten wysłany przez Control- A, więc ekran nie będzie w stanie odróżnić.

Możesz użyć Cq, jeśli zrobisz to, stty -ixonaby wyłączyć „kontrolę przepływu oprogramowania” na terminalu. Zazwyczaj robię to, aby móc używać Cs do wyszukiwania w wierszu poleceń.

Możesz rozważyć C- ^, ponieważ wydaje się, że jest zwykle niezwiązany. Jest Control- Shift- 6na amerykańskich układów klawiatury, ale może to być trudne, aby wpisać się na innych układach.

Większość ludzi nigdy nie używa znaku kontrolnego tty C- \ do wysyłania SIGQUIT. Aby go użyć, wyłącz funkcję tty za pomocą stty quit undefi powiąż go jako klucz prefiksu. Jest to trochę ryzykowne, ponieważ jeśli naciśniesz C- \ na tty, gdzie klawisz wyjścia nie został wyłączony za pomocą stty , możesz zabić proces pierwszego planu zamiast aktywować screen .

Jakiś czas temu przełączyłem się na tmux . Domyślnie jest to Cb, ponieważ zostało opracowane pod ekranem i nie koliduje z domyślnymi ustawieniami ekranu . Przekonałem się, że Cb działa dla mnie całkiem dobrze (zwykle używam klawiszy strzałek do przemieszczania pojedynczych znaków w linii poleceń powłoki - chociaż używam Mb i Mf do poruszania się po słowach).

Nawiasem mówiąc, autor tmux używa Ca w swoich sesjach podstawowych i zawsze pisze Ca dwa razy (czy to w sesji tmux, czy nie). Jeśli zechcesz przyjąć ten nawyk, wydaje się, że to dobry kompromis, ponieważ drugi Ca powinien być opcją w większości kontekstów edytorskich podobnych do Emacsa. Nie zadziałałoby to, jeśli często używasz programów / kontekstów poza ekranem, gdzie drugi Ca nie byłby opcją.

Domyślnie Ca Ca jest powiązane z drugim poleceniem (przełącz na ostatnio aktywny ekran) na ekranie . Aby Ca Ca wysłał rzeczywisty Ca i miał przełączać okna Ca o, umieść w swoim .screenrc:

escape ^A^A
bind o other
Chris Johnsen
źródło
2
Brzmi nieźle, a potem zdałem sobie sprawę, że na ekranie GNU dwukrotne wpisanie Ca spowoduje przejście do wyświetlanego wcześniej okna. Może mogę zmapować „Ca Ca” na coś innego, chociaż nie jestem do końca pewien, jak to zrobić (wygląda na to, że muszę podać w tym celu „escape xy” lub „meta”). Zobacz gnu.org/software/screen/ manual / screen.html # Other-Window
Stefan Lasiewski
1
@Stefan Lasiewski: Ups, zapomniałem, że Ca Ca domyślnie nie wysyła Ca Ca. Zobacz dodatek na końcu odpowiedzi, aby zapoznać się z konfiguracją, która powoduje, że Ca Ca wysyła Ca i Ca o przełącza do poprzedniego okna.
Chris Johnsen
Działa świetnie! Ca Ca wyśle ​​rzeczywisty Ca do bazowej powłoki, a Ca o przełączy się na okno „inne”. Aby wysłać „Ca” do Basha, naciśnij dwukrotnie „Ca”. Powinno to oznaczać brak działania poza ekranem i nie powinno powodować problemów.
Stefan Lasiewski
41

Nie ma potrzeby obejścia tego problemu.
Aby przejść na początek linii podczas korzystania z screena w bash, użyj

Control- A(zwolnij, a następnie)A


Ogólnie, jeśli występuje konflikt znaków kontrolnych ekranu ze skrótem bash, pierwszy skrót bash Controlzostanie zastąpiony przez Control-A

Podobnie w przypadku innych skrótów edycji linii.

skyshock21
źródło
dzięki, nie zrobiłem tego teraz, chociaż to takie proste. w rzeczywistości nie trzeba niczego konfigurować. podoba mi się twoja odpowiedź.
harald
+1 ty - to zdecydowanie najlepsza opcja. Zabawne jest to, że próbując tego, przypadkowo uderzyłem Ca Ca i znalazłem kolejną świetną kombinację.
kfmfe04
3

Używam C- \ do ekranu i nie mogę go wystarczająco polecić. Możesz uderzyć dowolną inną kluczową definicją w razie wypadku, ale ogólnie nie C- \. To mi się podoba.

MikeHoss
źródło
3

Używam tego .screenrc

escape ^bb

Przykład: Aby odłączyć, wpisz ctrl-b d

guettli
źródło
0

Używam ctrl-_ (który może być również produkowany przez ctrl + 7 i zwykle ctrl + /) z screen / tmux.

graywh
źródło
0

Używam ctrl-z przez większość czasu, ale także używam ctrl-x dla niektórych. Nie używam tak często przerwania „stop”, ale gdy jest to potrzebne, mogę wpisać ^ zz. Pozwala mi to również rozpocząć sesje dodatkowego ekranu na zdalnych serwerach, które używają domyślnego ctrl-a. A jeśli rozpocznę trzecią sesję (na trzecim serwerze), mogę użyć ctrl-x. Ctrl-x to funkcja blokady ekranu, która w wielu środowiskach nie jest taka jak zwykle (ponieważ ekran często działa w emulatorze terminali).

Arcege
źródło