멀티OS를 사용할 때 기호보다 작게 확장하고 중괄호를 확장하세요.

멀티OS를 사용할 때 기호보다 작게 확장하고 중괄호를 확장하세요.

setopt multios다음을 수행하려면 zsh multios set( )을 사용하십시오 .

< in1 < in2 > out

그리고:

< in > out1 > out2

이것은 매우 편리합니다.

나는 이 기능을 중괄호 확장( )과 setopt braceexpand결합하고 싶습니다. 그래서 다음과 같이 말합니다.

<in{1,2}^I

( ^I텍스트 탭이고 완성 시스템을 호출합니다.) 다음으로 확장하고 싶습니다.

<in1 <in2 

하지만 내가 얻는 것은 다음과 같습니다.

<in1 in2

이 동작을 수정하는 쉬운 방법이 있습니까?

답변1

필요한 동작은 기존 완료 설정( compinstall몇 번의 패스를 통해 천천히 생성됨)과 함께 자동으로 작동하므로 담당하는 특정 설정의 범위를 좁히는 데 시간을 보냈습니다.

핵심 기능은 "완성자"에 의해 제공됩니다 _expand. 다음과 같이 포함할 수 있습니다.

zstyle ':completion:*' completer _expand

_completer완성 도구 도 사용하는 경우 이를 _expand먼저 나열해야 합니다. 예를 들어, 이것은 나의 실제 완성자 설정입니다:

zstyle ':completion:*' completer _expand _complete _ignored _match _approximate _prefix

다음으로 버팀대 확장을 활성화하려면 활성화해야 합니다 substitute. 이 기능은 기본적으로 활성화되어 있지만 다음과 같이 명시적으로 설정할 수 있습니다.

zstyle ':completion:*' substitute 1

이 기능을 모든 곳에서 활성화하고 싶지 않다면 다음과 같이 전체적으로 비활성화하고 활성화만 할 수 있습니다 _expand.

zstyle ':completion:*' substitute 0
zstyle ':completion:*:expand:*' substitute 1

나는 이것을 테스트했다다루기 힘든버전 4.3.11 및 5.0.2: 새 셸을 시작하고 다음 zsh -df을 포함하는 파일을 가져옵니다.

zstyle ':completion:*' completer _expand
zstyle ':completion:*' substitute 0
zstyle ':completion:*:expand:*' substitute 1
autoload -Uz compinit
compinit

(옵션 multiosno_ingore_brace(별칭 brace_expand)은 기본값이므로 명시적으로 변경할 필요가 없습니다.)

cat <in{1,2}그런 다음 Tab 키를 입력 하고 눌렀습니다. Tab을 여러 번 눌러야 합니다. 각 확장 변형에 대해 한 번, "모든 확장 프로그램" 항목으로 이동하려면 다시 한 번 누릅니다(위 예에서는 총 3번 누름). 이 특정 항목을 표시하는 방법을 찾지 못했습니다. 첫 번째.

답변2

내가 사용하고 있는 전체 설정은 다음과 같습니다.

zstyle ':completion:*' completer _complete _list _expand _oldlist _ignored _match _correct _approximate _prefix

대체 설정은 기본 설정인 1입니다.

Chris의 대답과 올바른 방향에 대한 조언을 보고 이것이 내 구성과 관련이 있음을 깨달았습니다.

피니셔 순서와 대체 설정을 조사하기 시작했지만 이들 중 어느 것도 동작을 바꾸지 않았습니다. 내 설정과 비교하기 위해 Chris가 제공한 최소 구성 파일을 사용하여 문제를 내 바인드키 파일로 좁힌 다음 거기에서 어떤 이유로든 필요한 확장이 실패하는 부작용 bindkey -v이 있습니다 .^Iexpand-or-complete

viins계속 해서 키 매핑을 사용하고 싶기 때문에 vicmd내 솔루션은 탭 동작을 다음과 같이 변경하는 것이었습니다 complete-word.

bindkey -M viins "\CI" complete-word
bindkey -M vicmd "\CI" complete-word

너무 길어요.

viins또는 키맵을 사용하는 경우 다음으로 viicmd변경해야 합니다 .^Icomplete-word

bindkey -M viins "\CI" complete-word
bindkey -M vicmd "\CI" complete-word

관련 정보