2

Есть ли способ реализовать расширяемые фрагменты в Zsh?

Я хотел бы иметь возможность написать ssh ssh_alias -t :tmux press tab, и это будет расширено до `ssh ssh_alias -t" tmux a || tmux "

Я хочу, чтобы это поведение было глобальным, поэтому этот фрагмент будет работать в других местах, например, mosh ssh_alias - :tmux

Наконец, я хочу, чтобы это поведение превышало правила завершения для конкретной команды.

На данный момент я добиваюсь чего-то похожего с «Dash»

2 ответа2

2

Есть плагин: zsh-snippets. Используйте его с менеджером плагинов, например, zplugin. Связывает с Meta-x, проверял - работает. Вот полный zplugin отчет об этом:

Plugin report for willghatch/zsh-snippets
-----------------------------------------
Source snippets.plugin.zsh
Zle -N snippet-expand
Bindkey ^[x snippet-expand
Zle -N run-help-list-snippets

Functions created:
help-list-snippets run-help-list-snippets
snippet-add        snippet-expand

Variables added or redefined:
snippets  [ "" -> association ]
1

Вы можете попробовать использовать глобальные псевдонимы. В отличие от обычных псевдонимов, они раскрываются независимо от того, где они появляются в командной строке, а не только в командной позиции.

alias -g :tmux='"tmux a || tmux"'

При этом :tmux будет расширен (заменен на) "tmux a || tmux" . Обратите внимание, что вам нужно заключить его в кавычки дважды, один раз для определения и один раз для последней командной строки. Итак, если вы бежите

ssh ssh_alias -t :tmux

zsh заменит :tmux и выполнит

ssh ssh_alias -t "tmux a || tmux"

Обычно расширение не отображается при нажатии клавиши Tab - как при обычных псевдонимах. При этом виджет _expand_alias может использоваться для расширения псевдонимов. Вы можете вызвать его напрямую (в режиме emacs он связан с Ctrl+x, a. Привязка по умолчанию в режиме vi отсутствует, но вы можете запустить ее из режима vicmd с помощью :_expand_alias) или добавить ее в completer zstyle.

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