zsh의 $ PATH 캐시에서 자동 완성 색인 (또는 호출 된 항목) 및 바이너리를 다시 작성


75

새 소프트웨어를 설치 한 후, zsh로 이미 열린 터미널은 새 명령에 대해 알지 못하며 자동 완성을 생성 할 수 없습니다. 새 터미널을 열면 문제가 해결되지만 자동 완성 기능이 이전 터미널에서 작동하도록 인덱스 (또는 호출 한 것)를 다시 작성할 수 있습니까?

나는 노력 compinit했지만 도움이되지 않았다. 또한 쉘 종속적이지 않은 방법이 있습니까? 답변을 확인하는 방법이 있으면 좋습니다 (무언가를 제거하고 다시 설치하는 것을 제외하고).

내 말은 명령의 이름의 몇 글자를 입력 한 후, 내가 누를 수있다 Tab, 그리고 zsh전체 이름을 뽑아 나머지를해야한다.


1
기존 쉘이 "[새로운 명령]에 대해 자동 완성을 생성 할 수 없음"이라고 말할 때 두 가지 유형의 자동 완성이 있습니다. 명령 위치에“인수 완료”— 이름을 입력 한 후에 쉘이 새 명령에 대한 옵션 / 인수를 제안하려고합니다. 어느 것이 문제가됩니까?
Chris Johnsen

1
좋은 질문! 난 항상 할 수 없다고 생각했지만 확인하지 않았다
마이클 Mrozek

1
주제-사람들은 너무 변덕 스럽습니다. 4 명이 좋아하지만 공감은 2 명뿐입니다.
xenoterracide

@Chris 명령 이름의 문자 몇 개를 입력하고 Tab 키를 누르면 zsh가 나머지를 수행하고 전체 이름을 가져와야합니다.
phunehehe

@xeno 나도 그것을 알아 차렸다. 그것은 upvote에하지에 불과 좋아하는 뭔가를 꽤 이례적인
마이클 Mrozek

답변:


76

실행 가능한 명령 캐시를 재 구축하려면 rehash또는을 사용하십시오 hash -rf.

hash_list_all옵션을 설정 해제하지 않았는지 확인하십시오 (디스크 액세스가 훨씬 적지 만 캐시 업데이트 빈도가 줄어 듭니다).

명령을 입력하지 않으려면 ~/.zshrc¹에 다음 줄을 넣어 zsh가 캐시를 신뢰하지 않도록 지시 할 수 있습니다 .

zstyle ":completion:*:commands" rehash 1

성능 비용이 있지만 오늘날 일반적인 데스크톱 설정에서는 무시할 수 있습니다. ( $PATHNFS 또는 RAM이 부족한 시스템에는 없습니다.)

zstyle명령 자체가 설명되어 zshmodule매뉴얼 페이지를 참조하십시오. 스타일 값은 zshcompsysand zshcompwid페이지에 문서화되어 있거나 소스 (여기서는 _command_names함수)를 읽을 수 있습니다 . 읽을 수있는 문서를 원한다면… 문서를 찾으면 알려주십시오!

¹ Chris Johnsen에게 zsh≥4.3.3이 필요합니다.


3
rehash incantation은 이전에 완전히 해시 된 쉘에서“새 명령”의 명령 이름 완성을 활성화해야합니다. PATH (또는 경로)를 설정하면 리해 시도 발생합니다. 따라서 PATH="$PATH"일을 할 것입니다. HASH_LIST_ALL내 문서에서 기본값으로 표시됩니다.
Chris Johnsen

그게 답입니다.
BaiJiFeiLong

13

새 명령에 대해 "인수 완료"를 수행하는 데 문제가있는 경우 compinit 가 필요한 명령 일 수 있지만 문제를 일으킬 수있는 캐싱 메커니즘이 있습니다.

내 버전 (4.3.10)에 대한 설명서에 따르면 compinit 는 캐시 된 "덤프 파일" .zcompdump을 사용하여 후속 호출 속도를 높이기 위해 컴파일 된 완료 기능을 저장합니다. 완료 파일 ( 또는로 fpath시작하는 요소 파일) 의 수가 변경된 것을 발견하면 덤프 파일 만 무효화합니다 . 아마도 새로운 소프트웨어를 설치하면 완료 파일의 수가 변경 될 것입니다 ( zsh 자동 완성 파일도 올바른 위치에 설치했다고 가정 ) . 작동하지 않는 상황에서는 덤프 파일을 무시하거나 수동으로 무효화해야합니다.#compdef …#autoload …compinit

덤프 파일 사용을 건너 뛰려면 compinit -D; 이것은 현재 쉘에만 영향을 미칩니다.

덤프 파일을 재 빌드하려면 파일을 제거한 후 다시 실행하십시오 compinit.

rm -i ${ZDOTDIR:-${HOME:?No ZDOTDIR or HOME}}/.zcompdump &&
compinit

이것은 현재 쉘, 일반 쉘을 실행하는 기존 쉘 compinit및 향후 쉘에 영향을 미칩니다 .


일부 zsh 프레임 워크는 zim호스트 별 덤프 파일 사용을 허용합니다. 이 경우 $zcompdump_file와 함께 제거하십시오 .zcompdump.
sebastian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.