Wie navigiere ich schneller durch lange Befehle?

136

Gibt es eine Möglichkeit, die Linux-CLI-Navigation zu beschleunigen, wenn ich lange Befehle eingeben muss? Im Moment benutze ich einfach Pfeile und - wenn ich einen langen Befehl habe, dauert es einige Zeit, bis ich vom Start des Befehls in die Mitte komme.

Gibt es eine Möglichkeit, zum Beispiel zur Mitte des Befehls zu springen, ohne Pfeile zu verwenden?

Stann
quelle

Antworten:

174

Einige nützliche Tastenkombinationen für die Zeilenbearbeitung, die von der Readline- Bibliothek bereitgestellt werden :

  • Ctrl-A: gehe zum Zeilenanfang
  • Ctrl-E: bis zum Ende der Zeile gehen
  • Alt-B: Ein Wort rückwärts überspringen
  • Alt-F: ein Wort vorwärts überspringen
  • Ctrl-U: zum Zeilenanfang löschen
  • Ctrl-K: bis zum Zeilenende löschen
  • Alt-D: bis zum Ende des Wortes löschen
Adam Byrtek
quelle
7
+1, weil dies auch dann funktioniert, wenn Strg-Pfeile aus bestimmten Gründen nicht funktionieren. Für screenBenutzer ist zu beachten, dass aus Strg-A Strg-A A wird.
enzotib
3
Um eine Löschung rückgängig zu machen (oder Text durch Löschen zu verschieben),
drücken
7
Ctrl + Pfeil rechts, Ctrl + Pfeil links erwähnenswert.
Mac
3
Wenn Sie unter Ubuntu Gnome und GnomeTerminal verwenden, Alt-Awird das Menü geöffnet, anstatt den Cursor zu bewegen. Wie benutzt man Alt-AGnome? Ich meine, Gnome ist die Standardeinstellung, daher wird wahrscheinlich jeder, der dies liest, ein Terminal in Gnome ausführen.
Jason
1
Wenn Sie von OS X über SSH eine Verbindung zu Ubuntu herstellen, müssen Sie möglicherweise "Esc" anstelle von "Strg" verwenden, z. B. "Esc-A", "Esc-E" usw. Dies gilt für iTerm und Terminal.
Fred Clausen
77

Noch ein paar Abkürzungen von hier

Ctrl + a  go to the start of the command line
Ctrl + e  go to the end of the command line
Ctrl + k  delete from cursor to the end of the command line
Ctrl + u  delete from cursor to the start of the command line
Ctrl + w  delete from cursor to start of word (i.e. delete backwards one word)
Ctrl + y  paste word or text that was cut using one of the deletion shortcuts (such as the one above) after the cursor
Ctrl + xx  move between start of command line and current cursor position (and back again)
Alt + b  move backward one word (or go to start of word the cursor is currently on)
Alt + f  move forward one word (or go to end of word the cursor is currently on)
Alt + d  delete to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + c  capitalize to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + u  make uppercase from cursor to end of word
Alt + l  make lowercase from cursor to end of word
Alt + t  swap current word with previous
Ctrl + f  move forward one character
Ctrl + b  move backward one character
Ctrl + d  delete character under the cursor
Ctrl + h  delete character before the cursor
Ctrl + t  swap character under cursor with the previous one
karlacio
quelle
Vielen Dank für diese unkomplizierte Liste ohne Chat.
neverMind9
14

Wenn Sie ein vi [m] - und ein bash-Benutzer sind, kann es nützlich sein, readline (von bash verwendet) dazu zu bringen, vi-artige Bearbeitung zu verwenden, indem Sie set editing-mode viIhre ~/.inputrcoder /etc/inputrc-Dateien hinzufügen . Oder Sie können Bash einfach dazu bringen, die vi-artige Bearbeitung zu verwenden, indem Sie den Befehl bash ausführen set -o vi. Fügen Sie den Befehl zu Ihrer ~/.bashrcDatei hinzu, um das Verhalten dauerhaft zu machen.

Wenn Sie ein zsh-Benutzer sind, fügen Sie bindkey -vIhrer .zshrcDatei eine Bearbeitung im vi-Stil hinzu.


quelle
8

Ich kenne keine Möglichkeit, gezielt zur Mitte zu springen, ohne die Cursortasten zu verwenden. Ich kann jedoch empfehlen, STRG + Cursortaste zu verwenden, um von Leerzeichen zu Leerzeichen zu wechseln (dh von einem Wort zum nächsten zu springen).

Kory Wnuk
quelle
1

Quell das Code-Snippet unten in deinem .bashrc. Strg-a springt zum Start und erneutes Drücken von Strg-a springt zur Mitte.

jump_mid() {
    if [ "$READLINE_POINT" -eq "0" ]; then
        LEN=${#READLINE_LINE}
        POS=$(($LEN / 2))
        READLINE_POINT=$POS
    else
        READLINE_POINT=0
    fi
}
bind -x '"\C-a" : jump_mid'

Oder wenn Sie Strg-Etwas verwenden möchten, um direkt zur Mitte zu springen, ändern Sie den Code in:

jump_mid() {
    LEN=${#READLINE_LINE}
    POS=$(($LEN / 2))
    READLINE_POINT=$POS
}

Und binde es an etwas anderes als Ctrl-a.

Marukse
quelle