2012-06-01 8 views
11

zsh forward-wordはbash/emacsとは少し違って動作するので、変更したいと思います。zsh forward-wordの動作をbash/emacsと同じようにするには

すべての相違点の説明の代わりに、bashの段階的な動作を説明します。カーソルを「^」記号としてマークしました。

foo bar --non-needed-param --needed-param^ 

M-B

foo bar --non-needed-param --needed-^param 

M-B

foo bar --non-needed-param --^needed-param 

M-B

foo bar --non-needed-^param --needed-param 

M-B

foo bar --non-^needed-param --needed-param 

M-B

foo bar --^non-needed-param --needed-param 

M-B

foo ^bar --non-needed-param --needed-param 

M-F

foo bar^ --non-needed-param --needed-param 

M-D

foo bar^-needed-param --needed-param 

M-D

foo bar^-param --needed-param 

M-D

foo bar^ --needed-param 

このアルゴリズムは、単語を移動する私のためにそれらの部分を除去するための柔軟でもあります。また、それはemacsにあるので、私はそれに慣れています。私はzshでもそれを見たいと思います。ありがとう。私はまさにその目的のために、私の.zshrcでこれを持って

答えて

12

# Bash-like navigation 
autoload -U select-word-style 
select-word-style bash 

編集:ああ、私は私が望んでいたとして、すべてが働いて得るために欠けていたものを覚えています。また、私は(あなたの$ZDOTDIR/functionsディレクトリを仮定すると、$fpathであり、そうでないものにそれを置くかだけでなく$fpath配列を変更)$ZDOTDIR/functions/forward-word-matchに以下の内容を置くことによってforward-word-matchを上書き:

emulate -L zsh 
setopt extendedglob 

autoload match-words-by-style 

local curcontext=":zle:$WIDGET" word 
local -a matched_words 
integer count=${NUMERIC:-1} 

if ((count < 0)); then 
    ((NUMERIC = -count)) 
    zle ${WIDGET/forward/backward} 
    return 
fi 

while ((count--)); do 

    match-words-by-style 

    # For some reason forward-word doesn't work like the other word 
    # commands; it skips whitespace only after any matched word 
    # characters. 

    if [[ -n $matched_words[4] ]]; then 
     # just skip the whitespace and the following word 
    word=$matched_words[4]$matched_words[5] 
    else 
     # skip the word but not the trailing whitespace 
    word=$matched_words[5] 
    fi 

    if [[ -n $word ]]; then 
    ((CURSOR += ${#word})) 
    else 
    return 1 
    fi 
done 

return 0 
+0

感謝を!しかし、実際にはbashとは違った働きをしています(何か間違っていましたか?)。この状況では、 "fo^ooo --bar"、 "Mf"を押すと、すぐにfooooの終わりに行くはずです: "foooo^--bar"、しかし私があなたが示したように有効にしました。これに行く: "foooo -^bar"。実際にこのプラグインのように見えるのは、WORDCHARS = ''をエクスポートするだけです。 –

+0

私の完全なzsh設定は、あなたが望むように動作します - 私は私が私の答えで述べた以上の何かをやったと思います。私のWORDCHARSは実際にはどこに設定されているのかわかりませんが、かなり多くの文字が含まれています:$ WORDCHARSは '*?_-。[]〜= /&;!#$%^(){}'> –

+0

、それが動作するようにしたことを思い出し、それに従って私の答えを更新しました。 –

関連する問題