명령 줄 Zsh의 주석


115

나는 최근에 우분투에서 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.

답변:


172

방금 zsh를 시도하기 시작했을 때이 문제도 발생했습니다. setopt interactivecommentsbash 스타일 주석을 활성화 할 수 있습니다 .


3
set -k일회성이라면 할 수도 있습니다 . 하지만 내가 사용하는 거라고 setopt내 zshrc이 대답에서 라인
해미 다우 너

12
이것이 기본 동작이 아닌 이유가 있습니까?
naught101 2015 년

1
@ naught101 많은 zsh의 최고의 비트가 기본적으로 꺼져 있습니다. 이유를 알고하지 않습니다
zzapper에게

@ naught101은 새롭고 혁신적이기 때문입니다. 매우 진보, 훨씬 개선
Ярослав Рахматуллин

40

나는 사용한다

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) 을 설정하면 익숙한 대화 형 쉘에서 주석을 사용할 수 있습니다.


나는 당신의 옵션을 좋아하지만 그것을 작동시킬 수 없습니다 :( 파일에 바인딩을 작성해야하는 방법이 있습니까? 아니면 ^ 및 Q 두 문자입니까? 명령이 지워졌지만 모르겠습니다. 입력에 다시 나타나는 방법
Mihnea Simian 2014-01-29

2
@Mihnea 명령이 사라지면 푸시 입력이 작동하는 것 같습니다. 다음 명령을 실행하거나 Enter 키를 누르면 다시 나타납니다. 그렇게하지 않나요?
Michał Politowski 2014 년

1
@barbaz 스택은 read -z및 로 조작 할 수 print -z있으므로 일부 스크립팅 및 임시 파일을 사용할 수 있습니다. 그러나 명령 줄을 임시 파일에 저장하기위한 사용자 정의 zle 위젯이 더 간단 할 수 있으며 공유 기록도 여전히 더 간단 할 것입니다.
Michał Politowski 2014 년

1
현재 승인 된 답변은 질문자의 질문 을 다루지 만이 답변은 질문자의 의도를 나타 냅니다. 즉, zsh는 의도 한 결과를 달성하는 더 좋은 방법을 가지고 있습니다.
wjv

1
이것은 받아 들여진 대답이어야합니다. oh-my-zsh를 사용하는 경우 Ctrl-Q를 사용하여 즉시 사용할 수 있습니다.
Gecko

18

나 자신도이 일을 자주하게된다. 내가하는 일은 긴 명령을 잘라 내고 먼저 가야하는 명령을 실행 한 다음 긴 명령을 다시 붙여 넣는 것입니다. 이것은 간단합니다. CTRL + U 는 현재 명령을 버퍼로 자르고 CTRL + Y는 붙여 넣습니다. zsh 및 bash에서 작동합니다.


음, 사실, 내 방법은 솔루션이 가장 적합한 동안 해결 방법은)
롤프

4
이것은 받아 들여지는 대답이 아니어야합니다. 아래에서 "setopt interactivecomments"를 사용하는 방법은 다음과 같습니다. 그 이유는 현재 명령을 잘라 내면 zsh 히스토리에 없으며, 시도한 명령을 덮어 쓰지 않고는 새 명령을 입력하는 동안 잘라 내기 및 붙여 넣기를 쉽게 사용할 수 없기 때문입니다. 저장.
Douglas

1
이 답변의 주석과 솔루션을 사용하는 것은 모두 해결 방법입니다. Michał Politowski가 게시 한 푸시 입력 방법이 더 정확합니다.
Fredrik Möllerstrand 2013

0

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
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.