Bash STRG, um den Cursor zwischen Wörtern / Zeichenfolgen zu bewegen

84

Ich bin es gewohnt, die CTRLTaste zu verwenden, um mich schneller zu bewegen, wenn ich die linke und rechte Pfeiltaste verwende (geht zum Ende eines Wortes, anstatt jeweils ein Zeichen).

Kann ich das irgendwie in Bash machen?

Ich könnte es wahrscheinlich codieren, aber ich habe mich gefragt, ob es etwas einfacheres gibt / bereits erledigt ist.

Bryan Ruiz
quelle

Antworten:

93

Mit den Standard-Readline-Tastenkombinationen geht ALT+ Bein Wort zurück, ALT+ Fein Wort vorwärts.

Das Standard-Ubuntu-Setup bietet zusätzlich CTRL+ Pfeile, wie Sie es gewohnt sind. Diese sind in /etc/inputrcund wie folgt angegeben:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

Ich bin mir nicht sicher, warum wir drei davon brauchen ...

Thomas
quelle
20
@bryan_ruiz: Verschiedene Tastaturen (Terminalemulatoren usw.) geben unterschiedliche Sequenzen aus. Um die Sequenz anzuzeigen, drücken Sie Strg-V und dann die Taste. Für mich in PuTTY gibt mir Strg-v Strg-RechtsArrow ^[OCdas Gleiche wie deins. In xtermbekomme ich ^[[1;5was das gleiche ist wie Thomas '.
Bis auf weiteres angehalten.
7
es wäre besser, dies zu tun, indem Sie ~/.inputrcstattdessen bearbeiten
svassr
1
Ich kann nicht glauben, wie lange ich ohne das gelebt habe.
Ryan Shillington
3
Durch Bearbeiten von ~ / .inputrc wird möglicherweise das Laden des Systems (/ etc / inputrc) gestoppt. Beachten Sie auch, dass die Einstellungen für 'set -o' - "set -o emacs" Ihnen Tastenbelegungen im Emacs-Stil in der Befehlszeile geben sollten, im Gegensatz zu z. B. "set -o vi" (danach müssen Sie drücken ESC vor dem Versuch, w oder b) zu verwenden.
David Goodwin
4
@DavidGoodwin Nach einigem Suchen wird durch Hinzufügen $include /etc/inputrcauch die Systemeingabe-RC-Datei geladen.
SirGuy
41

Wie Thomas erklärte, können Sie die Bindungen hinzufügen /etc/inputrc.

Eine andere Alternative, die jedes Mal geladen wird, wenn Sie sich anmelden, besteht darin, sie ~/.bashrc wie folgt einzugeben :

#use ctl keys to move forward and back in words
bind '"\eOC":forward-word'
bind '"\eOD":backward-word'

Ich habe gelernt, dass Sie cat > /dev/null die Zeichen anzeigen können, die Ihre Tastatur sendet, z. B. STRG + Pfeil nach rechts zeigt:

^[OC

Wo ^[ist das gleiche wie \e dort kommt der Code aus dem bindBefehl.

Sie können Bindungen auch wie folgt nachschlagen:

bind -p | grep forward-word

All dies ist verdammt großartig und ich bin froh, dass ich mehr Power of Bash herausgefunden habe.

Bryan Ruiz
quelle
6
Ich denke, dies wirkt sich nur auf Bash aus, während die inputrcLösung auch für andere Programme gilt, die Readline verwenden, z. B. den Python-Interpreter und die meisten anderen Shells. Beachten Sie, dass Sie die Befehle auch eingeben können, ~/.inputrcwenn Sie nicht über root verfügen oder nicht möchten, dass sie auf alle Benutzer angewendet werden.
Thomas
Aus irgendeinem Grund funktionierte dies nur für mich, als ich die Reihenfolge Ihrer Zeilen oben vertauschte. Weiterer Hinweis. Ich verwende Ubuntu 14.04LTS hinter Putty von Windows 8.1.
Rebecca Dessonville
2
+1 speziell für I learned that you can use cat > /dev/null to look at the characters that your keyboard is sending. #TIL
Sungam
3
Sie können auch einfach readeingeben und die Eingabetaste drücken, um den gleichen Effekt wie zu erzielen cat > /dev/null. Ich bin faul, deshalb mag ich Lösungen mit weniger Tippen. :)
theglossy1
Strg + 4 stürzt meine Katze (es sendet ^ /)
user1040495
3

Ein .inputrc in Ihrem Home-Verzeichnis führt dazu, dass Strg + links (zum Beispiel) nicht mehr unter Ubuntu funktioniert.

Fügen Sie ~ / .inputrc Folgendes hinzu, damit alles funktioniert:

# Include system-wide inputrc, which is ignored by default when
# a user has their own .inputrc file.
$include /etc/inputrc

Gutschrift an f.kowal

Constantin De La Roche
quelle