web-dev-qa-db-fra.com

Existe-t-il un manuel pour obtenir la liste des touches de raccourci bash?

J'utilise beaucoup de raccourcis lorsque j'interagis avec ligne de commande bash pour rendre le travail plus facile et plus rapide.

Comme:

  • ctrl+L: pour effacer l'écran
  • ctrl+a/ctrl+e: déplacer le début/la fin de la ligne
  • ctrl+r: rechercher dans l'histoire du commandement en écrivant quelques caractères
  • ctrl+u/ctrl+y: couper/coller la ligne.

et beaucoup d’autres, que je veux connaître et qui seront certainement utiles à apprendre.

Je veux savoir d'où puis-je obtenir la liste de ces raccourcis dans Ubuntu? Existe-t-il un manuel répertoriant ces raccourcis?

NOTE:

Je veux obtenir la liste des raccourcis et leurs actions en un seul endroit. Il sera vraiment utile d’apprendre beaucoup d’entre eux en peu de temps. Alors, y a-t-il moyen d'obtenir la liste comme celle-ci? Bien que merci pour la réponse donnée ici ..

21
Saurav Kumar

Les valeurs par défaut sont dans man bash, avec des détails sur le fonctionnement de chaque commande. Voir la réponse de BroSlow si vous avez modifié vos raccourcis clavier.

   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.

MODIFIER

Ces commandes sont toutes dans une section contiguë du manuel, vous pouvez donc les parcourir à partir de Commands for Moving. Sinon, vous pouvez enregistrer toute cette section dans un fichier texte avec

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

(NB: ceci imprime toute la section, y compris les commandes sans raccourci clavier par défaut.)

Explication du code awk

  • Dans la (seule) occurrence de Commands for Moving, définissez la variable print_this sur 1.
  • Dans la (seule) occurrence de Programmable Completion, qui correspond à la section suivante, définissez la variable sur 0.
  • Si la variable est égale à 1, supprimez les espaces blancs (trois espaces) et imprimez la ligne.
22
Sparhawk

Vous pouvez répertorier tous les raccourcis dans votre shell bash actuel en appelant le programme intégré bash bind avec l'option -P.

par exemple.

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

Pour les changer, vous pouvez faire quelque chose comme

 bind '\C-p:clear-screen'

Et mettez-le dans un fichier init pour le rendre permanent (notez que vous ne pouvez avoir qu'une combinaison de touches liée à une chose à la fois, de sorte qu'elle perdra toute liaison qu'elle avait précédemment).

20
BroSlow

La commande suivante donne une sortie en colonne Nice montrant l’utilisation et les raccourcis.

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

Cela donne une sortie qui ressemble à

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". 
...

Récupérez cette sortie dans un fichier texte à l'aide de la commande suivante

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

Le fichier est créé dans votre répertoire $ HOME.

Explication

  • obtient tous les raccourcis.

    bind -P
    
  • supprime tous les raccourcis non attribués

    grep "can be found"
    
  • trie la sortie

    sort
    
  • imprime la première colonne (c'est-à-dire une fonction) et justifie le texte

    awk '{printf "%-40s", $1}
    
  • Cela fait partie de la commande précédente. Il imprime les colonnes 6+ (c'est-à-dire des raccourcis).

    {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'
    
  • Place la sortie dans un fichier texte Nice dans le répertoire principal nommé raccourcis

    > shortcuts
    

Vous pouvez avoir une idée du fonctionnement de la commande en exécutant les commandes suivantes.

bind -P
bind -P | grep "can be found"
bind -P | grep "can be found" | sort
8
Registered User

Tant que le manuel bash n'est pas modifié de manière à rendre cette commande impropre (ce qui n'est pas très probable), la commande suivante affichera tous les raccourcis par défaut pour bash.

man bash | grep -A294 'Commands for Moving'

Cela donne une sortie qui ressemble à:

 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)
...

Si le manuel bash est modifié, cette commande peut facilement être modifiée pour répondre aux besoins.

1
Registered User

D'accord, j'ai un moyen d'obtenir la liste des raccourcis en filtrant le manuel bash . Il donnera également à la description ce que fait exactement chaque raccourci. Merci à Sparhawk qui m'a éclairé pour trouver la solution. Ce dont j'avais besoin, c'était d'apprendre à utiliser les expressions régulières bien que je n'y sois pas encore très doué :)

Voici donc la commande en une ligne:

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

Voici une petite extraction de la sortie:

   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.

Maintenant, sauvegardez les raccourcis dans un fichier:

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

C'est tout ce dont j'avais besoin. Je voulais juste connaître les touches de raccourci attribuées à bash et je n’ai reconfiguré aucune touche comme BroSlow m’a demandé.

Encore une fois merci à tous pour leurs contributions.

Remarque :

Si quelqu'un veut améliorer cela, il est le bienvenu. J'ai seulement mentionné la manière de lister les raccourcis attribués par certaines touches. Donc si quelqu'un sait comment lister les actions qui n'ont pas été affectées à la description de cette manière , c'est très apprécié :)

1
Saurav Kumar