내 현재 줄은 다음과 같습니다.
/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-DEL
Emacs 용어)입니다.
이를 위해 저는 에 있습니다 .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