Wir können den Aufwärts- und Abwärtspfeil verwenden, um im Befehlsverlauf zu navigieren.
Wenn wir in einigen IDEs, wie z. B. Matlab, etwas eingeben und dann die Pfeiltasten drücken, scrollen wir nur zwischen den Verlaufsbefehlen, beginnend mit der von uns eingegebenen. Das ist sehr praktisch, aber in einem Shell-Terminal funktioniert das nicht.
Gibt es eine Möglichkeit, eine ähnliche Funktion in einem Shell-Terminal zu erhalten? Und noch andere Tipps zur Verbesserung der Effizienz bei der Terminalnutzung?
fish
;)\e[5~
und die\e[6~
Verwendung\e[A
,\e[B
.Antworten:
Was Sie suchen, ist CtrlR.
Geben Sie einen CtrlRTeil des gewünschten Befehls ein und geben Sie ihn dann ein. Bash zeigt den ersten passenden Befehl an. Tippe weiter CtrlRund Bash durchläuft alle vorherigen Übereinstimmungsbefehle.
Um im Verlauf rückwärts zu suchen, geben Sie CtrlSstattdessen Folgendes ein. (Wenn CtrlSdies bei Ihnen nicht der Fall ist, bedeutet dies wahrscheinlich, dass Sie die XON / XOFF-Flusssteuerung deaktivieren müssen. Führen Sie dazu Folgendes aus
stty -ixon
.)Dies ist unter "Suchen" in dokumentiert
man bash
.quelle
Ctrl-Q
um den eingefrorenen Zustand zu verlassen, wenn Sie bereits getroffen haben,Ctrl-S
ohne zuvor die Flusskontrolle auszuschalten, und Ihr Terminal eingefroren hat.Legen Sie diese in Ihre
~/.inputrc
:Diese machen Page Upund Page Downverhalten sich so, wie Sie es wünschen. (Einige Distributionen haben es bereits für Sie konfiguriert.) Ich persönlich finde diesen Weg praktischer als Ctrl+ Roder
history
.quelle
~/.inputrc
oder/etc/inputrc
oder die Datei, auf die die Umgebungsvariable verweist,$INPUTRC
ist die Konfigurationsdatei für die Zeilenbearbeitung aller Anwendungen, die readline verwenden, einschließlich bash (Ihre Shell). Es verfügt über bestimmte eingebaute Funktionen zur Zeilenbearbeitung, darunter die beiden folgenden: Suchen Sie in der Handbuchseite von bash nach einem dieser Schlüsselwörter, um weitere Informationen zu erhalten.\e[5~
/\e[6~
sind die Escape-Sequenzen, die von den Page Up / Down-Tasten in den meisten Terminal-Emulatoren generiert werden; Starten Sie dazu dencat
Befehl und drücken Sie diese Tasten (das Escape-Byte wird im Terminal als^[
, in inputrc als dargestellt\e
).echo $INPUTRC
, ist es leer. Ich benutze Ubuntu 14.04"\e[A": history-search-backward
"\e[B": history-search-forward
Neben ^ r / ^ s Geschichte suche ich:
alt.Fügt das letzte "Wort" des vorherigen Befehls am Cursor ein. Wiederholen Sie diesen Vorgang, um das letzte Wort älterer Befehle abzurufen. (Beachten Sie jedoch, dass ein abschließendes
&
Wort als letztes Wort für Hintergrundbefehle gilt.)Das ist super praktisch für
mkdir foo
,cd
Alt-Punkt. Noch schneller als Pfeil nach oben, ^ a, alt-d (löscht vorwärts Wort)cd
.Um das vorletzte Wort zu erhalten, verwenden Sie
esc
-
2
alt+.
(dh verwenden Sie ein numerisches Argument im Emacs-Stil füralt+.
. Negative Zählungen am Ende, positive Zählungen am Anfang). Irgendwann ist es schneller, nach der Maus zu greifen und sie zu kopieren / einfügen, oder nach oben zu gehen und einen Teil davon zu markieren (siehe unten).Wenn Ihr Terminal ordentlich eingerichtet ist, werden Strg-Links und Strg-Rechts wortweise vor- und zurückgespult. Wenn nicht, tun hoffentlich mindestens Alt-B und Alt-F dasselbe.
Strg- / ist ein Rückgängigmachen. Sie können die automatische Wiederholung zum Löschen von Wörtern viel effizienter verwenden, wenn Sie sie rückgängig machen können, wenn Sie ein wenig überschießen.
Stärkeres Mischen / Anpassen von Befehlen ergibt sich aus der Verwendung des Kill-Rings, der genau wie in Emacs funktioniert. ctrl-y, um die letzte Strg-w / Strg-u / Strg-Rücktaste / Alt-d einzufügen. alt-y, um durch älteren getöteten Text zu blättern.
Mehrere Strg-w oder was auch immer in einer Reihe machen bei Kill-Ring-Eintrag. Verwenden Sie den Pfeil nach links und rechts oder etwas, um den Eintrag aufzubrechen, wenn Sie zwei Dinge entfernen und später nur eine einfügen möchten.
Wenn Sie all dies kombinieren, können Sie
alt+r
zum Wiederherstellen, wie es war, bevor Sie einen Teil davon gelöscht haben.>
um zum Ende der Geschichte zu gelangen (dh den ganzen Weg nach unten), um zu dem Befehl zurückzukehren, mit dem Sie sich gerade befanden.Weitere interaktive Anwendungstipps:
Aktivieren
shopt -s globstar
, damit Sie dies tun können**/*.c
(rekursiv einschließlich des aktuellen Verzeichnisses). Manchmal praktisch für den interaktiven Gebrauch, ist aber normalerweisefind -name '*.c' -exec foo {} +
besser.Wenn Sie Bash-Skripte schreiben, ist es praktisch, diese auch
shopt -s extglob
in Ihren interaktiven Shells zu aktivieren. Sie werden manchmal eine Verwendung für*.!(c|h)
Dinge finden , die mit Dateien übereinstimmen, die nicht mit .c oder .h enden.Finden Aliase Sie mögen
ls -l
,less
und etwas anderes tun Sie viel. (cp -i
,mv -i
, Undrm -I
sind schön. Lassen Sie sich nicht in die Gewohnheit , je auf sie ein selektives rm zu tun. GNU rm der -I fragt einmal für alle args.)Ich mag
alias m=less
(m für "mehr"). Ich habe michless
mit der vorherigen / nächsten Datei ( ) eingerichtet ,und an diese .gebundenlesskey
. Die Standardeinstellung ist eine Multitastendrucksequenz, die nicht mit automatischer Wiederholung verwendet werden kann.Ich mache gerne alles im GNU-Bildschirm. Ich finde es einfacher, nummerierte Bildschirmfenster im Auge zu behalten, als eine Schiffsladung von Registerkarten in Konsole (oder einem anderen Terminalemulator, den ich ausprobiert habe). Wenn Sie es noch nicht wissen
screen
, lernen Sie tmux, weil es neuer und weniger krumm ist.Um so etwas wie die Funktionalität des Öffnens einer neuen Shell mit der gleichen CWD wie einer anderen Shell zu erhalten, verwende ich einen benutzerdefinierten Hook für cd / pushd / popd, mit dem ich
cds 8
eine CD in das Verzeichnis erstellen kann, in dem sich meine Shell in Bildschirmfenster 8 befindet. Dies funktioniert auch für Shells außerhalb der Bildschirmsitzung, sofern nur eine Bildschirmsitzung vorhanden ist.quelle
gnome-terminal
Ubuntu 14.04 sofort funktioniert , bevor ich zu KDE gewechselt bin. Die relevante Option befindet sich in Ihren Terminaleinstellungen, esc-Präfix vs High-Bit, und möglicherweise in einigen anderen Einstellungen. Einige von ihnen arbeiten nicht perfekt für mich durch SSH. (zB Strg links / rechts munge den Escape-Code für die Pfeiltaste, und ich werde5D
buchstäblich erscheinen)Fügen Sie die folgenden Zeilen zu Ihren hinzu
~/.inputrc
Dies ähnelt der Antwort von egmont, verwendet jedoch anstelle von Bild auf und Bild ab die Escape-Sequenzen für Pfeil auf und Pfeil ab. Auf diese Weise ist die Verwendung auf einem Mac wesentlich bequemer.
quelle
Ich neige immer dazu, meine Computer mit einem großen HISTSIZE- Wert zu konfigurieren, damit eine längere Verlaufsliste sowie HISTTIMEFORMAT mit dem Zeitstempelwert gespeichert werden, damit ich sehen kann, wann der Befehl ausgeführt wurde.
quelle
Das Mittel, das ich normalerweise benutze, ist, den
history
Befehl mit zu kombinierengrep
IE:
Daraufhin wird ein nummerierter Verlauf der von Ihnen eingegebenen Befehle angezeigt, die diesen Befehl enthalten. Anschließend können Sie Folgendes verwenden:
um diesen Befehl zu wiederholen.
IE:
history | grep history
gefolgt von:
!571
werde wiederholen
history | grep history
quelle
!
Auswechslung in der Vergangenheit weniger sicher ist.Ich habe täglich 4 Tipps (und einige andere) in meinem Bash-Terminal verwendet:
Letzten Befehl ausführen:
!!
Führen Sie den Befehl N aus dem Protokoll aus:
!N
Letzten Befehl beginnend mit dem Präfix aus dem Verlauf ausgeben:
!prefix:p
Führen Sie den letzten Befehl aus, beginnend mit dem Präfix aus dem Verlauf:
!prefix
quelle
Wenn es in Ordnung ist , oh-my-zsh
zsh
anstelle von Ihnen zu verwenden, verwendenbash
Sie oh-my-zsh dafür.Es enthält den Pfeil nach oben und unten, der Sie durch den Befehlsverlauf führt. Es ermöglicht auch die gleiche Navigation, wenn Sie bereits Text eingegeben haben (als Mathlab).
Bearbeiten: Es enthält auch andere entwicklerorientierte Inhalte, wie z. B. Aliase und Themen. Diese Extras machen die Distribution größer und komplexer zu bedienen.
https://github.com/robbyrussell/oh-my-zsh
quelle
oh-my-zsh
enthält Tonnen von Sachen. Sie können genauso gut sagen: Diese Funktion ist in der Distribution enthalten, wenn Sie nur eine bestimmte Einstellung oder App benötigen.Fügen Sie ~ / .bashrc den folgenden Alias hinzu
Verwendung:
h fire
Liefert mir eine Liste mit Befehlen, die Feuer enthalten . oderh ^fire
erhalten Sie mir eine Liste der Befehle beginnen mit Feuer .Dies ist nützlich, wenn ich eine Reihe von Befehlen gleichzeitig anzeigen möchte.
Übrigens
'"'"'
ist hässlich, aber ich konnte keine anderen Möglichkeiten finden, einfache Anführungszeichen in einfachen Anführungszeichen zu vermeiden.quelle
h="history | awk '{\$1=\"\"; print}'
sollte funktionieren. Alternativ können Sie eine Funktion erstellen und diese aufrufen.