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?

armandino
la source
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 .

Bozhidar Batsov
la source
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
Jerub
la source
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
glenn jackman
la source
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
Seaslee
la source
15

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

martisj
la source
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"

CookAtRice
la source
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.

pawelkl
la source
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.

Mike
la source