Auto complete para comandos de linha de comando usados com frequência?

14

Para alguns projetos, eu geralmente digito alguns comandos, como por exemplo:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

e

./runmyproject --with some --command line --options set

Vendo que sou muito preguiçoso, tento evitar digitar esses comandos completamente e de novo. Então, é claro que eu posso usar muito o up-key para encontrar de volta esses comandos, mas muitas vezes, eu também tenho tantos comandos no meio, que procurar por ele leva mais tempo do que apenas digitá-lo.

Agora me pergunto se existe algum tipo de utilitário que possa sugerir um comando completo, que eu uso muito, quando ainda não digitei tudo. Então eu posso, por exemplo, digitar 'cd an /' e isso já sugere o resto do caminho porque eu usei tanto o mês passado.

Eu encontrei algo chamado Bash Smart Complete. Mas isso é um pouco "burro", pois não olha para os comandos que eu usei antes. Eu também encontrei essa resposta SO , que sugere colocar os comandos que eu uso muito em um arquivo. No entanto, isso não é responsivo o suficiente para que eu precise criar um novo arquivo para ele sempre que iniciar novos projetos ou alterar pastas ou argumentos do programa.

Alguém conhece alguma outra utilidade ou outra maneira de conseguir isso? Ou, alguém saberia como eu poderia alterar o Bash Smart Complete para que ele possa olhar para os comandos que usei no mês passado e completar o comando que se encaixa e foi mais usado no mês passado?

[EDITAR] Abaixo estão algumas ótimas respostas. Eu já marquei qualquer como uma resposta definitiva ainda. Não porque eu não goste das respostas, mas sim porque nenhum deles é um vencedor absoluto. Eu acho que o Finalterm é um ótimo projeto. Infelizmente ainda é bastante áspero em torno das bordas. Por exemplo; ele não suporta copiar e colar ainda. Eu ficaria de olho no projeto, porque quando ele amadurecer, eu acho que vai ser um ótimo aplicativo de terminal. Quanto às outras respostas; eles sugeriram a criação de um alias, o que não é o que eu quero fazer porque cria um trabalho extra em vez de tirar o trabalho, ou usando Ctrl + R, que é brilhante (eu não sabia disso!). Algumas pessoas sugeriram usar Ctrl + R, por isso não posso destacar uma resposta sobre a outra.

Então, por enquanto, estou definitivamente usando o Ctrl + R e, no futuro, posso usar o Finalterm.

Obrigado por todas as boas respostas!

    
por kramer65 15.06.2013 / 20:27

7 respostas

15

Se os comandos são usados com frequência, eles são gravados no histórico de comandos bash tracks em .bash_history .

Agora o truque: você pode inverter a pesquisa desse histórico para executar novamente os comandos pressionando CTRL-r .

No modo de busca por histórico inverso, o bash mostra, ao vivo, enquanto você digita , o comando mais recente no histórico que começa com sua entrada dada. Em seguida, pressione enter para aceitar e executar o comando proposto. Continue pressionando CTRL-R para alternar para comandos antigos com o mesmo prefixo.

Isso está embutido no bash, sem necessidade de personalizar scripts ou instalar software :) É um dos recursos mais úteis do bash, imho.

    
por catchmeifyoutry 16.06.2013 / 02:10
8

Cole (Ctrl-Shift-V) o seguinte em uma tela de terminal:

echo '"\e[A": history-search-backward' > ~/.inputrc
echo '"\e[B": history-search-forward' >> ~/.inputrc
echo 'set show-all-if-ambiguous on' >> ~/.inputrc
echo 'set completion-ignore-case on' >> ~/.inputrc

Saia (Ctrl-D) da tela do terminal e abra o Terminal novamente.

Agora, basta digitar os primeiros dois caracteres e, em seguida, pressionar o botão para cima ou para baixo para percorrer a lista filtrada

    
por Scott May 18.06.2013 / 01:59
8

Termo final

Existe este terminal muito promissor chamado Termo Final . Entre seus muitos recursos, também tem um histórico de comandos remebering, para que você possa selecioná-lo. Aqui estão mais alguns recursos:

Você pode ler mais sobre isso neste artigo .

Aqui está o site dos criadores. link

Para instalá-lo

sudo add-apt-repository ppa:versable/finalterm-daily
sudo apt-get update
sudo apt-get install finalterm

Aviso

Eu disse que é promissor. O único problema é que está na versão 0.1. Então, algumas coisas como vim e nano não funcionam bem ainda. Eu também notei que ele ainda não suporta Drag-and-Drop, e copia e cola. Mas tem o recurso que você solicita. Conforme o software amadurece, ele se tornará um dos melhores terminais para o desktop.

Screenshot

Aqui está a função em ação:

Espero que isso ajude.

* Eu estou no Saucy, então é por isso que tenho um histórico de Salamandra:)

    
por Max Tither 15.06.2013 / 20:48
7

Use alias para todo o seu comando ou adicione o diretório em $PATH . Além disso, você não precisa alterar os diretórios para onde o executável (ou script, ou qualquer outro) seja executado, portanto, é bastante simples. Ambos os métodos exigem que você reinicie o terminal que está usando antes que as alterações entrem em vigor.

Veja como criar um bash alias para o seu exemplo (adicione a seguinte linha ao seu arquivo ~/.bashrc ):

alias runmyproject='an/extremely/long/path/in/which/I/have/some/kinda/project/runmyproject --with some --command line --options set'

Dessa forma, tudo o que você precisa fazer é inserir runmyproject no terminal, onde quer que esteja, sem precisar especificar opções / argumentos.

Como alternativa, você pode adicionar o caminho do seu projeto à sua variável de ambiente $PATH . Para fazer isso, adicione as seguintes linhas ao seu arquivo ~/.bashrc :

PATH=an/extremely/long/path/in/which/I/have/some/kinda/project:$PATH
export PATH

Nesse caso, você ainda precisará especificar suas opções / argumentos para o seu executável ao executá-lo.

    
por oaskamay 15.06.2013 / 20:45
4

Quando me encontro frequentemente tendo que mudar para um diretório como este:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

Eu só faria isso uma vez:

ln -s an/extremely/long/path/in/which/I/have/some/kinda/project ~/project

A partir de então, use:

cd ~/pr[tab]

Quando se trata de:

./runmyproject --with some --command line --options set

Eu usaria a pesquisa do histórico bash. No prompt de comando, basta pressionar Ctrl-R e digitar 'runmy'. Voila, todo o comando com todas as opções, como foi introduzido pela última vez, está ali para ser reinserido. Se eu não gostasse das opções que usei da última vez e quisesse ver os comandos anteriores, continuaria pressionando Ctrl-R para percorrer todos os comandos anteriores que continham "runmy".

A pesquisa de histórico Ctrl-R também pode ajudar com o comando 'cd', se você não gostar da ideia de link simbólico. É muito provável que o [Ctrl-R] / proj traga de volta o último comando que você usou para o cd nesse diretório.

Em vez de adicionar um alias ou alternar para um shell especial, eu sempre prefiro aprender a usar os recursos bash projetados para ajudar com esse tipo de coisa. Dessa forma, posso usar os mesmos recursos em máquinas remotas ou se precisar sentar no terminal de um colega.

    
por Steven K 16.06.2013 / 01:58
4

pressione Ctrl + R no teclado - ele colocará você no modo de histórico reverso e você poderá digitar a parte que você conhece e o comando inteiro será exibido

Existem outras formas listadas aqui

link

Eu costumo usar o controle R mais embora

    
por exussum 16.06.2013 / 02:12
2

Tente isto ... Isto funciona para todos os comandos no seu arquivo de histórico ... é a mesma coisa que Ctrl + R , mas eu acho que é mais intuitivo :)

  1. edite /etc/inputrc

    sudo vim /etc/inputrc
    
  2. remova o comentário ou adicione essa linha

    "\e[5~": history-search-backward
    
    "\e[6~": history-search-forward
    
  3. logout / login

tente escrever algum comando listado na história ...

como ...

ls -lah

escreva

ls

e pressione

Subir página ou Página Dn para navegar pelo seu arquivo de histórico em busca de comandos que começam com "ls"

Se você fez tudo certo, deve completar automaticamente seu comando ...

    
por Wolfy 16.06.2013 / 16:00