【问题标题】:How can I move the cursor after a Zsh abbreviation?如何在 Zsh 缩写后移动光标?
【发布时间】:2015-04-18 20:04:07
【问题描述】:

我在我的 .zshrc 文件中使用这个出色的脚本来完成 zsh 缩写: http://zshwiki.org/home/examples/zleiab

上面的效果很好。

这是我的问题:

如何修改这些缩写词或脚本以使光标位于缩写词的特定部分,而不是像这样结束:

 "ac"    "ack -C 5 {cursorHere} --ignore-dir=.build"¬

应缩写为:

ack -C 5  [cursor]  --ignore-dir=.build

【问题讨论】:

    标签: bash zsh zshrc oh-my-zsh zsh-completion


    【解决方案1】:

    将magic-abbrev-expand更新为

    magic-abbrev-expand() {
        local MATCH
        LBUFFER=${LBUFFER%%(#m)[_a-zA-Z0-9]#}
        command=${abbreviations[$MATCH]}
        LBUFFER+=${command:-$MATCH}
    
        if [[ "${command}" =~ "__CURSOR__" ]]
        then
            RBUFFER=${LBUFFER[(ws:__CURSOR__:)2]}
            LBUFFER=${LBUFFER[(ws:__CURSOR__:)1]}
        else
            zle self-insert
        fi
    }
    

    缩写将被设置为

    "ac"    "ack -C 5__CURSOR__--ignore-dir=.build"
    "Ii"    "Hello__CURSOR__! How are you"
    

    完整的脚本

    setopt extendedglob
    typeset -Ag abbreviations
    abbreviations=(
      "ac"    "ack -C 5__CURSOR__--ignore-dir=.build"
      "Ii"    "Hello__CURSOR__! How are you"
      "Im"    "| more"
      "Ia"    "| awk"
      "Ig"    "| grep"
      "Ieg"   "| egrep"
      "Iag"   "| agrep"
      "Igr"   "| groff -s -p -t -e -Tlatin1 -mandoc"
      "Ip"    "| $PAGER"
      "Ih"    "| head"
      "Ik"    "| keep"
      "It"    "| tail"
      "Is"    "| sort"
      "Iv"    "| ${VISUAL:-${EDITOR}}"
      "Iw"    "| wc"
      "Ix"    "| xargs"
    )
    
    magic-abbrev-expand() {
        local MATCH
        LBUFFER=${LBUFFER%%(#m)[_a-zA-Z0-9]#}
        command=${abbreviations[$MATCH]}
        LBUFFER+=${command:-$MATCH}
    
        if [[ "${command}" =~ "__CURSOR__" ]]
        then
            RBUFFER=${LBUFFER[(ws:__CURSOR__:)2]}
            LBUFFER=${LBUFFER[(ws:__CURSOR__:)1]}
        else
            zle self-insert
        fi
    }
    
    no-magic-abbrev-expand() {
      LBUFFER+=' '
    }
    
    zle -N magic-abbrev-expand
    zle -N no-magic-abbrev-expand
    bindkey " " magic-abbrev-expand
    bindkey "^x " no-magic-abbrev-expand
    bindkey -M isearch " " self-insert
    

    【讨论】:

    • 给我一个解析错误:.zshrc:258: parse error near ']]' from this line [[ $abbreviations[$MATCH] ]] && RBUFFER=${LBUFFER[(ws:__CURSOR__:)2]}
    • 请检查解析错误是来自第一个表达式还是来自第二个。它已经过测试并在我拥有的 zsh 版本中工作。如果它是您的 zsh 不支持的第二个表达式,则此解决方案根本不起作用。如果 is first,我们可以修改和使用不同的支持语法。
    • 第一个。当我删除以下错误时,[[ $abbreviations[$MATCH] ]]
    • PS:我正在通过 oh-my-zsh 版本运行 zsh zsh 5.0.5 (x86_64-apple-darwin14.0)
    • 完整文档位于zsh documentation。此脚本中使用的最相关部分是 parameter substitutionZsh-Line-Editor
    猜你喜欢
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2012-06-24
    • 1970-01-01
    相关资源
    最近更新 更多