파이프 심볼 전에 zsh가 공간을 차지하지 못하게하려면 어떻게해야합니까?


18

'|'zsh 명령 줄에 공백과 파이프 기호 를 차례로 입력하면 zsh는 공백을 먹고 파이프 기호를 이전 단어에 직접 배치합니다. 그렇게하지 못하게하려면 어떻게해야합니까? 가능한 스타일 규칙은 확실하지 않지만 가독성을 위해 파이프 기호의 양쪽에 공백이 있습니다. 나는 상자에서 oh-my-zsh를 거의 사용하고 있습니다.

해결책

아래의 mpy의 답변을 바탕으로 다음 솔루션을 사용했습니다.

기본적으로 ZLE_REMOVE_SUFFIX_CHARS는 zsh / ohmyzsh에서 정의되지 않습니다. 정의되지 않은 경우 다음과 같이 작동합니다.

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

~ / .zshrc에 다음 정의를 추가했습니다.

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(파이프를 제외한 모든) 그리고 프레스토, 완벽합니다! 문제가 사라졌습니다.


1
먼저 zsh -f(구성로드를 건너 뛰려면)를 사용하여이 작업을 다시 시도 하십시오. zsh는 더 이상 그렇게하지 않을 것입니다. 그렇다면, 어떻게 발생하는지 알아 내기 위해 oh-my-zsh 를 파헤쳐 야 할 것 입니다. ;-)
Francisco

답변:


18

TAB명령 / 파일 이름 을 완료하면 공백이 자동으로 추가되지만 |다시 누르면 공백이 사라진다 는 것을 의미한다고 가정 합니다. 그렇지 않으면 그 효과를 재현 할 수 없습니다.

그러나이 경우 솔루션은 다음과 같이 간단해야합니다.

ZLE_REMOVE_SUFFIX_CHARS=""

설명은 약간 까다롭기 때문에 간단히 인용하십시오. man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS 이 매개 변수는 라인 편집기에서 사용됩니다. 경우에 따라 완성 시스템에서 추가 한 접미사 (일반적으로 공백 또는 슬래시)는 다음 편집 명령이 삽입 가능한 문자가 아니거나 문자가 접미사를 제거해야한다고 표시되어 자동으로 제거됩니다.

이러한 변수에는 접미사를 제거하는 문자 집합이 포함될 수 있습니다. 경우 ZLE_REMOVE_SUFFIX_CHARS 설정, 그 문자는 접미사를 제거 할 원인이됩니다; 경우 ZLE_SPACE_SUFFIX_CHARS설정, 그 문자는 접미사를 제거하고 공백으로 대체하게됩니다.

경우 ZLE_REMOVE_SUFFIX_CHARS설정되지 않은, 기본 동작은 동일합니다 :

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

경우 ZLE_REMOVE_SUFFIX_CHARS설정되어 있지만 비어, 문자는 일절이 동작이 없습니다. ZLE_SPACE_SUFFIX_CHARS 다음과 같이 우선합니다.

ZLE_SPACE_SUFFIX_CHARS=$'&|'

문자 &|접미사를 제거하지만 공백으로 대체합니다.

차이점을 설명하기 위해 옵션 AUTO_REMOVE_SLASH이 적용되고 디렉토리 DIR이 완료 /되었고 다음에 사용자 가 입력하는 디렉토리가 추가되었다고 가정하십시오 &. 기본 결과는 DIR&입니다. 로 ZLE_REMOVE_SUFFIX_CHARS설정했지만 &결과 를 포함하지 않은 경우는 DIR/&입니다. 로 ZLE_SPACE_SUFFIX_CHARS설정 &하면 결과가 포함됩니다 DIR &.

특정 완료는 여기에 설명 된 값을 대체하는 자체 접미사 제거 또는 대체 동작을 제공 할 수 있습니다.


예, 당신이 그것을 언급하지만, 단지 탭 완료 후 발생할 때까지, 대답을 주셔서 감사합니다, 이것은 내가 :) 필요한 나에게주는 것으로 나타났습니다하지 않았다
scanny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.