En bash, l'autocomplétion des chemins a récemment cessé de fonctionner lors de l'émission de vim
commandes où le chemin est plus profond que deux répertoires (il continue de fonctionner comme prévu avec d'autres commandes, telles que ls
et cd
).
Par exemple, si je tape ls .config/btsync/bt
puis appuie sur TAB, il se développe en ls .config/btsync/btsync.conf
.
Si je tape vim .config/bt
puis appuie sur TAB, il se développe en vim .config/btsync/
.
Cependant, si je tape vim .config/btsync/bt
puis appuie sur TAB, rien ne se passe (je m'attendrais à ce qu'il se développe vim .config/btsync/btsync.conf
, comme dans l' ls
exemple ci-dessus.
J'obtiens le même problème lors de l'exécution en tant que mon propre utilisateur et lors de l'exécution en tant que su.
J'ai lu cet article qui mentionnait un problème avec les anciennes versions de bash-complètement mais j'exécute 2.1-5.
MISE À JOUR: Après quelques tests supplémentaires, j'ai constaté que le problème racine est que bash ne terminera que les noms de répertoire, pas les noms de fichiers.
MISE À JOUR: Il s'avère que bash-completion
c'était la cause globale. Voir mon deuxième commentaire sur la réponse acceptée.
Toutes les suggestions quant à la cause potentielle de ce comportement seraient reçues avec gratitude!
la source
.bashrc
!.bashrc
message, comme demandé.Réponses:
J'ai fait d'autres recherches pour vous et voici ce que j'ai trouvé - la clé de la saisie semi-automatique est la
bash
commandecomplete
. Vous pouvez imprimer les règles d'vim
utilisation:De même, vous pouvez supprimer ces règles spécifiques avec:
Cette commande la réinitialise à ses valeurs par défaut - les chemins habituels et la complétion des noms de fichiers sans logique supplémentaire. C'est probablement ce que tu veux.
Pour plus d'informations, consultez
help complete
ouman bash
et recherchez la section sur lacomplete
commande (c'est un bash intégré, donc il est documenté dans la page de manuel bash).Un dernier point - les changements ci-dessus n'affectent que la
bash
session en cours, si vous souhaitez supprimer les règles vim après chaque connexion, mettez-lescomplete -r vim
sur votre~/.bashrc
.J'espère que cela pourra aider :)
la source
complete -p vim
commande est revenue,complete -F _filedir_xspec vim
qui a été supprimée par lacomplete -r vim
commande, résolvant le problème. Je vais faire quelques lectures sur lacomplete
commande et les informations retournées par le commutateur -p. Légèrement perplexe de savoir pourquoi ce comportement a changé, nous étudierons cela également._filedir_xspec
fonction dans/usr/share/bash-completion/bash_completion
ne complète que les répertoires. J'ai désinstallébash-completion
, supprimé lacomplete -r vim
ligne de mon.bashrc
et redémarré etvim
se comporte maintenant comme prévu.Bash par défaut ne remplit automatiquement que les noms de chemin et de fichier. Cependant, le mécanisme est extensible et bash peut être appris à effectuer une autocomplétion différente pour différents programmes. Par exemple,
git
il peut compléter automatiquement les noms des sous-commandes (cloner, valider) et les révisions au lieu de simplement les noms de chemin. Parfois, c'est pratique, parfois assez ennuyeux - par exemple, lorsqu'ilgzip -d
refuse de saisir automatiquement les noms de fichiers qui n'ont pas l'.gz
extension.L'achèvement de Bash est généralement configuré dans
/etc/bash_completion.d
- vous y trouverez probablement un fichier appelévim
. C'est le fichier qui contient les règles de saisie semi-automatique pour lavim
ligne de commande.Maintenant, vous avez deux options:
vim
règles spéciales et effectuez uniquement la saisie automatique du chemin par défaut.Et bien sûr, déposez un rapport de bogue qui décrit le problème afin qu'il soit corrigé dans les futures versions :)
la source
/etc/bash_completion.d
et il n'y a qu'unhg
fichier (pour Mercurial). Très étrange./usr/share/bash-completion/
ou répertoriez tous les fichiers duvim
package ou debash
ou desbash-completion
packages (vous ne savez pas comment cela s'appelle sur ArchLinux). Ce sera là quelque part.bash-completion
package/usr/share/bash-completion/completions
contient des règles pour de nombreux programmes, mais pasvim
. La liste des fichiers installés avec levim
package n'affiche aucun fichier lié à l'achèvement et la recherche sur l'ensemble du système à l'aide n'affichefind / -name vim
également aucun fichier lié à l'achèvement.Peut-être pourriez-vous réinstaller bash-complètement:
apt-get install --reinstall bash-completion
Et jetez un œil au fichier /etc/bash.bashrc:
nano /etc/bash.bashrc
Et vérifiez que la ligne suivante n'est pas commentée:
Ensuite, redémarrez votre session de terminal
la source
bash-completion
, de tester levim
comportement, puis de réinstallerbash-completion
et de tester, mais j'ai toujours rencontré le même problème dans les deux circonstances. Les lignes que vous avez répertoriées ne sont pas présentes dans/etc/bash.bashrc
. Cette ligne est cependant[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion