私は実際にこのような質問をしたことがあります。根そしてスタックオーバーフロー。私はVSCodeを使用しており、良い動作をしています。Alt行末で+を実行すると、次の場所で停止します。→
foo/bar/test_wait_what
^ ^ ^ ^
Delete+をすると、、、などがAlt削除されます。what
_
wait
私はほぼ同じことをしたいと思いますzsh
(すでに使用している「oh-my-zsh」なしでzimfw
)。基本的には_
単語区切り文字と見なさないようで、については/
同時に削除します。
似たような質問をいくつか発見し、使用を提案しましたが、削除するselect-word-style bash
と、bashは私が望む方法で動作しません。
zsh
また、私が直接答えを見つけることができる方法に関する提案がある場合は、躊躇しないでください。明確な情報や例などを見つけるのは難しいです。
答え1
(または単語の一部と見なされたくない他の文字)を_
削除できます。/
$WORDCHARS
性格)バインドする単語または単語ではなく文字シーケンスを削除するウィジェットを定義します。Alt+Del
delete-word-or-non-word() {
emulate -L zsh # restore default zsh options locally to the function
set -o extendedglob # extended glob needed for the ## operator (locally)
# ${var##pattern} ksh operator to remove the longest string that matches
# the pattern off the start of $var. Here applied to $RBUFFER which in a
# zle widget is the part of the line editor buffer to the right of the
# cursor. [[:WORD:]] matches a *word* character (alnums + $WORDCHARS),
# ## is *one or more* (like ERE's + or ksh's +(...))
RBUFFER=${RBUFFER##([[:WORD:]]##|[^[:WORD:]]##)}
}
zle -N delete-word-or-non-word # define a new zle widget using that function
# bind that new widget
bindkey '\ed' delete-word-or-non-word # Alt+D
bindkey '^[[3;3~' delete-word-or-non-word # Alt+Del on xterm at least
WORDCHARS=${WORDCHARS//[\/_]} # remove _ and / from WORDCHARS
# using the ${var//pattern/replacement} ksh
# operator
WORDCHARS= # or make it empty so that the only *word*
# characters are alphanumerics
(これは必要ありませんselect-word-style
)