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

Вопрос или проблема

В bash вы можете развернуть алиас, который вы вводите. Например, если у меня есть алиас cmd="cd ~/user", то ввод cmd и нажатие Ctrl+Alt+e изменит его на cd ~/user. Есть ли способ сделать это в fish?

В fish команда alias просто создает тривиальную функцию. Например,

alias cmd 'cd ~/user'

это всего лишь сокращение для

function cmd
  cd ~/user
end

Поскольку это функция в fish, вы не можете развернуть тело команды в командной строке, когда вводите алиас. Для вашей ситуации я рекомендую использовать сокращение; например, abbr cmd 'cd ~/user'.

Поскольку это функция, вы также можете использовать functions, чтобы развернуть функции алиаса.

functions [вашалиас]

например.

$ alias ll="ls -l"
$ functions ll
# Определено через `source`
function ll --wraps=ls --wraps="ls -l" --description 'alias ll=ls -l'
  ls -l $argv
end

Ответ или решение

В оболочке Fish создание псевдонимов осуществляется с помощью команды alias, которая фактически создает тривиальную функцию. Например, команда:

alias cmd 'cd ~/user'

на самом деле эквивалентна следующему определению функции:

function cmd
  cd ~/user
end

Из-за того, что псевдонимы в Fish реализуются как функции, вы не можете расширить тело команды при вводе псевдонима на командной строке, как это делается в Bash. Однако для вашей ситуации я рекомендую использовать сокращения, которые позволяют добиться желаемого результата.

Вы можете создать сокращение с помощью команды abbr, например:

abbr cmd 'cd ~/user'

После этого, когда вы наберете cmd и нажмете клавишу Tab, Fish покажет соответствующую команду, и вы можете использовать её.

Если вам нужно получить информацию о теле функции, связанной с вашим псевдонимом, вы можете воспользоваться командой functions. Например, если у вас определен псевдоним ll как:

alias ll='ls -l'

Вы можете узнать его определение, выполнив:

functions ll

В результате получите что-то вроде:

# Defined via `source`
function ll --wraps=ls --wraps="ls -l" --description 'alias ll=ls -l'
  ls -l $argv
end

Таким образом, используя функции и сокращения, вы сможете эффективно управлять своими командами и получать информацию о них в Fish.

Если вам необходима более детальная информация о функции, вы также можете использовать functions --all, чтобы получить список всех определенных функций и их содержимого в текущем сеансе.

Этот подход позволяет вам по-прежнему обладать значительной гибкостью и контролем над вашими командами в Fish, несмотря на отсутствие прямой возможности развертывания псевдонимов, как в Bash.

Оцените материал
Добавить комментарий

Капча загружается...