Achèvement de l'onglet shell Bash, ne développez pas le ~

12

J'utilise Tabbeaucoup la clé lorsque j'utilise le shell (bash).

Mais ça m'énerve de ~toujours être élargi /home/"user". Je ne pense pas que ça a toujours été comme ça; existe-t-il un moyen d'arrêter ce comportement?

Un exemple:

  1. cj@zap:~$ ls ~/
  2. presse Tab
  3. cj@zap:~$ ls /home/cj/

Je voudrais continuer à avoir ~/et ne pas me retrouver avec /home/cj/.

Johan
la source
2
"Je ne pense pas que ça a toujours été comme ça." - L'achèvement programmable remplace le paramètre de la ligne de lecture set expand-tilde off(par défaut ou défini dans ~/.inputrc).
pause jusqu'à nouvel ordre.
"bind -v | grep tilde" renvoie "set expand-tilde off" ... donc je ne pense pas que cela aidera.
Johan
Vous pourriez jeter un oeil à shopt -p direxpand.
gam3

Réponses:

10

Désactiver l'expansion de tilde est rapide et indolore. Ouvrez ~/.bashrcet insérez ceci:

_expand()
{
    return 0;
}

Cela remplacera la fonction d'expansion de /etc/bash_completion. Je recommanderais de commenter ce qu'il fait au-dessus de la fonction au cas où vous souhaiteriez l'extension à l'avenir. Les modifications prendront effet dans une nouvelle instance.

John T
la source
mais _expand(){ true; }est plus court :)
tig
ne serait-ce pas _expand(){ false; }? @tig
John T
2
@John: non, cela devrait être vrai. truerenvoie un résultat réussi et un résultat réussi est 0, return 0est donc égal à truedans l'état de sortie et return 1est égal à false. essayez true; echo $?et false; echo $?.
tig
@tig trop de programmation m'a confondu ... codepad.org/Frb3RyAN De même, vous le trouvez dans beaucoup de code (voir en haut): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf Je suppose qu'il est activé dans les outils GNU pour indiquer une signification plus réaliste, c'est-à-dire "Vrai, le programme s'est déroulé avec succès" ou "faux - le programme s'est mal exécuté".
John T
@John: c'est ok :), «Même John T peut se tromper» (ne soyez pas offensé :))
tig
5

Avec la nouvelle bash_completion, il semble que vous devez également remplacer __expand_tilde_by_ref:

__expand_tilde_by_ref() {
  return 0
}
mjmt
la source
1

Encore plus compact:

_expand() { :; }

... as ":" est un shell intégré équivalent à "true" :-)

Joe
la source
1

Une personnalisation plus précise serait

_filedir_xspec () { :; }
Alexander Shcheblikin
la source