명령어를 쳤다가 먼저 다른 일을 해야 한다는 걸 깨닫는 경우가 많고, 모든 것을 기억하고 모든 매개변수를 파악하거나 나중에 다시 입력하고 싶지 않기 때문에 보통 #
처음에 히스토리에 저장해두기 때문에 나는 분을 사용할 수 있습니다.
setopt interactivecomments
일반적으로 .zshrc에서 이미 해당 기능을 활성화했지만 때로는 sudo
반드시 설정되지 않은 작업을 수행하기 위해 일부 서버에서 공유 계정을 사용해야 하므로 #
해당 줄 앞에 추가하면 성가신 응답이 나타날 수 있습니다.
zsh: command not found: #
괜찮습니다. 그냥 사용하면 된다고 생각할 수도 있지만 :
그렇게 간단하지는 않습니다.
$ : do_thing "1" && do_thing "2" && do_thing "3"
do_thing "2" && do_thing "3"
어떤 경우에는 별 문제가 아닐 수도 있지만 이와 같은 경우는 어떻습니까 ?
$ : cd /some/deeply/nested/directory && rm -rf *
대부분의 명령은 그렇지 않습니다.그래서해롭습니다. 하지만 이 경우에는 내가 입력한 명령을 실행하기 전에 다른 작업을 수행해야 한다는 사실을 깨닫기 때문에 항상 명령을 실행하고 싶지 않습니다.하지만.
입력한 명령을 저장하는 안정적이고 빠르며 무해하고 쉬운 방법은 무엇입니까?
echo
같은 문제가 있었고 :
그다지 우아해 보이지 않았습니다.
{
내가 보기에는 and }
또는 (
and 안의 모든 것을 그룹화하는 것이 효과가 있을 것 같지만 )
어느 것도 그렇게 하지 않습니다. 그들이 나에게 주었어
zsh: parse error near `}'
그리고
zsh: parse error near `)'
답변1
그냥 사용작은 push-line
부품, 이는 기본적으로 이 목적으로 사용되는 모드에서 Alt+ Q및 +에 바인딩됩니다.CtrlQemacs
이렇게 하면 지금까지 입력한 내용이 보류됩니다(대기열에서버퍼 스택zsh 문서에서) 추가 명령을 입력할 수 있도록 편집 버퍼를 지웁니다. 다른 명령이 종료된 후 실행하는 명령은푸시이전 콘텐츠는 편집 버퍼로 자동으로 호출됩니다.
zsh
더 나은 위젯(그러나 제어할 수 없는 상황에서 사용하는 경우 도움이 되지 않음 ~/.zshrc
)은 push-input
전체 위젯을 푸시 하는 것입니다.입력하다그리고 현재 행뿐만이 아닙니다. 여러 줄 명령을 입력할 때 $PS2
프롬프트 다음에 명령이 계속되는 것이 더 좋습니다.
bindkey '^Q' push-input
bindkey '^[q' push-input
Alt푸시된 행 또는 입력은 + G( get-line
위젯) 를 사용하여 검색할 수도 있습니다 .
다른 쉘에서 작동하는 또 다른 방법은 모드 또는 모드 에서 Ctrl+ 가 있는 행을 삭제한 다음 이를 킬링에 저장하는 것 입니다 .Uemacs
Escddvi
Ctrl나중에 모드에서 +를 사용하거나 명령 모드에서 /를 사용하여 호출할 수 있습니다 . 모드에서는 + 루프를 사용하여 탐색할 수도 있습니다.Yemacs
pPvi
emacs
AltY살인 반지(과거 잘라내기/복사한 문자열을 기억하세요).
모드 에서는 vi
명명된 레지스터에 명령을 저장할 수도 있습니다 vi
. 예를 들어, "xdd
vi 명령 모드에서는 행을 삭제하고 레지스터에 저장하며 x
나중에 vi를 사용하여 다시 불러올 수 있습니다 "xP
.
interactive_comments
귀하의 질문에 대한 보다 직접적인 대답으로, 닫을 때 일부 코드(또는 목록 포함)를 주석 처리하려면 for _()
(짧은 형식의 loop for
, 여기서는 빈 목록을 반복함) 또는 if (())
(짧은 형식의 loop if
, 여기에 빈 산술을 삽입할 수 있습니다. 그 앞의 표현식은 0으로 해석됩니다).
foo && bar || baz
이는 and-or 목록을 주석 처리 하지만 bar
in foo; bar
또는 foo & bar
eg 목록은 주석 처리하지 않습니다.
이는 또한 지금까지 입력한 텍스트가 구문적으로 유효하므로 미완성 코드(예: 미완성 인용 텍스트, for 루프...)에 적용되지 않는다고 가정합니다.
동일한 주의 사항이 있는 또 다른 접근 방식은 :||(
시작과 )
끝 부분에 삽입하는 것입니다. 그러면 유효한 코드가 모두 주석 처리됩니다.
1 기술적으로 말하면 현재버퍼 편집Alt+를 사용하여 줄 바꿈을 입력 Enter하거나 기록 또는 버퍼 스택에서 여러 줄 명령을 호출하는 경우 여전히 여러 줄을 포함할 수 있습니다.
답변2
Stéphane의 첫 번째 제안(푸시 라인 위젯)이 더 간단하고 빠르며 대부분의 경우 더 바람직하지만 다음 중 하나를 명령에 추가할 수도 있다는 것을 알았습니다.
return &&
또는
return;
방금 입력한 명령을 다시 실행하기 전에 여러 명령을 실행해야 한다는 것을 알고 ( )를 여러 번 누르고 싶지 않은 경우 optionQ이 방법이 더 잘 작동할 수 있습니다 . (나중에 제안한) 것보다 더 기억에 남는다 altQ.for _()