alt+bksp와 같이 문자가 나타날 때까지 뒤로 삭제합니다.

alt+bksp와 같이 문자가 나타날 때까지 뒤로 삭제합니다.

내 현재 줄은 다음과 같습니다.

/tmp/path/to/file:123

이제 이 줄의 끝에 와서 :123특정 키 조합을 눌러 삭제하고 싶습니다. 이것이 가능합니까? (콜론은 단지 예시로 언급된 것입니다. 다른 문자일 수도 있습니다. 이 작업을 수행하기 위해 키를 바인딩할 수 있는지 궁금합니다.)

alt+와 유사하게 작동 하지만 Backspace단어 구분 기호에 대해 더 구체적입니다.

Bash 또는 zsh 모두 환영합니다.

답변1

뒤로 검색하여 :줄 끝까지 삭제합니다: Ctrl++ R : Alt. +는 기록 검색 명령이고 편집 중인 줄은 기록의 일부입니다. + 포함 대부분의 명령은 증분 기록 검색을 종료하고 일반적인 효과를 갖습니다.DCtrlRAltD

vi 모드에서:F:C

이것은 bash와 zsh 모두에서 작동합니다(기본 구성에서는 물론 기본 키 바인딩을 가정할 때 zsh에 다르게 반응하게 만드는 멋진 옵션 조합이 없다고 보장할 수 없습니다).

답변2

Bash에서는 ctrl++를 눌러 함수를 시작한 alt다음 커서 를 ":"으로 이동한 다음 +를 입력하여 현재 단어의 끝을 삭제할 수 있습니다. 자주 사용하는 경우 에서 바인딩을 만들 수 있습니다 . 이는 readline 함수이며 info :에 문서화되어 있습니다. 소스 코드를 해독하지 않고는 사람들의 단어 이해를 바꿀 수 있는 방법이 없다고 생각합니다 .]character-search-backward:altd
~/.inputrc
info readline
readline

답변3

내가 아는 한 방금 bash 3.2에서 테스트했습니다.

Alt+백스페이스 및 ESC+백스페이스는 첫 번째 "이상한" 문자 앞의 단어를 삭제합니다.

Ctrl+W는 첫 번째 공백이 나타날 때까지 삭제됩니다.

내가 이해한 바로는 스크립트를 작성하는 것이 아니라 입력하면서 스크립트를 작성하는 것입니다.

답변4

zsh에서는 Emacs 단축키를 사용하여 이 작업을 수행할 수 있습니다. 위의 예는 Alt-Backspace(또는 M-DELEmacs 용어)입니다.

이를 위해 저는 에 있습니다 .zshrc. (URL을 참고하세요. 저는 입니다.아니요이것에 대한 공로를 인정하십시오! )

## emacs cursor-word movement (not identical but close enough)
#  also necessary for this:
#    /usr/share/zsh/functions/forward-word-match
#  (from http://stackoverflow.com/questions/10847255 )
autoload -U select-word-style
select-word-style bash

언급된 파일은 다음과 같습니다.

emulate -L zsh
setopt extendedglob

local curcontext=":zle:$WIDGET" word
local -a matched_words
integer count=${NUMERIC:-1}

if (( count < 0 )); then
  (( NUMERIC = -count ))
  zle ${WIDGET/forward/backward}
  return
fi

while (( count-- )); do
  match-words-by-style
  # For some reason forward-word doesn't work like the other word
  # commands; it skips whitespace only after any matched word
  # characters.

  if [[ -n $matched_words[4] ]]; then
    # just skip the whitespace and the following word
    word=$matched_words[4]$matched_words[5]
  else
    # skip the word but not the trailing whitespace
    word=$matched_words[5]
  fi

  if [[ -n $word ]]; then
    (( CURSOR += ${#word} ))
  else
    return 1
  fi
done

return 0

관련 정보