更新済み(2020年3月2日)

更新済み(2020年3月2日)

likeで+を使ってCtrl単語を削除したいです。Wzsh

vim /foo/bar^W
vim /foo/

解決策が見つかりましbashたが、bindzsh機能では見つかりませんでした。

ctrl-w(単語の削除)を設定できますか?

Ctrl+Wをで構成する方法はdelete-word

答え1

これはの一部です。.zshrc私は以下を使用してきました:

my-backward-delete-word() {
    local WORDCHARS=${WORDCHARS/\//}
    zle backward-delete-word
}
zle -N my-backward-delete-word
bindkey '^W' my-backward-delete-word

元のソースはこれであったと思います。 http://www.zsh.org/mla/users/2001/msg00870.html

答え2

ちなみにこのソリューションを見つけました。ここよりエレガントになります。私は引用する:

WORDCHARS別のオプションは、(英数字以外の文字は単語の一部と見なされます)を含めないように設定することです/

^wドット、アンダースコアなどを分離したい場合でも、この設定を調整できます。私は~/.zshrc以下を持っています:

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

更新済み(2020年3月2日)

@Patrykが以下のコメントで指摘したように、これは機能しませんZSH >= 5.7。これは私がテストして作業しているアップデートですzsh 5.8 (x86_64-apple-darwin18.7.0)

autoload -U select-word-style
select-word-style bash

export WORDCHARS='.-'

答え3

これまでbashのすべての属性を提供する答えはありません。今すぐ:

  • CTRL-w は、空白以外の文字をすべて削除します。
  • CTRL-wはテキストを終了ループに入れます(それで後でCTRL-yで貼り付けることができます)。
  • CTRL-w追加後続の終了コマンド(CTRL-w、alt-backspace、alt-dなど)でループを終了するためのテキストです。

また、他の機能に影響を与えるため、WORDCHARSをグローバルに設定したくありません。

上記のすべてを満たすソリューションは次のとおりです。

        # Ctrl-w - delete a full WORD (including colon, dot, comma, quotes...)
        my-backward-kill-word () {
            # Add colon, comma, single/double quotes to word chars
            local WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>:,"'"'"
            zle -f kill # Append to the kill ring on subsequent kills.
            zle backward-kill-word
        }
        zle -N my-backward-kill-word
        bindkey '^w' my-backward-kill-word

関連情報