Para esclarecer, tentei MUITAS outras respostas neste fórum e em outros e NÃO funcionou para mim. /home/user também está na minha variável PATH.
Resumindo, se eu tiver um diretório no meu diretório $HOME (/home/user1) no qual coloco scripts, chamado scripts/ . Se eu executar "vim scr", isso será concluído como eu quero, mostrando a pasta de scripts sugerida e completando-a se eu digitar "scri", pois é a única opção. No entanto, se eu simplesmente digitar "scri", ele não mostrará meu diretório de scripts. Tenho que digitar o nome inteiro antes de TAB x2, que simplesmente adicionará "/" para chegar a essa pasta. Eu uso muito isso e não consigo descobrir por que não conclui, foi isso que tentei. Nota: Uma estranheza que me faz pensar que $PATH não está funcionando se eu fizer /home/user/scr, isso funciona corretamente como o vim acima.
- Garantindo que meu diretório $HOME esteja no meu caminho por meio de vários métodos: PATH="~/${PATH:+:${PATH}}"; PATH="$HOME:$PATH"; PATH="/home/user:$PATH"; export PATH="/home/user:$PATH" etc.
- Garantindo que meu diretório HOME esteja no meu caminho, ele é: echo $PATH |grep /home/user1 ~/:/home/user1:./:/home/user1:
- Certificando-se de que o pacote "bash-completion" está instalado, ele está mostrando bash-completion.noarch 1:2.11-5.el9
- Removendo todas as entradas de preenchimento automático anteriores, etc., e então fazendo o acima novamente: complete -r
- Caso eu tenha me distanciado totalmente, verifiquei que estou no diretório correto: pwd /home/user1
Novamente, se eu usar /home/user1/scr, isso funcionará. Então por que ele não entende que não consigo concluir sem acrescentar "/home/user1/"? Alguém pode me dar uma ideia?
Por que você está tendo problemas
Se houver um subdiretório chamado
scripts
no diretório atual, então quando você digitar um prefixo descripts
e pressionar Tab, o bash oferecescripts/
como uma conclusão. Isso é verdade com uma configuração bash vazia, após carregarbash_completion
, e na minha configuração pessoal.No entanto, há uma limitação (observada no bash 4.3, 5.1 e 5.2, e também no zsh!), que é sem dúvida um bug. Ao completar nomes de comando, se não houver barra, o bash primeiro tenta completar nomes de comando, e só oferece subdiretórios do diretório atual se nenhum comando corresponder. Com um diretório chamado
scripts
, se você digitou apenasscript
ou menos, então o nome do comando/usr/bin/script
(e talvez outros, dependendo do software instalado no seu sistema) é oferecido como uma conclusão. O Bash só oferecerá oscripts
subdiretório se você digitarscripts
. (O que é completamente inútil neste caso em particular, mas se, por exemplo, o único comando que começa comscr
fossescreen
, então o bash começaria a oferecerscripts
assim que você digitassescri
.)Soluções alternativas
Assim que você inclui uma barra, apenas diretórios e arquivos executáveis são conclusões válidas, então
./s
Tab(do seu diretório inicial) ou~/s
Tab(de qualquer lugar) oferecerá a conclusãoscripts
.No zsh (com o novo estilo de conclusão), se você habilitar a
autocd
opção, então subdiretórios do diretório atual serão oferecidos como conclusões. Então,scr
Tabdo seu diretório home ofereceráscripts
tambémscript
,screen
, etc. Para este caso específico, porém,./s
Tabé provável que exija menos digitação no geral. E de qualquer forma, o bash não faz isso (o que é outro bug, eu acho).Por que isso não importa
PATH
lookup só é feito quando um nome de comando não contém uma barra. Então, colocar$HOME
seuPATH
não tornará possível executarscripts/myscript
de qualquer lugar.Em vez disso, insira
$HOME/scripts
seuPATH
e liguemyscript
diretamente.Como uma das alternativas ao
Tab
, o manual do Bash oferece o usoMeta-/
para completar nomes de arquivos especificamente.Meta
geralmente estáoption
em Macs (verifique se está habilitado no Terminal) ouAlt
em PCs.