代码之家  ›  专栏  ›  技术社区  ›  Frantic

shell中的制表符触发的代码段

  •  0
  • Frantic  · 技术社区  · 11 年前

    有没有一种方法可以在bash或zsh中使用tab键来触发代码段,比如Sublime Text?

    例如,如果我配置了 x 应扩展到 ~/projects/one/two/x/ ,因此:

    $ cd x[TAB]
    

    会变成

    $ cd ~/projects/one/two/x/
    
    1 回复  |  直到 11 年前
        1
  •  2
  •   Arkanosis    11 年前

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

    首先,需要一个shell函数,如果满足条件(这里,如果zle特殊变量 $LBUFFER 也就是说,在拼图缓冲区中当前位置的左侧是 x )否则,返回到正常完成:

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

    第二,你必须使这个shell函数成为一个zzle小部件,也就是说,一个可以在zzle中而不是从命令行调用的函数。

    zle -N expandSnippetOrComplete
    

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

    bindkey "^i" expandSnippetOrComplete
    

    就是这样!

    现在,如果zle缓冲区中当前位置之前的最后一个单词是 x(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
    
    推荐文章