web-dev-qa-db-fra.com

Options de saisie semi-automatique pour certaines commandes du terminal ubuntu

J'utilise Ubuntu 18.04 et édite la majeure partie de mon code à l'aide de VisualStudio Code. Pour ouvrir un fichier depuis le terminal, je lance la commande

code fileName.Java

Une fois le code Java compilé, le fichier .class associé se trouve également dans le répertoire. Cela signifie que la prochaine fois que j'ouvrirai le fichier et que j'essaierai de compléter automatiquement la commande à l'aide de "Tab", cela se terminera automatiquement.

code fileName.

Pourriez-vous me montrer comment modifier les options de la commande code de sorte que, lorsque je tape

code f

puis appuyez sur la touche Tab, elle se complétera automatiquement.

code fileName.Java

plutôt que juste

code fileName.
1
waitaria

Ajoutez ceci dans votre .bashrc:

complete -f -X '!*.Java' code

et source ~/.bashrc il une fois.

  • Le -f complétera uniquement les fichiers f .
  • Le -X pattern permet de définir un motif personnalisé
  • Cette personnalisation complétion automatique se produira uniquement pour votre commande code et toute complétion ne correspondant pas au modèle est supprimée de la liste de complétion.
1
αғsнιη

La meilleure façon de résoudre le problème est de créer un script d'achèvement de bash.

Créez un nouveau script d’achèvement avec le nom Java à l’aide de votre éditeur de texte préféré, qu’il s’agisse de nano editor par exemple:

user@pc:~$ Sudo nano /etc/bash_completion.d/Java

Insérez le code dans le script:

_code()
{
  local cur=${COMP_WORDS[COMP_CWORD]}

  local IFS=$'\n'
  COMPREPLY=( $( compgen -f -X '!*.Java' -- $cur ) )
}

complete -o filenames -F _code code

Enregistrez les modifications et fermez l'éditeur de texte.

Rechargez enfin les règles d’achèvement - faites attention aux points et à l’espace avant la première barre oblique:

user@pc:~$ . /etc/bash_completion

Cette solution présente 2 avantages:

  1. Le script fonctionne à l'échelle du système.
  2. Il supporte les espaces dans les noms de fichiers.
1
Bob