Existe algum manual para obter a lista de teclas de atalho do bash?

19

Existem muitos atalhos que uso ao interagir com linha de comando bash para tornar o trabalho mais fácil e rápido.

Como:

  • ctrl + L : para limpar a tela
  • ctrl + a / ctrl + e : para mover o início / fim da linha
  • ctrl + r : para pesquisar o histórico do comando apenas escrevendo alguns dos caracteres
  • ctrl + u / ctrl + y : para cortar / colar a linha.

e muitos mais, que eu quero saber e que definitivamente será útil para aprender.

Eu quero saber de onde posso obter a lista desses atalhos no Ubuntu? Existe algum manual que liste esses atalhos?

NOTA:

Eu quero obter a lista de atalhos e suas ações em um só lugar. Isso realmente ajudará a aprender muitos deles em um pequeno período de tempo. Então, há uma maneira de conseguirmos a lista assim? Embora obrigado pela resposta dada aqui ..

    
por Saurav Kumar 08.04.2014 / 00:40

5 respostas

19

Os padrões estão em man bash , juntamente com detalhes sobre o que cada comando faz. Veja a resposta do BroSlow se você alterou suas combinações de teclas.

   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.

EDITAR

Estes comandos estão todos em uma seção contígua do manual, então você pode navegar por Commands for Moving . Alternativamente, você pode salvar esta seção inteira em um arquivo de texto com

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

(N.B. isso imprime toda a seção, incluindo comandos sem atalho de teclado padrão).

Explicação do código awk

  • Na (única) ocorrência de Commands for Moving , defina a variável print_this para 1.
  • Na (única) ocorrência de Programmable Completion , que é a seção a seguir, defina a variável como 0.
  • Se a variável for 1, elimine o espaço em branco inicial (três espaços) e imprima a linha.
por Sparhawk 08.04.2014 / 01:25
18

Você pode listar todos os atalhos no seu bash shell atual chamando o bash builtin bind com a opção -P .

por exemplo.

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

Para alterá-los, você pode fazer algo como

 bind '\C-p:clear-screen'

E coloque-o em um arquivo init para torná-lo permanente (note que você só pode ter uma combinação de teclas ligada a uma coisa de cada vez, então ele perderá qualquer ligação que tenha anteriormente).

    
por BroSlow 08.04.2014 / 03:06
7

O seguinte comando fornece uma boa saída em colunas mostrando o uso e os atalhos.

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

Isto dá uma saída, que se parece com

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

Obtenha esta saída em um arquivo de texto usando o seguinte comando

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

O arquivo é criado no diretório $ HOME.

Explicação

  • obtém todos os atalhos.

    bind -P
    
  • remove todos os atalhos não atribuídos

    grep "can be found"
    
  • classifica a saída

    sort
    
  • imprime a primeira coluna (ou seja, função) e justifica o texto

    awk '{printf "%-40s", }
    
  • Isso faz parte do comando anterior. Imprime colunas 6+ (ou seja, atalhos).

    {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'
    
  • Coloca a saída em um arquivo de texto legal no diretório home chamado atalhos

    > shortcuts
    

Você pode ter a ideia de como o comando funciona executando os seguintes comandos.

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

Ok, eu tenho uma maneira de obter a lista de atalhos filtrando o manual do bash . Ele também dará a descrição exatamente o que cada atalho faz. Graças a Sparhawk que me esclareceu para encontrar a solução. O que eu precisava era aprender o uso de expressões regulares embora eu ainda não seja bom nisso:)

  

Então, aqui está o comando de uma linha:

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

Aqui está uma pequena extração da saída:

   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.
  

Agora, salve os atalhos em um arquivo:

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

Isso é tudo que eu precisava. Eu só queria saber as teclas de atalho atribuídas ao bash e eu não reconfigurei nenhuma tecla como BroSlow me perguntou.

Mais uma vez, obrigado a todos por suas contribuições.

Nota :

Se alguém quiser melhorar isso, ele é muito bem-vindo. Mencionei apenas a maneira de listar esses atalhos que foram atribuídos por algumas chaves. Então se alguém souber como listar as ações que não foram designadas com a descrição usando desta maneira , será bem-vindo:)

    
por Saurav Kumar 08.04.2014 / 12:21
1

Contanto que o manual do bash não seja modificado de forma a tornar este comando impróprio (o que não é muito provável), o comando a seguir mostrará todos os atalhos padrão para bash .

man bash | grep -A294 'Commands for Moving'

Isso fornece uma saída que se parece com:

 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 o manual bash for modificado, esse comando pode ser facilmente alterado para atender às necessidades.

    
por Registered User 20.04.2014 / 07:09