zsh에 현재 명령을 저장하는 방법은 무엇입니까? [복사]

zsh에 현재 명령을 저장하는 방법은 무엇입니까? [복사]

Ctrl명령을 입력하고 있는데 뭔가를 확인해야 한다는 것을 기억합니다. +를 누르면 U명령이 사라지고 다른 것을 입력할 수 있지만 내가 입력한 명령이 기록에 없습니다.

명령을 복원할 수 있는 방법이 있습니까? 아니면 다른 단축키를 눌러 명령을 어딘가에 저장할 수 있습니까?

답변1

push-lineZLE 명령을 살펴보십시오 . 이 명령은 라인의 현재 내용을 버퍼 스택에 푸시하고 라인을 지웁니다. 그런 다음 다른 명령을 입력할 수 있으며 ZLE가 다시 시작되면 라인이 버퍼 스택에서 라인 버퍼로 팝됩니다.

prompt@world$ cp abc /mnt/usr/bin       # The user presses Esc-q
prompt@world$                           # The line is cleared
prompt@world$ mount -v /dev/sdb1 /mnt   # And the user can enter another command
mount: /dev/sdb1 mounted on /mnt
prompt@world$ cp abc /mnt/usr/bin
# The first command is popped off of the stack
#  as soon as ZLE comes back.

기본적으로 이 명령은 / in emacs 모드에 바인딩됩니다 Alt. Escq이 명령을 사용하여 이 명령을 다른 키에 바인딩할 수 있습니다 bindkey. 예 를 들어 Alt/ 에 Escv바인딩 하려면 .bindkey '^[V' push-linezshrc

답변2

Ctrl+는 Y마지막으로 잘라낸 항목을 붙여넣습니다( Ctrl+ U, Ctrl+ K, Ctrl+ W등 사용).

답변3

당신이 찾고있는push-line명령은 Ctrl+ Q및 기본적으로 에 바인딩됩니다 Esc Q. 이 명령을 사용하면 입력 내용이 지워지고 다른 명령을 입력할 수 있습니다. 이 명령이 실행되거나 취소되면 편집을 위해 이전 명령으로 돌아갑니다.

여러 줄 명령을 사용하면 push-line현재 줄만 지우고 다른 줄은 입력 버퍼에 유지됩니다. 또 다른 명령이 있습니다push-input전체 입력 버퍼를 지우고 기본적으로 어떤 키에도 바인딩되지 않습니다.

이 명령에는 래퍼를 사용합니다. Ctrl+를 입력하여 Z입력 중인 명령을 "일시 중지"하고 다른 명령을 입력합니다. 명령을 실행한 후(또는 Ctrl+ 로 중단 C) 보류 중인 명령이 편집을 위해 반환됩니다(커서 위치도 기억됩니다). 편의상 Ctrl+를 입력할 때 명령줄이 비어 있으면 Z해당 키가 bg내장 명령을 호출합니다. 따라서 Ctrl+를 두 번 누르면 Z실행 중인 명령이 백그라운드로 직접 전송됩니다.

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

#모든 셸에서 작동하는 간단한 방법은 현재 줄의 시작 부분에 를 추가하고 를 누르는 것입니다 Enter.

관련 정보