Zsh片段实现


2

有没有办法在zsh中实现可扩展的片段?

我希望能够编写ssh ssh_alias -t :tmux按Tab键,这将扩展为`ssh ssh_alias -t“tmux a || tmux”

我希望这种行为是全局的,因此这个代码片段可以在其他地方使用 mosh ssh_alias - :tmux

最后,我希望此行为超过特定于命令的完成规则。

在这一刻,我正在实现与'Dash'类似的东西


需要OS标签......
Moab

Answers:


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)或将其添加到completerzstyle。


好吧,我正在使用vi模式,是的,按下时没有显示Tab
2016年

1
在vi模式下,您可以在按下后按名称运行任何小部件:
Adaephon 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.