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
(옵션 multios
및 no_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
이 있습니다 .^I
expand-or-complete
viins
계속 해서 키 매핑을 사용하고 싶기 때문에 vicmd
내 솔루션은 탭 동작을 다음과 같이 변경하는 것이었습니다 complete-word
.
bindkey -M viins "\CI" complete-word
bindkey -M vicmd "\CI" complete-word
너무 길어요.
viins
또는 키맵을 사용하는 경우 다음으로 viicmd
변경해야 합니다 .^I
complete-word
bindkey -M viins "\CI" complete-word
bindkey -M vicmd "\CI" complete-word