likeで+を使ってCtrl単語を削除したいです。Wzsh
vim /foo/bar^W
vim /foo/
解決策が見つかりましbash
たが、bind
zsh機能では見つかりませんでした。
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