제외하고 어떻게 사용할 수 있나요?zsh 완료 메뉴/위젯을 종료하시겠습니까?

제외하고 어떻게 사용할 수 있나요?zsh 완료 메뉴/위젯을 종료하시겠습니까?

많은 zsh 사용자와 마찬가지로 명령 프롬프트에서 완성을 호출할 때 방향 화살표 키를 사용하여 탐색할 수 있는 메뉴가 나타나도록 완성을 구성했습니다. 즉 내~/.zshrc

autoload -Uz compinit
compinit

zstyle ':completion:*' menu yes select
zstyle ':completion:*:*:cd:*' menu yes select

디렉토리를 삭제하려면 /var/log/nginx/somewebsite완성을 사용하여 다음과 같이 명령을 시작합니다.

ubuntu% sudo rm -rf /var/l<TAB>
lib/    local/  lock@   log/

방향 화살표 키를 사용하여 항목을 탐색합니다. 커서를 항목 위로 이동할 때 명령줄에 삽입됩니다. 일단 원하는 옵션이 선택되면 ENTER"기본"을 클릭하면 메뉴 위젯이 종료되고 커서가 명령줄로 돌아갑니다.
문제는 ENTER완성 메뉴에서 항목을 수락하고 명령을 실행하는 것인데, ENTER부분적으로 완료된 명령을 실제로 실행할 때 완료를 수락한다고 계속 생각합니다!

zsh의 "완료 제안 수락 및 위젯 종료" 명령을 가 아닌 다른 명령으로 다시 매핑할 수 있습니까 ENTER?
예를 들어 TAB짝수 Ctrl+ y(vim의 승인 완료 키맵과 동일)

답변1

나는 이것에 관한 문서를 찾았습니다.

  • man zshmodules
    • ZSH/COMPLIST 모듈
      • 메뉴 선택

완성 제안을 수락하기 위해 키를 바인딩하려면 Ctrly다음을 사용할 수 있습니다.

bindkey ^Y accept-search

문서에 댓글이 있습니다

다음 사항에 유의하세요.(복합 기능)메뉴 선택 그래프에서는 항상 동일한 작업을 수행하며 사용자 정의 위젯으로 교체하거나 기능 세트를 확장할 수 없습니다.

따라서 바인딩을 해제할 수 없습니다 Enter. accept-search실제로 흥미로운 점은 명령이

bindkey -r ^M accept-search

겨우 성공했다풀다 accept-line일반 명령줄에서.

답변2

메뉴 완성 중에만 작동하도록 다른 키를 바인딩하여 완성 제안을 수락할 수 있습니다. ( bindkey -M menuselect <key> accept-search메뉴 완성을 사용한다고 가정)

Enter또한 먼저 완료를 승인하기 위해 두 번 누르지 않고 즉시 명령줄을 실행 하려면 다음을 수행하십시오 .bindkey -M menuselect '^M' .accept-line

관련 정보