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.

관련 정보