Привязка ключа к go вверх на один каталог (в Bash) - PullRequest
1 голос
/ 07 апреля 2020

В Zsh у меня есть привязка ключа к go на один каталог (очень полезно):

# C-M-u: up-directory
up-directory() {
    builtin cd .. && zle reset-prompt
}
zle -N up-directory
bindkey '\e\C-u' up-directory

Это очень приятно. Так приятно, что я хотел бы получить это и в моей Bash конфигурации.

Как мы можем это сделать?

1 Ответ

0 голосов
/ 07 апреля 2020

Вы можете сделать это. Это не так элегантно или просто, как в zsh, но это возможно в bash с использованием bind.
. Вы можете не только связывать встроенные функции Readline (перечисленные в bind -l), но и другие макросы и функции оболочки. .

bind -m emacs -x '"\C-i":"cd .."' свяжет команду оболочки (cd ..) с клавишами ( Ctrl + i ) в режиме emacs (режим по умолчанию). (Ctrl + i не связан по умолчанию, а вы - нет)

Обратите внимание, что ваш запрос, вероятно, не будет отражать изменения.
Если вы пропустите -x, вместо этого будет напечатана строка, поэтому "cd ..\n" достигнет того же результата.

Редактировать : bind - это то, как вы связываете ключи, и макросы могут выполнить sh то, что вы хотите, даже если встроенных элементов не существует.

Если вы закончите PS1 запрашивает \033[K (стереть в eol) и может использовать
bind -m emacs '"\C-i":" cd ..&&echo -e \"\\033[2A\"\n"', чтобы сделать то, что вы хотите.
Сначала будет напечатано cd .., а затем символы управления, чтобы переместить курсор вверх и запустить его (с помощью *). 1029 *). Конец вашего PS1 не дает ему показываться. Это является взломом, но это показывает, что это выполнимо.

...