Gibt es ein Handbuch, um die Liste der Bash-Tastenkombinationen zu erhalten?

21

Es gibt viele Verknüpfungen, die ich bei der Interaktion mit der bash-Befehlszeile verwende , um die Arbeit zu vereinfachen und zu beschleunigen.

Mögen:

  • ctrl+ L: um den Bildschirm zu löschen
  • ctrl+ a/ ctrl+ e: Anfang / Ende der Zeile verschieben
  • ctrl+ r: Um die Befehlsgeschichte zu durchsuchen, schreiben Sie nur ein paar Zeichen
  • ctrl+ u/ ctrl+ y: Zum Ausschneiden / Einfügen der Linie.

und viele viele mehr, die ich wissen möchte und die auf jeden Fall nützlich sein werden, um zu lernen.

Ich möchte wissen, woher ich die Liste dieser Verknüpfungen in Ubuntu bekomme. Gibt es ein Handbuch, in dem diese Verknüpfungen aufgeführt sind?

HINWEIS:

Ich möchte die Liste der Verknüpfungen und ihrer Aktionen an einer Stelle erhalten. Es wird wirklich helfen, viele von ihnen in kurzer Zeit zu lernen. Gibt es also eine Möglichkeit, die Liste so zu bekommen? Obwohl danke für die Antwort hier gegeben ..

Saurav Kumar
quelle

Antworten:

22

Die Standardeinstellungen man bashsowie Einzelheiten zu den einzelnen Befehlen sind angegeben . Siehe BroSlows Antwort, wenn Sie Ihre Tastenkombinationen geändert haben.

   Commands for Moving
       beginning-of-line (C-a)
              Move to the start of the current line.
       end-of-line (C-e)
              Move to the end of the line.
       forward-char (C-f)
              Move forward a character.
       backward-char (C-b)
              Move back a character.
       forward-word (M-f)
              Move forward to the end of the next word.  Words are composed of alphanumeric characters (letters and digits).
       backward-word (M-b)
              Move back to the start of the current or previous word.  Words are composed of alphanumeric characters (letters and digits).
       shell-forward-word
              Move forward to the end of the next word.  Words are delimited by non-quoted shell metacharacters.
       shell-backward-word
              Move back to the start of the current or previous word.  Words are delimited by non-quoted shell metacharacters.
       clear-screen (C-l)
              Clear the screen leaving the current line at the top of the screen.  With an argument, refresh the current line without clearing the screen.

...

       reverse-search-history (C-r)
              Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

...

       unix-line-discard (C-u)
              Kill backward from point to the beginning of the line.  The killed text is saved on the kill-ring.

...

       yank (C-y)
          Yank the top of the kill ring into the buffer at point.

BEARBEITEN

Diese Befehle befinden sich alle in einem zusammenhängenden Abschnitt des Handbuchs, von dem aus Sie es durchsuchen können Commands for Moving. Alternativ können Sie diesen gesamten Abschnitt mit in eine Textdatei speichern

man bash | awk '/^   Commands for Moving$/{print_this=1} /^   Programmable Completion$/{print_this=0} print_this==1{sub(/^   /,""); print}' > bash_commands.txt

(Hinweis: Hiermit wird der gesamte Abschnitt gedruckt, einschließlich der Befehle ohne Standardtastenkombination.)

Erklärung des awk-Codes

  • Commands for MovingSetzen Sie die Variable beim (einzigen) Auftreten von print_thisauf 1.
  • Programmable CompletionSetzen Sie die Variable beim (einzigen) Auftreten von (dem folgenden Abschnitt) auf 0.
  • Wenn die Variable 1 ist, entfernen Sie das führende Leerzeichen (drei Leerzeichen) und drucken Sie die Zeile.
Sparhawk
quelle
1
Dies sind Standardverknüpfungen, nicht unbedingt die Verknüpfungen auf dem aktuellen OP-System. bind -Pwäre genauer.
@BroSlow Guter Kommentar. Ich denke jedoch immer noch, dass meine Antwort einen Sinn hat, da es ausführlicher darum geht, was die Befehle bewirken. Wenn du es als Antwort schreibst, werde ich +1 geben.
Sparhawk
@ Sparhawk: +1 für Ihre Antwort. Ich suche die Liste der Verknüpfungen an einer Stelle. Wenn mir das Bash- Handbuch alle Verknüpfungen mitteilen kann, wie werde ich sie dann zusammenstellen, wie Sie hier geantwortet haben !! Wie sind Sie auf diese Liste gekommen? Gibt es eine Möglichkeit, die Verknüpfungen mit der Aktion zu analysieren und in einer anderen Datei zu speichern? Ich werde auf Ihre Antwort warten ..
Saurav Kumar
Wenn Sie im Bash-Handbuch nach suchen Readline Command Names, werden alle Befehle in diesem Abschnitt angezeigt. Ich werde ein kurzes Skript schreiben, um es in eine Textdatei zu extrahieren, aber ich kann es im Moment nicht tun (ich werde in ein paar Stunden Zeit haben).
Sparhawk
@Sparhawk: Ihre Antwort hat mir geholfen, einen einfachen grep-Filter-Befehl zu schreiben. Überprüfen Sie es hier und hoffen, dass es Ihnen gefällt. Danke für Ihre Hilfe. Obwohl ich auf dein Drehbuch warte .. :)
Saurav Kumar
20

Sie können alle Verknüpfungen in Ihrer aktuellen Bash-Shell auflisten, indem Sie die integrierte Bash bindmit der -POption aufrufen .

z.B

bind -P | grep clear
clear-screen can be found on "\C-l".

Um sie zu ändern, können Sie so etwas tun

 bind '\C-p:clear-screen'

Fügen Sie es in eine Init-Datei ein, um es dauerhaft zu machen (beachten Sie, dass Sie jeweils nur eine Tastenkombination an eine Sache gebunden haben können, sodass alle zuvor vorhandenen Bindungen verloren gehen).

Faultiere
quelle
Das Erhalten der Tastenkombinationen durch das Durchsuchen nach Namen ist für mich wenig ungewöhnlich und auch ein langer Prozess. Gibt es eine einfache Möglichkeit, die Liste der Verknüpfungen an einer Stelle abzurufen? Ich hoffe du verstehst. +1 obwohl für diesen Ansatz ..
Saurav Kumar
2
@ SauravKumar bind -P sollte Ihnen alle Verknüpfungen geben. Wenn Sie diejenigen ignorieren bind -P | grep -v "not bound"
7

Der folgende Befehl gibt eine schöne Spaltenausgabe aus, in der die Verwendung und die Verknüpfungen angezeigt werden.

bind -P | grep "can be found" | sort | awk '{printf "%-40s", $1} {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'

Dies ergibt eine Ausgabe, die so aussieht

abort                                   "\C-g", "\C-x\C-g", "\e\C-g". 
accept-line                             "\C-j", "\C-m". 
backward-char                           "\C-b", "\eOD", "\e[D". 
backward-delete-char                    "\C-h", "\C-?". 
backward-kill-line                      "\C-x\C-?". 
backward-kill-word                      "\e\C-h", "\e\C-?". 
backward-word                           "\e\e[D", "\e[1;5D", "\e[5D", "\eb". 
beginning-of-history                    "\e<". 
beginning-of-line                       "\C-a", "\eOH", "\e[1~", "\e[H". 
call-last-kbd-macro                     "\C-xe". 
capitalize-word                         "\ec". 
character-search-backward               "\e\C-]". 
character-search                        "\C-]". 
clear-screen                            "\C-l". 
complete                                "\C-i", "\e\e". 
...

Diese Ausgabe wird mit dem folgenden Befehl in eine Textdatei konvertiert

bind -P|grep "can be found"|sort | awk '{printf "%-40s", $1} {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}' > ~/shortcuts

Die Datei wird in Ihrem $ HOME-Verzeichnis erstellt.

Erläuterung

  • bekommt alle Abkürzungen.

    bind -P
  • Entfernt alle nicht zugewiesenen Verknüpfungen

    grep "can be found"
  • sortiert die Ausgabe

    sort
  • druckt die erste Spalte (dh Funktion) und richtet den Text aus

    awk '{printf "%-40s", $1}
  • Dies ist Teil des vorherigen Befehls. Es werden Spalten 6+ (dh Verknüpfungen) gedruckt.

    {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'
  • Setzt die Ausgabe in eine nette Textdatei im Ausgangsverzeichnis mit dem Namen shortcuts

    > shortcuts

Sie können sich ein Bild davon machen, wie der Befehl funktioniert, indem Sie die folgenden Befehle ausführen.

bind -P
bind -P | grep "can be found"
bind -P | grep "can be found" | sort
registrierter Nutzer
quelle
@SauravKumar Soll ich der Antwort etwas hinzufügen?
Registrierter Benutzer
2
+1 für Ihre Antwort und es sinnvoller zu machen .. :) ich verpasst zu und es änderte sich die ganze Bedeutung des Satzes;) Nein , Sie nicht irgend etwas hinzufügen. Sie haben Ihr Bestes getan ..
Saurav Kumar
+1 Netter Befehl! Ich habe es um nicht bind -P | tail -n +2 | sort | awk '{printf "%-40s", $1} {if ($6 == "any") {printf"\n"} else {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}}'
gesetzte
1

Okay, ich habe eine Möglichkeit, die Liste der Verknüpfungen zu erhalten, indem ich das Bash-Handbuch filtere . Außerdem wird beschrieben, was genau die einzelnen Verknüpfungen bewirken. Vielen Dank an Sparhawk, der mich aufgeklärt hat, die Lösung zu finden. Was ich brauchte, war den Gebrauch von regulären Ausdrücken zu lernen, obwohl ich immer noch nicht gut darin bin :)

Also hier ist der einzeilige Befehl:

man bash | grep "(.-.*)$" -A1

Hier ein kleiner Auszug der Ausgabe:

   beginning-of-line (C-a)
          Move to the start of the current line.
   end-of-line (C-e)
          Move to the end of the line.
   forward-char (C-f)
          Move forward a character.
   backward-char (C-b)
          Move back a character.
   forward-word (M-f)
          Move forward to the end of the next word.  Words are composed of alphanumeric characters (letters and digits).
   backward-word (M-b)
          Move back to the start of the current or previous word.  Words are composed of alphanumeric characters (letters and digits).
   clear-screen (C-l)
          Clear the screen leaving the current line at the top of the screen.  With an argument, refresh the current line without clearing the
   previous-history (C-p)
          Fetch the previous command from the history list, moving back in the list.
   next-history (C-n)
          Fetch the next command from the history list, moving forward in the list.
   beginning-of-history (M-<)
          Move to the first line in the history.
   end-of-history (M->)
          Move to the end of the input history, i.e., the line currently being entered.
   reverse-search-history (C-r)
          Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.
   forward-search-history (C-s)
          Search forward starting at the current line and moving `down' through the history as necessary.  This is an incremental search.

So speichern Sie die Verknüpfungen in einer Datei:

man bash | grep "(.-.*)$" -A1 > bash_shortcuts

Das ist alles was ich brauche. Ich wollte nur die Tastenkombinationen kennen, die Bash zugewiesen wurden, und habe keine Tasten als BroSlow neu konfiguriert mich fragte.

Nochmals vielen Dank an alle für ihre Beiträge.

Hinweis :

Wenn jemand dies verbessern möchte, wird er / sie am meisten begrüßt. Ich habe nur die Möglichkeit erwähnt, die von einigen Tasten zugewiesenen Verknüpfungen aufzulisten. Also, wenn jemand weiß, wie man die Aktionen auflistet, denen die Beschreibung nicht auf diese Weise zugewiesen wurde , ist er am willkommensten :)

Saurav Kumar
quelle
Sehr schön. Das einzige Problem ist jedoch, dass hierdurch nur die erste Zeile mehrzeiliger Beschreibungen gedruckt wird. Außerdem werden Kopfzeilen und Befehle ohne Standardtastenanschläge (z. B. dump-macros) übersprungen , obwohl dies möglicherweise gewünscht wird.
Sparhawk
1

Solange das bash-Handbuch nicht so geändert wird, dass dieser Befehl fehlerhaft ist (was nicht sehr wahrscheinlich ist), werden mit dem folgenden Befehl alle Standardverknüpfungen für angezeigt bash.

man bash | grep -A294 'Commands for Moving'

Dies ergibt eine Ausgabe, die wie folgt aussieht:

 Commands for Moving
   beginning-of-line (C-a)
          Move to the start of the current line.
   end-of-line (C-e)
          Move to the end of the line.
   forward-char (C-f)
          Move forward a character.
   backward-char (C-b)
          Move back a character.
   forward-word (M-f)
          Move forward to the end of the next word.  Words are composed of alphanumeric characters (letters and digits).
   backward-word (M-b)
          Move back to the start of the current or previous word.  Words are composed of alphanumeric characters (letters  and
          digits).
   shell-forward-word
          Move forward to the end of the next word.  Words are delimited by non-quoted shell metacharacters.
   shell-backward-word
          Move back to the start of the current or previous word.  Words are delimited by non-quoted shell metacharacters.
   clear-screen (C-l)
          Clear  the  screen  leaving  the  current line at the top of the screen.  With an argument, refresh the current line
          without clearing the screen.
   redraw-current-line
          Refresh the current line.

Commands for Manipulating the History
   accept-line (Newline, Return)
          Accept the line regardless of where the cursor is.  If this line is non-empty, add it to the history list  according
          to  the state of the HISTCONTROL variable.  If the line is a modified history line, then restore the history line to
          its original state.
   previous-history (C-p)
          Fetch the previous command from the history list, moving back in the list.
   next-history (C-n)
...

Wenn das Bash-Handbuch geändert wird, kann dieser Befehl problemlos an die Anforderungen angepasst werden.

registrierter Nutzer
quelle
Gut gemacht, Patil !! Warum habe ich nicht über diesen Weg
nachgedacht
@Patil Ich dachte darüber nach, die Anzahl der Zeilen auch fest zu codieren, aber ich stellte fest, dass die Anzahl der Zeilen im Befehlsabschnitt im Bash-Handbuch eher geändert wurde, als dass die Reihenfolge der Abschnitte geändert wurde. Ich bin damit einverstanden, dass beides jedoch wahrscheinlich unwahrscheinlich ist.
Sparhawk