Как определить псевдоним в раковине рыбы?

204

Я хотел бы определить некоторые псевдонимы в рыбе. По-видимому, должно быть возможно определить их в

~/.config/fish/functions

но они не загружаются автоматически, когда я перезагружаю оболочку. Любые идеи?

armandino
источник
На мой взгляд, правильный ответ с парой голосов ниже. Автозагрузка в ./config/fish/functions, кажется, работает, только если в файле есть одна функция.
mc_electron

Ответы:

360

Просто используйте alias. Вот основной пример:

# 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

Эта последняя команда создает файл ~/.config/fish/functions/rmi.fish.

Заинтересованные люди могут узнать больше о псевдонимах рыб в официальном руководстве .

Божидар Бацов
источник
3
Также обратите внимание, что в рыбах псевдоним - это просто оболочка-оболочка для функции.
user456584
@ user456584 ... и что невозврат, потому что вы не можете сделать alias local "set -l";-(
13
Просто запишите, в какой файл это вставить. Я вставил свой, ~/.config/fish/config.fishчтобы он загружался при каждом запуске терминала.
Ира Герман
Разве нам не нужно заключать в кавычки "$argv"аргументы с пробелами, как мы это делаем с bash "$@"?
KYB
@ kyb, нет, рыба умнее, чем Баш. На самом деле, ВСЕ переменные в рыбе - это массивы. Перейдите к переменным Shell и прокрутите вниз до подраздела Arrays
Гленн Джекман
117

Вот как я определяю новую функцию foo, запускаю ее и сохраняю постоянно.

sthorne@pearl~> function foo
                    echo 'foo was here'
                end
sthorne@pearl~> foo
foo was here
sthorne@pearl~> funcsave foo
Jerub
источник
Спасибо Иеруб. По какой-то причине после funcsave он выдал ошибку: troff: фатальная ошибка: не могу открыть `/usr/share/fish/man/save_function.1 ': такого файла или каталога нет
armandino
7
Вы также можете редактировать функции, используя funced. Например funced foo.
Деннис
14
Бег funcsave {some_function_name}спасет его~/.config/fish/functions/{some_function_name}.fish
Hjulle
55

Для потомков псевдонимы рыб - это просто функции:

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

Удалить его

$ unalias foo
/usr/bin/unalias: line 2: unalias: foo: not found
$ functions -e foo
$ type foo
type: Could not find foo
Гленн Джекман
источник
9
После того как вы создали функцию, вы можете сделать funcsave foo. Это сохранит функцию, в которую ~/.config/fish/functions/foo.fishрыба автоматически загрузит ее при первом вызове из нового сеанса.
Лукретиэль
1
alias foo="echo bar"было безусловно самым простым решением
Ронни
16
  1. если в ~ / .config / fish / нет файла config.fish , сделайте это.
  2. там вы можете написать свою функцию.function name; command; end
seaslee
источник
15

Сохраните ваши файлы как, ~/.config/fish/functions/{some_function_name}.fishи они должны автоматически загружаться при запуске рыбы.

martisj
источник
15

fish начинается с выполнения команд в ~ / .config / fish / config.fish. Вы можете создать его, если он не существует:

vim ~ / .config / fish / config.fish

и сохранить его с :wq

шаг 1. сделать файл конфигурации (например, .bashrc)

config.fish

шаг 2. просто напишите свой псевдоним вот так;

псевдоним rm = "rm -i"

CookAtRice
источник
13

Если вы добавите abbrвместо, aliasвы получите лучшее автозаполнение. У рыб abbrболее близко совпадает поведение bash с псевдонимом.

abbr -a gco git checkout

Будет -aдд новое abbrуклонение, gcoкоторое распространяется на git checkout.

Вот видео демонстрация полученных функций автозаполнения

Тобиас Мюль
источник
12

Чтобы правильно загрузить функции из ~ / .config / fish / functions

Вы можете установить только ОДИН функции внутри файла и имя файла , так же , как имя функции + добавить .fish расширение.

Таким образом, изменение функций загрузки содержимого файла в открытых терминалах (обратите внимание, что может произойти некоторая задержка ~ 1-5 с)

Таким образом, если вы редактируете либо с помощью командной строки

function name; function_content; end

затем

funcsave name

у вас есть пользовательские функции в консоли и на заказ в том же порядке.

pawelkl
источник
0

создайте функцию в ~ / .config / fish / functions с именем mkalias.fish и поместите ее в

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

и это создаст псевдонимы автоматически.

Майк
источник