Команда functions
в оболочке Fish используется для управления функциями Fish и взаимодействия с ними. Она позволяет просматривать, редактировать, удалять и даже сохранять функции. В этой статье мы узнаем, как управлять функциями в оболочке Fish на примере Linux.
functions
?В оболочке Fish команда functions
— это блоки многократно используемого кода, которые вы можете определять и вызывать по имени. Команда functions
— это встроенная утилита, которая помогает управлять этими функциями. Вы можете использовать её для:
functions
?
Есть два способа определить новую функцию. Вы можете либо напрямую определить её в файле конфигурации fish (~/.config/fish/config.fish
), либо определить её в отдельном файле в пользовательском каталоге (например, ~/.config/fish/functions/
).
Ключевое различие между определением функции в ~/.config/fish/config.fish
и её сохранением в ~/.config/fish/functions/
заключается в том, как Fish обрабатывает загрузку и выполнение функций.
config.fish
Когда вы добавляете функцию непосредственно внутрь ~/.config/fish/config.fish
, она запускается каждый раз, когда запускается новая оболочка Fish.
Пример:
function cdls # Перейдите в указанный каталог builtin cd $argv[1] and begin # Вывод содержимого каталога с тайм-аутом в 1 секунду echo "Changed to directory: $PWD" timeout 1s ls -l end end
Плюсы:
Минусы:
config.fish
, это может привести к загромождению.exec fish
или заново открыть терминал).config.fish
содержит много функций.
Когда вы используете funcsave function_name
или вручную создаёте файл в ~/.config/fish/functions/
, Fish автоматически загружает функцию при необходимости.
Сначала создайте функцию в вашем текущем сеансе Fish:
function cdls # Перейдите в указанный каталог builtin cd $argv[1] and begin # Вывод содержимого каталога с тайм-аутом в 1 секунду echo "Changed to directory: $PWD" timeout 1s ls -l end end
На этом этапе функция будет работать в вашем сеансе, но исчезнет при перезапуске Fish.
Чтобы сохранить определенную функцию навсегда, мы можем использовать команду funcsave
.
funcsave cdls
Это сохраняет cdls
в ~/.config/fish/functions/cdls.fish
, содержащий:
function cdls # Перейдите в указанный каталог builtin cd $argv[1] and begin # Вывод содержимого каталога с тайм-аутом в 1 секунду echo "Changed to directory: $PWD" timeout 1s ls -l end end
Плюсы:
.fish
файл без редактирования config.fish
.
Минусы:
funcsave function_name
или вручную создать .fish
файл).
config.fish
без проблем.~/.config/fish/functions/
для удобства и повышения производительности.
Чтобы просмотреть список всех функций, определённых в вашей оболочке Fish, используйте:
functions
Здесь будут отображаться названия всех функций, включая встроенные и созданные вами пользовательские.
Пример вывода:
N_, abbr, alias, bg, cd, cdh, cdls, contains_seq, delete-or-exit, diff, dirh, dirs, disown, down-or-search, edit_command_buffer, export, fg, fish_add_path, fish_breakpoint_prompt, fish_clipboard_copy, fish_clipboard_paste, fish_command_not_found, fish_commandline_append, fish_commandline_prepend, fish_config, fish_default_key_bindings, fish_default_mode_prompt, fish_git_prompt, fish_greeting, fish_hg_prompt, fish_hybrid_key_bindings, fish_indent, fish_is_root_user, fish_job_summary, fish_key_reader, fish_mode_prompt, fish_opt, fish_print_git_action, fish_print_hg_root, fish_prompt, fish_sigtrap_handler, fish_status_to_signal, fish_svn_prompt, fish_title, fish_update_completions, fish_vcs_prompt, fish_vi_cursor, fish_vi_key_bindings, funced, funcsave, grep, help, history, isatty, kill, la, ll, ls, man, nextd, nextd-or-forward-word, open, popd, prevd, prevd-or-backward-word, prompt_hostname, prompt_login, prompt_pwd, psub, pushd, realpath, seq, setenv, suspend, trap, umask, up-or-search, vared, wait
Чтобы просмотреть код определенной функции, используйте:
functions <function_name>
Например, чтобы увидеть код для функции cdls
:
functions cdls
При этом будет выведено полное определение функции cd
.
function cdls # Перейдите в указанный каталог builtin cd $argv[1] and begin # Вывод содержимого каталога с тайм-аутом в 1 секунду echo "Changed to directory: $PWD" timeout 1s ls -l end end
Вы можете отредактировать функцию непосредственно в текстовом редакторе по умолчанию, используя:
funced <function_name>
Например, для редактирования функции cd
:
funced cdls
Это откроет функцию в вашем редакторе (например, nano
или vim
), и вы сможете её изменить. После сохранения и выхода изменения вступят в силу немедленно.
Это ТО ЖЕ самое, что создавать новые функции с помощью команды funcsave
.
Сначала определите функцию в текущем сеансе.
Если вы хотите сохранить определение функции в файле, используйте:
functions <function_name> > filename.fish
Например, чтобы сохранить cdls
функцию в файл:
functions cdls > ~/.config/fish/functions/cdls.fish
Это полезно для резервного копирования или совместного использования функций.
Вы можете скопировать существующую функцию под новым именем, используя -c
или --copy
:
functions --copy <old_function_name> <new_function_name>
Например, чтобы скопировать cd
функцию в новую функцию, вызываемую mycd
:
functions --copy cd mycd
Теперь вы можете изменять mycd
, не затрагивая исходную cd
функцию.
Чтобы удалить функцию из текущего сеанса, используйте флаг -e
или --erase
:
functions --erase <function_name>
Например, чтобы удалить пользовательскую функцию cdls
:
functions --erase cdls
Это удаляет cdls
, но не влияет на постоянные функции, сохранённые в config.fish
или в каталоге ~/.config/fish/functions/
.
Чтобы навсегда удалить функцию, откройте файл конфигурации fish и закомментируйте или удалите всю функцию.
После удаления функции перезагрузите fish, чтобы применить изменения:
exec fish
Или перезагрузите свой терминал.
Если вы сохранили функцию с помощью funcsave
или создали её вручную, Fish сохранит её в ~/.config/fish/functions/
.
Чтобы удалить его навсегда, просто удалите файл функции:
rm ~/.config/fish/functions/function_name.fish
Пример:
rm ~/.config/fish/функции/cdls.fish
А затем перезагрузите fish или перезапустите терминал.
Команда | Описание |
---|---|
functions | Перечислите все функции. |
functions <function_name> | Отобразите код определенной функции. |
funced <function_name> | Отредактируйте функцию в текстовом редакторе по умолчанию. |
functions --erase <function_name> | Удалить функцию. |
functions --copy <old> <new> | Скопируйте функции новое имя. |
functions <name> > file.fish | Сохраните определение функции в файл. |
Команда functions
— обязательный инструмент для пользователей оболочки Fish. Она даёт вам полный контроль над средой оболочки и упрощает работу с функциями. Для получения более подробной информации обратитесь к разделу о функциях в официальной документации Fish Shell.