나는 최근에 우분투에서 Bash에서 Zsh로 전환했고 그것에 대해 매우 만족합니다. 그러나 내가 정말로 놓친 것이 있고 동일한 것을 달성하는 방법을 찾지 못했습니다.
Bash에서 긴 명령을 입력 할 때 이전에 다른 것을 실행해야한다는 것을 알게 될 때마다 다음과 같이 주석 처리해야했습니다.
me@home> #mysuperlongcommand with some arguments
me@home> thecommandIhavetorunfirst #and then: then up up
me@home> #mysuperlongcommand with some arguments #I just need to uncomment it!
그러나이 매우 반복적 인 상황은로 처리하는 것만 큼 쉽지 않습니다 zsh
. 주어진 #mysuperlongcommand
대로 실행됩니다 (결과 : zsh: command not found: #mysuperlongcommand
.
답변
방금 zsh를 시도하기 시작했을 때이 문제도 발생했습니다. setopt interactivecomments
bash 스타일 주석을 활성화 할 수 있습니다 .
답변
나는 사용한다
bindkey "^Q" push-input
zsh 매뉴얼에서 :
현재 여러 줄 구성 전체를 버퍼 스택으로 푸시하고 최상위 (PS1) 프롬프트로 돌아갑니다. 현재 파서 구조가 단 한 줄이면 이것은 정확히 push-line과 같습니다. 다음에 편집기가 시작되거나 get-line으로 팝업되면 구성이 버퍼 스택의 맨 위에서 팝업되고 편집 버퍼에로드됩니다.
그래서 다음과 같이 보입니다 :
> long command
Ctrl+Q => long command disappears to the stack
> forgotten command
long command reappears from stack
> long command
또한 INTERACTIVE_COMMENTS
옵션 ( setopt INTERACTIVE_COMMENTS
) 을 설정하면 익숙한 대화 형 쉘에서 주석을 사용할 수 있습니다.
답변
나 자신도이 일을 자주하게된다. 내가하는 일은 긴 명령을 잘라 내고 먼저 가야하는 명령을 실행 한 다음 긴 명령을 다시 붙여 넣는 것입니다. 이것은 간단합니다. CTRL + U 는 현재 명령을 버퍼로 자르고 CTRL + Y는 붙여 넣습니다. zsh 및 bash에서 작동합니다.
답변
setopt interactivecomments
@Lajnold가 제안한 외에도 특정 댓글이 기록에 기록되지 않도록 다음과 같은 내용을 추가 할 수도 있습니다 ( /superuser/352788/how-to-prevent-a-). 히스토리에 저장되는 zshell에서 명령 ) :
이것은 ZSH 내장 함수 zshaddhistory ()를 재정의합니다 :
- 열 1에서 시작하고 뒤에 하나 이상의 공백이없는 주석을 기록합니다 (예 : 다시 돌아오고 싶은 #somecommand).
- 열 1에서 시작하여 하나 이상의 공백이 오는 주석을 기록하지 않습니다.
- 1 열의 공백으로 채워진 들여 쓰기 된 주석을 기록하지 않습니다.
- 1 열에 공백이있는 명령을 기록하지 않습니다 (기록하지 않으려는 명령을 실행하기위한 편리한 바로 가기)
setopt interactivecomments
function zshaddhistory() {
emulate -L zsh
if ! [[ "$1" =~ "(^#\s+|^\s+#|^ )" ]] ; then
print -sr -- "${1%%$'\n'}"
fc -p
else
return 1
fi
}
참고로 이것은 기본 zshaddhistory () http://zsh.sourceforge.net/Doc/Release/Functions.html입니다.
zshaddhistory() {
print -sr -- ${1%%$'\n'}
fc -p .zsh_local_history
}