최근에 bash에서 zsh로 전환했습니다. 한 가지 차이점은 bash에 명령을 입력하고 Esc-*(vi 편집 모드에서)를 수행하면 bash가 즉시 glob 인라인을 확장한다는 것입니다. 예를 들어, 다음을 입력하면:
$ ls
bar foo1 foo2 foo3
$ cp foo<Esc>*
bash는 명령을 다음과 같이 변경합니다.
$ cp foo1 foo2 foo3
줄 끝 부분에 커서를 놓으면 다시 삽입 모드로 돌아갑니다. zsh가 동일한 작업을 수행하도록 하려면 어떻게 해야 합니까?
답변1
기본 구성에서는 다음에서 이 효과를 얻을 수 있습니다.expand-word
^X *
Emacs 모드에서는 ( ) 에 바인딩되어 있습니다 Ctrl+X *(Vi 모드에서 사용하려면 키에 바인딩해야 합니다). ESC *
bash와 달리 ^X *
zsh는 변수 및 명령 대체도 확장합니다.
또한 기본 구성에서는 Tab와일드카드가 포함된 단어 뒤를 누르면 해당 단어가 일치하는 목록으로 확장됩니다.
당신에게 선택권이 있다면glob_complete
Tab모든 일치 항목을 삽입하는 대신 일치 항목을 켜고 반복합니다. 이 경우에는 할 수 있습니다_all_matches
완성자(의지하다스티븐 차제라스 코멘트). 매뉴얼의 예제 코드를 인용하면 다음과 같습니다.
setopt glob_complete
zle -C all-matches complete-word _generic
bindkey '^Xa' all-matches
zstyle ':completion:all-matches::::' completer _all_matches _complete
zstyle ':completion:all-matches:*' insert true
Tab완성 위젯(기본값과 this )과 내장 위젯 all-matches
의 차이점은 expand-word
완성 expand-word
컨텍스트에 관계없이 쉘 파일 이름 확장을 수행하는 반면, Tab완성 all-matches
컨텍스트는 와일드카드 처리 방법을 결정하는 데 사용된다는 것입니다. 예를 들어, 다음은 rmdir *
모든 ^X*
파일로 확장되지만 ^Xa
디렉터리로만 확장됩니다.