77

Есть ли способ расширить псевдонимы, встроенные в Bash?

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 

4 ответа4

95

Вы можете нажать Ctrl - Alt - e, чтобы выполнить функцию readline shell-expand-line которая будет выполнять псевдоним, историю и расширения слов. Обратите внимание, что на некоторых клавиатурах Meta не является Alt. Возможно, вам придется нажать Esc, затем Ctrl - e

Функции alias-expand-line и history-and-alias-expand-line не связаны по умолчанию, но вы можете связать их, добавив строки, подобные приведенным ниже, в ваш файл ~/.inputrc .

"\e\C-l": alias-expand-line

что заставило бы Ctrl- Alt- l (нижний регистр "ell") выполнять только раскрытие псевдонима.

2

На самом деле это может быть гораздо более простой способ сделать то, что вы пытаетесь сделать (bash version> = 4.2.29):

shopt -s direxpand
shopt -s expand_aliases

страница shopt man «S: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html

0

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

_ll()
{
     COMPREPLY=(ls -l)
     #The next line does not work. I just hope there were a way to replace that word
     COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll

Теперь поставьте полный файл bash_completion (http://caliban.org/bash) и поместите вышеупомянутый скрипт в файл внутри директории bash_completion.d, который скрипт получит из ссылок url. Дайте мне знать, если это не сработает.

Благодарю.

0

Для тех, кто установил zsh и ищет простое решение, globalias может быть вашим другом

Расширяет все глобальные выражения, подкоманды и псевдонимы (включая глобальные).

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl

для установки просто добавьте "globalias" в список плагинов .zshrc

plugins=(... globalias)

Затем просто нажмите SPACE чтобы запустить расширение команды, которую вы написали.

Если вы хотите вставить только пробел без расширения командной строки, нажмите CTRL+SPACE

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .