zshkill-wordはエスケープされたスペースを無視できますか?

zshkill-wordはエスケープされたスペースを無視できますか?

行末で歌うとls Dir\ A/Long\ File\ Name殺す言葉に変わりたいです。 toを修正して削除できるls Dir\ A/ことを知っていますが、エスケープされたスペースを無視する方法が見つかりません。/$WORDCHARS

答え1

組み込みウィジェットに通知する方法はありませんbackward-kill-word(次の単語は終了します)。カーソル)を使用してこれを実行できますが、直接スクロールすることもできます。

backward-kill-word() { 
  # LBUFFER -- all text left of the cursor
  # (z)     -- split into shell words
  # (A)     -- force the resulting words into an array
  # [-1]    -- take the right-most element
  # :t      -- strip all path ancestors from it
  # %       -- remove the shortest matching substring from the right
  LBUFFER=${LBUFFER%${${(zA)LBUFFER}[-1]:t}*} 
  zle -f kill  # Tell the Zsh Line Editor that we've killed text.
}
zle -N backward-kill-word  # Replace the default widget.

置換kill-word(次の単語を削除)正しいカーソル)は非常に似ています。

kill-word() { 
  # RBUFFER -- all text to the right of the cursor
  # [1]     -- take the left-most element
  # :h1     -- strip all path descendants from it
  # #       -- remove the shortest matching substring from the left
  RBUFFER=${RBUFFER#*${${(zA)RBUFFER}[1]:h1}} 
  zle -f kill
}
zle -N kill-word

答え2

複数のキーを入力しても構わない場合は、^R / ^K前のスラッシュに戻って行の末尾までキーを押すことができます。最初にカーソルの後ろに多くの単語がある場合は使用できます^@ ^R / ESC-x kill-region RET(残念ながら、kill-regionデフォルトではキーにバインドされていません。Emacsバインディングが^W提供されbackward-kill-word、標準のクッキングされたttyバインディングとの互換性のために提供されていません)

T/Cviモードでは、コマンドモードから開始して挿入モードで終了したら、行末まで削除したり、元のカーソル位置が含まれるまでvT/s削除するなどの操作を使用できます。dT/s


select-word-style shell興味があるかもしれません:シェル構文を使用して単語の移動を引き起こします。

autoload -Uz select-word-style
select-word-style shell

残念ながら、スラッシュが単語の一部であるため、問題は解決されません。コードを変更せずに単語の特定の文字を停止するためにそれを悪用する方法はありませんmatch-words-by-style

関連情報