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


21

Il existe de nombreux raccourcis que j'utilise lors de l'interaction avec la ligne de commande bash pour rendre le travail plus facile et plus rapide.

Comme:

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

et bien d'autres, que je veux savoir 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?

REMARQUE:

Je veux obtenir la liste des raccourcis et leurs actions en un seul endroit. Cela aidera vraiment à en apprendre beaucoup en peu de temps. Alors, comment pouvons-nous obtenir la liste comme celle-ci? Bien merci pour la réponse donnée ici ..

Réponses:


22

Les valeurs par défaut sont man bash, ainsi que des détails sur ce que fait 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 se trouvent toutes dans une section contiguë du manuel, vous pouvez donc la parcourir à partir de Commands for Moving. Vous pouvez également enregistrer l'intégralité de 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 cela imprime toute la section, y compris les commandes sans raccourci clavier par défaut.)

Explication du code awk

  • À la (seule) occurrence de Commands for Moving, définissez la variable print_thissur 1.
  • À la (seule) occurrence de Programmable Completion, qui est la section suivante, définissez la variable sur 0.
  • Si la variable est 1, supprimez le premier espace (trois espaces) et imprimez la ligne.

1
Ce sont des raccourcis par défaut, pas nécessairement les raccourcis du système réel d'OP. bind -Pserait plus précis.

@BroSlow Bon commentaire. Je pense toujours que ma réponse est valable, car elle est plus détaillée sur ce que font les commandes. Si vous l'écrivez comme réponse, je vais +1.
Sparhawk

@Sparhawk: +1 pour votre réponse. Je cherche la liste des raccourcis à un seul endroit. Donc, si le manuel bash peut me parler de tous les raccourcis, comment vais-je les rassembler, comme vous l'avez répondu ici !! Comment avez-vous obtenu la liste comme celle-ci? Existe-t-il un moyen d'analyser les raccourcis avec l'action et de l'enregistrer dans un autre fichier? J'attendrai votre réponse ..
Saurav Kumar

Si vous recherchez le manuel bash Readline Command Names, vous verrez toutes les commandes dans cette section. J'écrirai un court script pour l'extraire dans un fichier texte, mais je ne peux pas le faire maintenant (j'aurai le temps dans quelques heures).
Sparhawk

@Sparhawk: Votre réponse m'a aidé à écrire une simple commande de filtre grep. Vérifiez-le ici, j'espère que vous l'aimerez. Merci de votre aide. Bien que j'attende votre script .. :)
Saurav Kumar

20

Vous pouvez lister tous les raccourcis dans votre shell bash actuel en appelant le build bash bindavec l' -Poption.

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 placez-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, donc il perdra toute liaison qu'il avait auparavant).


Obtenir les touches de raccourci en les recherchant par nom est peu inhabituel pour moi et aussi un long processus. Existe-t-il un moyen simple d'obtenir la liste des raccourcis à un seul endroit? J'espère que tu as compris. +1 cependant pour cette approche ..
Saurav Kumar

2
@SauravKumar bind -Pdevrait vous donner tous les raccourcis. Si vous voulez ignorer ceux qui n'ont pas de mappage pour les fonctions bind / readline, vous pouvez faire quelque chose commebind -P | grep -v "not bound"

7

La commande suivante donne une belle sortie en colonnes 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". 
...

Obtenez cette sortie dans un fichier texte en utilisant 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 la 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 les raccourcis).

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

    > shortcuts

Vous pouvez vous faire 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

@SauravKumar Vous voulez que j'ajoute quelque chose à la réponse?
Utilisateur enregistré le

2
+1 pour votre réponse et pour le rendre plus significatif .. :) Je manqué à et cela a changé tout le sens de la phrase;) Non , vous ne devez pas ajouter quelque chose. Vous avez fait de votre mieux ..
Saurav Kumar

+1 Belle commande! Je l'ai étendu pour inclure des raccourcis non définis: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"}}}'
wjandrea

1

D'accord, j'ai un moyen d'obtenir la liste des raccourcis en filtrant le manuel bash . Il donnera également la description de 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 ne sois toujours pas bon dedans :)

Voici donc la commande d'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, pour enregistrer 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 affectées à bash et je n'ai reconfiguré aucune clé comme BroSlow me l'a demandé.

Merci encore à tous pour leurs contributions.

Remarque :

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


Très agréable. Cependant, le seul problème est que cela n'imprimera que la première ligne de descriptions multilignes. En outre, il ignore les en-têtes et les commandes sans les touches par défaut (par exemple dump-macros), bien que cela puisse être ce que vous voulez.
Sparhawk

1

Tant que le manuel bash n'est pas modifié de manière à rendre cette commande incorrecte (ce qui est peu 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.


Bravo Patil !! Pourquoi n'ai-je pas pensé à cette façon .. :)
Saurav Kumar

@Patil J'ai aussi pensé à coder en dur le nombre de lignes, mais j'ai pensé qu'il était plus probable que le manuel de bash ait changé le nombre de lignes dans la section de commande, plutôt que de changer l'ordre de ses sections. Je suis d'accord que c'est probablement peu probable cependant.
Sparhawk
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.