1

カーソルが区切り文字で止まるように、の代わりにvi-styleなどの単語の動きを好みます。ただし、この場合も尊重するか、何らかの方法で区切り文字を定義したいと思います。これはどういうわけか可能ですか?区切り文字を使用することも、区切り文字で停止する動きを使用することもできるようですが、両方を使用することはできません。vi-forward-wordforward-wordzshWORDCHARSzshvi-style

たとえば、私の行が次の場合:

% ls -la /foo/bar/f-b/r

次に、単語ごとに前進し始めると、、、、、、、、、、で停止/します。foo/bar/f-b/r

私からの関連行.zshrc

WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'  # removed /

autoload select-word-style                                                                                                                             
select-word-style normal

bindkey '^W'     vi-backward-kill-word
bindkey '^f'     vi-forward-word
bindkey '^b'     vi-backward-word
4

1 に答える 1

1

結局、私は自分のzleウィジェットを実装しただけです。

SEPCHARS='[/ ]'

my-forward-word() {
    if [[ "${BUFFER[CURSOR + 1]}" =~ "${SEPCHARS}" ]]; then
        (( CURSOR += 1 ))
        return
    fi
    while [[ CURSOR -lt "${#BUFFER}" && ! "${BUFFER[CURSOR + 1]}" =~ "${SEPCHARS}" ]]; do
        (( CURSOR += 1 ))
    done
}

zle -N my-forward-word
bindkey '^f' my-forward-word

my-backward-word() {
    if [[ "${BUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; then
        (( CURSOR -= 1 ))
        return
    fi
    while [[ CURSOR -gt 0 && ! "${BUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; do
        (( CURSOR -= 1 ))
    done
}

zle -N my-backward-word
bindkey '^b' my-backward-word

my-backward-kill-word() {
    if [[ "${LBUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; then
        LBUFFER="${LBUFFER[1, CURSOR - 1]}"
        return
    fi
    while [[ CURSOR -gt 0 && ! "${LBUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; do
            LBUFFER="${LBUFFER[1, CURSOR - 1]}"
    done
}

zle -N my-backward-kill-word
bindkey '^W' my-backward-kill-word
于 2013-02-25T13:25:45.230 に答える