Esiste un manuale per ottenere l'elenco dei tasti di scelta rapida di bash?

21

Ci sono molte scorciatoie che uso mentre interagisco con bash command line per rendere il lavoro più semplice e veloce.

Come:

  • ctrl + L : per cancellare lo schermo
  • ctrl + a / ctrl + e : per spostare inizio / fine riga
  • ctrl + r : per cercare la cronologia del comando scrivendo solo pochi caratteri
  • ctrl + u / ctrl + y : per tagliare / incollare la linea.

e molti altri ancora, che voglio conoscere e che saranno sicuramente utili da imparare.

Voglio sapere da dove posso ottenere l'elenco di queste scorciatoie in Ubuntu? C'è qualche manuale che elenca queste scorciatoie?

Nota:

Voglio ottenere l'elenco delle scorciatoie e le loro azioni in un unico posto. Aiuterà davvero a imparare molti di loro in un breve periodo di tempo. Quindi è così che possiamo ottenere la lista come questa? Comunque grazie per la risposta data qui ..

    
posta Saurav Kumar 08.04.2014 - 00:40

5 risposte

22

I valori predefiniti sono in man bash , insieme ai dettagli su ciò che fa ciascun comando. Vedi la risposta di BroSlow se hai cambiato i tuoi binding di tasti.

   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.

Modifica

Questi comandi sono tutti in una sezione contigua del manuale, quindi puoi sfogliarlo da Commands for Moving . In alternativa, puoi salvare l'intera sezione in un file di testo con

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

(N.B .: stampa l'intera sezione, compresi i comandi senza tasti di scelta rapida predefiniti).

Spiegazione del codice awk

  • Nell'occorrenza (solo) di Commands for Moving , imposta la variabile print_this su 1.
  • Sull'occorrenza (solo) di Programmable Completion , che è la seguente sezione, imposta la variabile su 0.
  • Se la variabile è 1, elimina lo spazio bianco iniziale (tre spazi) e stampa la riga.
risposta data Sparhawk 08.04.2014 - 01:25
18

Puoi elencare tutte le scorciatoie nella tua attuale shell bash chiamando la bash builtin bind con l'opzione -P .

es.

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

Per cambiarli, puoi fare qualcosa di simile a

 bind '\C-p:clear-screen'

E mettilo in un file di init per renderlo permanente (nota che puoi avere una sola combinazione di tasti associata a una cosa alla volta, quindi perderà qualsiasi legame che aveva precedentemente).

    
risposta data BroSlow 08.04.2014 - 03:06
7

Il seguente comando fornisce un buon output colonnare che mostra l'uso e le scorciatoie.

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

Questo dà un risultato, che assomiglia a

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

Ottieni questo risultato in un file di testo usando il seguente comando

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

Il file viene creato nella tua directory $ HOME.

Spiegazione

  • ottiene tutte le scorciatoie.

    bind -P
    
  • rimuove tutte le scorciatoie non assegnate

    grep "can be found"
    
  • ordina l'output

    sort
    
  • stampa la prima colonna (cioè la funzione) e giustifica il testo

    awk '{printf "%-40s", }
    
  • Questo fa parte del comando precedente. Stampa colonne 6+ (cioè scorciatoie).

    {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'
    
  • Inserisce l'output in un bel file di testo nella directory home denominata scorciatoie

    > shortcuts
    

Puoi avere un'idea di come funziona il comando eseguendo i seguenti comandi.

bind -P
bind -P | grep "can be found"
bind -P | grep "can be found" | sort
    
risposta data Registered User 08.04.2014 - 09:59
1

Ok, ho un modo per ottenere l'elenco delle scorciatoie filtrando il manuale di bash . Darà anche la descrizione di cosa esattamente fa ogni scorciatoia. Grazie a Sparhawk che mi ha illuminato per trovare la soluzione. Quello di cui avevo bisogno era di imparare l'uso delle espressioni regolari anche se non sono ancora bravo in questo:)

  

Quindi ecco il comando a una riga:

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

Ecco una piccola estrazione dell'output:

   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.
  

Ora per salvare le scorciatoie in un file:

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

Questo è tutto ciò di cui avevo bisogno. Volevo solo conoscere i tasti di scelta rapida assegnati a bash e non ho riconfigurato alcun tasto come mi ha chiesto BroSlow .

Ancora una volta grazie a tutti per i loro contributi.

Nota :

Se qualcuno vuole migliorare questo, lui / lei è il benvenuto. Ho solo menzionato il modo di elencare quelle scorciatoie che sono state assegnate da alcune chiavi. Quindi se qualcuno sa come elencare quelle azioni che non sono state assegnate con la descrizione usando in questo modo , è molto gradito:)

    
risposta data Saurav Kumar 08.04.2014 - 12:21
1

Se il manuale di bash non viene modificato in modo da rendere questo comando non corretto (il che non è molto probabile), il seguente comando mostrerà tutte le scorciatoie predefinite per bash .

man bash | grep -A294 'Commands for Moving'

Questo dà un risultato che assomiglia a:

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

Se il manuale di bash è stato modificato, questo comando può essere facilmente modificato per soddisfare le esigenze.

    
risposta data Registered User 20.04.2014 - 07:09

Leggi altre domande sui tag