ZSH의 이전 명령에서 인수를 가져올 수 없습니다.

ZSH의 이전 명령에서 인수를 가져올 수 없습니다.

Alt+.또는 등과 같이 bash에서 이전 명령의 인수를 가져오는 잘 알려진 바로 가기가 있습니다. $!이 중 어느 것도 내 zsh에서는 작동하지 않으며 일부 zprezto 모듈을 사용하고 있습니다. zprezto 모듈에 의해 변경되는 것과 관련된 내용을 찾을 수 없습니다. 내가 누락되었거나 내가 설정하여 이 동작을 비활성화한 일부 ZSH 설정이 있을 수 있습니까?

답변1

ALT.내가 아는 바로는 잘 알려져 있지 않다. 나는 이것이 당신이 bash 시작에 로드한 것에 의해 정의되었다고 가정합니다. (그것이 당신에게 어떤 역할을 합니까?)

$!가장 최근에 시작된 하위 프로세스의 프로세스 ID입니다. 나는 이것이라고 가정한다~ 아니다무엇을 입력하려고 했는지. :)

!$(축약된) 역사 확장입니다.~해야 한다기본 상황에서는 이전 명령의 마지막 인수로 확장됩니다. zsh의 역사 확장은 꼼꼼하게 문서화되어 있습니다.zsh 매뉴얼에서.

히스토리 확장은 일반적으로 로 시작 !하지만 다음 값을 설정하여 이를 변경할 수 있습니다 $HISTCHARS. 의 첫 번째 문자는 $HISTCHARS히스토리 확장을 시작하는 문자로 사용됩니다. 기본적으로 $HISTCHARS값은 로 설정됩니다 !^#. 다음을 사용하여 시스템의 값을 확인할 수 있습니다.

echo $HISTCHARS

만약 그렇다면~ 아니다로 시작 하면 zsh 시작의 무언가가 다른 값을 설정하고 및 와 !같은 잘 알려진 표준 기록 확장이 작동하지 않습니다.!!!$

업데이트:

위에서 쓴 첫 번째 문단은 완전히 잘못된 것으로 밝혀졌습니다. 에 대해 몰랐을 수도 있지만 ALT.vi 모드가 활성화된 상태에서 zsh를 "항상" 사용했기 때문일 수 있습니다. 실제로 ALT.(및 ALT_동일한 작업을 수행하는)은 zsh의 기본 emacs 키 바인딩에서 활성화됩니다. 그들은 당신이 설명하는 것을 수행하는 ZLE 위젯에 바인딩되어 있습니다 insert-last-word.

기본 emacs 키 바인딩과 함께 zsh를 사용하고 있고 ALT.작동하지 않는 경우 쉘 시작 시 로드하는 항목이 이를 재정의하는 것입니다. 다음을 사용하여 기본 키 바인딩을 다시 설정할 수 있습니다.

bindkey -M emacs "^[." insert-last-word \
                 "^[_" insert-last-word

관련 정보