Comment définir un alias en coquille de poisson?


204

Je voudrais définir quelques alias dans le poisson. Apparemment, il devrait être possible de les définir

~/.config/fish/functions

mais ils ne sont pas chargés automatiquement lorsque je redémarre le shell. Des idées?


La réponse ci-dessous avec seulement quelques votes est, à mon avis, correcte. Le chargement automatique dans ./config/fish/functions ne semble fonctionner que s'il y a une fonction par fichier.
mc_electron

Réponses:


360

Utilisez simplement alias. Voici un exemple de base:

# Define alias in shell
alias rmi "rm -i"

# Define alias in config file
alias rmi="rm -i"

# This is equivalent to entering the following function:
function rmi
    rm -i $argv
end

# Then, to save it across terminal sessions:
funcsave rmi

Cette dernière commande crée le fichier ~/.config/fish/functions/rmi.fish.

Les personnes intéressées aimeraient en savoir plus sur les alias de poisson dans le manuel officiel .


3
Notez également que dans fish, un alias n'est qu'un wrapper shellscript autour d'une fonction.
user456584

@ user456584 ... et c'est dommage, parce que vous ne pouvez pas faire alias local "set -l";-(

13
Juste une note du fichier dans lequel mettre ceci. J'ai mis le mien ~/.config/fish/config.fishpour qu'il se charge à chaque fois que je lance un terminal.
Ira Herman

N'avons-nous pas besoin de citer "$argv"pour gérer les arguments avec des espaces comme nous le faisons avec bash "$@"?
kyb du

@kyb, non, le poisson est plus intelligent que bash comme ça. En fait, TOUTES les variables des poissons sont des tableaux. Accédez aux variables Shell et
faites

117

Voici comment définir une nouvelle fonction foo, l'exécuter et l'enregistrer de manière persistante.

sthorne@pearl~> function foo
                    echo 'foo was here'
                end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo

Merci Jerub. Pour une raison quelconque, après funcsave, il m'a donné une erreur: troff: erreur fatale: impossible d'ouvrir `/usr/share/fish/man/save_function.1 ': Aucun fichier ou répertoire de ce type
armandino

7
Vous pouvez également modifier des fonctions à l'aide de funced. Par exemple funced foo.
Dennis

14
La course funcsave {some_function_name}l'enregistrera~/.config/fish/functions/{some_function_name}.fish
Hjulle

55

Pour la postérité, les alias de poisson ne sont que des fonctions:

$ alias foo="echo bar"
$ type foo
foo is a function with definition
function foo
    echo bar $argv; 
end

Pour le retirer

$ unalias foo
/usr/bin/unalias: line 2: unalias: foo: not found
$ functions -e foo
$ type foo
type: Could not find foo

9
Après avoir créé la fonction, vous pouvez le faire funcsave foo. Cela enregistrera la fonction dans ~/.config/fish/functions/foo.fishlaquelle le poisson la chargera automatiquement la première fois qu'il sera appelé depuis une nouvelle session.
Lucretiel

1
alias foo="echo bar"était de loin la solution la plus simple
Ronnie

16
  1. s'il n'y a pas config.fish dans ~ / .config / fish / , faites-le.
  2. là, vous pouvez écrire votre fonction.function name; command; end

15

Enregistrez vos fichiers sous ~/.config/fish/functions/{some_function_name}.fishet ils devraient être chargés automatiquement lorsque vous démarrez fish.


15

fish commence par exécuter des commandes dans ~ / .config / fish / config.fish. Vous pouvez le créer s'il n'existe pas:

vim ~ / .config / fish / config.fish

et enregistrez-le avec :wq

étape 1. créer un fichier de configuration (comme .bashrc)

config.fish

étape 2. écrivez simplement votre alias comme ceci;

alias rm = "rm -i"



11

Pour charger correctement les fonctions à partir de ~ / .config / fish / functions

Vous pouvez définir seulement UNE fonction dans le fichier et le nom même que le nom de la fonction + ajouter l' extension .fish.

De cette façon, les fonctions de rechargement du contenu des fichiers dans les terminaux ouverts (notez qu'un certain retard peut se produire ~ 1-5s)

De cette façon, si vous modifiez soit par ligne de commande

function name; function_content; end

puis

funcsave name

vous avez des fonctions définies par l'utilisateur dans la console et personnalisées dans le même ordre.


0

faire une fonction dans ~ / .config / fish / fonctions appelée mkalias.fish et la mettre dans

function mkalias --argument key value
  echo alias $key=$value
  alias $key=$value
  funcsave $key
end

et cela créera automatiquement des alias.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.