¿Cómo definir un alias en la concha de pescado?

204

Me gustaría definir algunos alias en peces. Aparentemente debería ser posible definirlos en

~/.config/fish/functions

pero no se cargan automáticamente cuando reinicio el shell. ¿Algunas ideas?

Armandino
fuente
La respuesta a continuación con solo un par de votos es, en mi opinión, correcta. La carga automática en ./config/fish/functions solo parece funcionar si hay una función por archivo.
mc_electron

Respuestas:

360

Solo úsalo alias. Aquí hay un ejemplo básico:

# 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

Este último comando crea el archivo ~/.config/fish/functions/rmi.fish.

A las personas interesadas les gustaría obtener más información sobre alias de peces en el manual oficial .

Bozhidar Batsov
fuente
3
También tenga en cuenta que en fish un alias es solo un contenedor shellscript alrededor de una función.
user456584
@ user456584 ... y eso es malo, porque no puedes hacerlo alias local "set -l";-(
13
Solo una nota de en qué archivo poner esto. Puse el mío ~/.config/fish/config.fishpara que se cargue cada vez que ejecuto un terminal.
Ira Herman
¿No necesitamos citar "$argv"para manejar argumentos con espacios como lo hacemos con bash "$@"?
kyb
@kyb, no, el pescado es más inteligente que una fiesta como esa. En realidad, TODAS las variables en peces son matrices. Vaya a las variables de Shell y desplácese hacia abajo hasta la subsección Arrays
glenn jackman
117

Así es como defino una nueva función foo, la ejecuto y la guardo de forma persistente.

sthorne@pearl~> function foo
                    echo 'foo was here'
                end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo
Jerub
fuente
Gracias Jerub Por alguna razón después de funcsave me dio un error: troff: error fatal: no se puede abrir `/usr/share/fish/man/save_function.1 ': No
existe
77
También puede editar funciones usando funced. Por ej funced foo.
Dennis
14
Correr funcsave {some_function_name}lo guardará en~/.config/fish/functions/{some_function_name}.fish
Hjulle
55

Para la posteridad, los alias de peces son solo funciones:

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

Para eliminarlo

$ unalias foo
/usr/bin/unalias: line 2: unalias: foo: not found
$ functions -e foo
$ type foo
type: Could not find foo
Glenn Jackman
fuente
9
Después de crear la función, puede hacer funcsave foo. Esto guardará la función ~/.config/fish/functions/foo.fish, donde fish la cargará automáticamente la primera vez que se llame desde una nueva sesión.
Lucretiel
1
alias foo="echo bar"fue, con mucho, la solución más fácil
Ronnie el
16
  1. si no hay config.fish en ~ / .config / fish / , hágalo .
  2. allí puedes escribir tu función.function name; command; end
Seaslee
fuente
15

Guarde sus archivos como ~/.config/fish/functions/{some_function_name}.fishy deberían cargarse automáticamente cuando comience a pescar.

martisj
fuente
14

fish comienza ejecutando comandos en ~ / .config / fish / config.fish. Puede crearlo si no existe:

vim ~ / .config / fish / config.fish

y guardarlo con :wq

paso 1. crear un archivo de configuración (como .bashrc)

config.fish

paso 2. solo escribe tu alias así;

alias rm = "rm -i"

CookAtRice
fuente
11

Para cargar correctamente las funciones desde ~ / .config / fish / functions

Puede establecer solo UNA función dentro del archivo y el mismo nombre que el nombre de la función + agregar extensión .fish.

De esta forma, el cambio del contenido del archivo vuelve a cargar las funciones en los terminales abiertos (tenga en cuenta que puede producirse un retraso ~ 1-5s)

De esa manera, si edita ya sea por línea de comando

function name; function_content; end

luego

funcsave name

tiene funciones definidas por el usuario en la consola y personalizadas en el mismo orden.

pawelkl
fuente
0

hacer una función en ~ / .config / fish / funciones llamada mkalias.fish y poner esto en

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

y esto creará alias automáticamente.

Miguel
fuente