Como fazer o preenchimento automático do terminal com base nos comandos inseridos anteriormente? [duplicado]

4

É normal usar terminais que pressionam ciclos de subida e descida através de comandos anteriores, inseridos cronologicamente.

Aprendi em um site como adicionar a esse comportamento preenchendo automaticamente o que estou digitando no cursor com base nos comandos inseridos anteriormente ao pressionar para cima e para baixo.

Por exemplo, digamos que eu digitei os seguintes comandos nesta ordem:

  1. ls Videos
  2. ls Vids
  3. lsomething
  4. ls Videos/Funny/Old
  5. vi file
  6. ls Music

Se eu não tiver digitado nada, pressionar para cima e para baixo percorrerá todas as linhas como se fosse normal. Mas, se eu digitei ls , pressione os ciclos para cima e para baixo em todos os comandos em que os primeiros 2 caracteres são ls (linhas 1,2,3,4,6 acima). Entrando ls (com um espaço depois), porém, só vai subir e descer pelas linhas 1,2,4,6. Da mesma forma, ls Vid permite que as setas percam as linhas 1,2,4, mas ls Videos apenas permite alternar entre as linhas 1 e 4.

É muito útil preencher valores específicos dos comandos que você precisa inserir repetidas vezes sem ter que percorrer todos os comandos não relacionados que você inseriu entre eles. Por exemplo, estou tentando testar os efeitos dos valores de env , como o código de idioma, nas coisas:

env [many different values] [command]
[insert many different commands here]
env [slightly different values from before] [command]
[doing other stuff]

Só precisarei pressionar algumas vezes depois de digitar env para alternar entre os valores que tentei.

Peço desculpas se for um longo caminho para descrevê-lo. Eu não sei como é chamado. Meus terminais costumavam ter esse comportamento, mas eles parecem ter perdido e eu não consigo encontrar o site que eu aprendi. Eu acho que tem algo a ver com a edição de ~/.bashrc .

    
por maki57 25.10.2014 / 08:57

1 resposta

3

Para obter o comportamento desejado, adicione essas linhas ao seu ~/.inputrc (crie o arquivo, se ele não existir):

"\e[A": history-search-backward
"\e[B": history-search-forward

Em seguida, abra um novo terminal e ele funcionará como esperado. Esse comportamento é controlado pelas configurações em /etc/inputrc e ~/.inputrc . Você pode ler mais sobre eles na seção Readline Command Names de man bash :

   non-incremental-forward-search-history (M-n)
          Search forward  through  the  history  using  a  non-incremental
          search for a string supplied by the user.
   history-search-forward
          Search  forward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.
    
por terdon 25.10.2014 / 13:48