0

有没有办法在 bash 或 zsh 中使用 tab 键来触发片段,例如 Sublime Text 呢?

例如,如果我配置了x应该扩展为~/projects/one/two/x/,那么:

$ cd x[TAB]

会变成

$ cd ~/projects/one/two/x/
4

1 回答 1

2

实际上,这在 zsh 中很容易。

首先,您需要一个 shell 函数,如果满足条件(这里,如果 zle 特殊变量$LBUFFER- 即 zle 缓冲区中当前位置左侧的内容 - 是x) 并回退到常规完成否则:

expandSnippetOrComplete() {
    [[ $LBUFFER = x ]] && LBUFFER=~/projects/one/two/x/ || zle expand-or-complete
}

其次,你必须使这个 shell 函数成为一个 zle 小部件,即一个可以在 zle 中而不是从命令行调用的函数。

zle -N expandSnippetOrComplete

第三,您必须将此小部件绑定到 tab 键:

bindkey "^i" expandSnippetOrComplete

而已!

现在,如果 zle 缓冲区中当前位置之前的最后一个单词是 ,您可能想要这样做x,无论它是否在开头。如果是这样,那么这应该可以解决问题:

local ALBUFFER
ALBUFFER=($=LBUFFER) # split $LBUFFER on $IFS, put the resulting in $ALBUFFER
[[ $ALBUFFER[-1] = x ]] && LBUFFER[-1]=~/projects/one/two/x/ || zle expand-or-complete
于 2015-04-02T13:36:52.220 回答