Key posso manter pressionado para aba apenas completar uma pasta

0

Digamos que eu tenha um diretório assim:

 foo/
   bar.js
   bar/

se eu cd em foo e, em seguida, digite "ba" e, em seguida, clico em tab, não receberei a conclusão porque um nome de arquivo se sobrepõe a uma pasta.

Existe uma chave que eu posso segurar com a aba que vai me dar a pasta (ou o arquivo?)

    
por Alexander Mills 22.02.2017 / 02:01

2 respostas

1

TL, DR: adicione . /etc/bash_completion ao seu .bashrc .

Para responder à pergunta exata que você fez, não há comandos internos. Bash tem comandos para completar vários tipos de objetos (nomes de arquivos, usuário nomes, nomes de variáveis, etc.), mas não um que esteja restrito a diretórios.

No entanto, a menos que você esteja executando uma versão antiga do bash, você pode usar conclusão sensível ao contexto , um recurso adicionado na versão 2.04 que foi lançado em 2000. Algumas distribuições o habilitam por padrão; para outros, você precisa instalar o pacote bash-completion e ativá-lo no seu ~/.bashrc . A maioria das distribuições fornece um pacote chamado bash-completion e coloca o script de ativação em /etc/bash_completion , ou seja, seu .bashrc deve conter a linha

. /etc/bash_completion

Depois disso, se você digitar cd e pressionar Tab , apenas os nomes dos diretórios serão preenchidos.

Se você tem uma versão não antiga do bash (≥4.0), você pode colocar shopt -s autocd no seu .bashrc , e depois disso você pode omitir o comando cd , então você pode escrever apenas bar em vez de cd bar . A conclusão da tabulação completará os dois nomes de comandos de $PATH e os nomes de diretórios do diretório atual (e $CDPATH ) na primeira palavra da linha.

O Bash 4.0 também permite que você escreva suas próprias funções de edição de linha de comando (versões anteriores, mas você teve que pular através de aros). Então, se você realmente quiser, pode fazer isso. Como personalizar a conclusão do comando Bash? tem um relativamente exemplo complexo; pesquise READLINE_LINE e complete para encontrar outros exemplos.

    
por 23.02.2017 / 02:00
1

O motivo pelo qual você não está recebendo nenhuma conclusão depois de digitar ba é porque você não precedeu ba com o comando cd . Bash percebe que nem digitar bar.js<ENTER> nem bar<ENTER> faria sentido (um é um diretório enquanto outro arquivo bar.js não está em $PATH e / ou não tem o conjunto de permissão executável), então não dá você qualquer conclusão em tudo.

No entanto, se você preceder o nome do diretório com um cd , o bash verá bar e nenhum outro nome, e executará uma conclusão completa:

$ ls
bar  bar.js
$ cd <TAB>

Nesse ponto, o prompt será transformado em

$ cd bar/ # This line
    
por 23.02.2017 / 00:50