zsh에서 긴 문자열 자르기

zsh에서 긴 문자열 자르기

전체 경로( 또는 %1~ \#뒤에 오는) 없이 현재 디렉토리가 표시되도록 프롬프트를 이와 같이 설정하고 싶습니다 . 하지만 디렉터리 이름이 길면 다 필요하지 않습니다. 어떻게 8자로 제한할 수 있나요? zsh에 내장된 기능이 있습니까, 아니면 일부 외부 도구를 사용해야 합니까?%#

답변1

디렉터리 이름을 자르려면 다음을 시도해 보세요.

PS1='%8>..>%1~%<< %# '

예: 이제 디렉토리가 Wow longdirnameislong프롬프트에 다음과 같이 표시됩니다.

Wow lo.. % 

man 1 zshmisc설명하다:

프롬프트의 조건부 하위 문자열

%<string< %>string> %[xstring]

프롬프트 문자열의 나머지 부분에 대한 잘림 동작을 지정합니다. 더 이상 사용되지 않는 세 번째 형식은 x 가 또는 %xstringx인 것과 동일합니다 . 문자열은 잘린 부분 대신 표시됩니다. 즉시 확장되지는 않습니다.<>

세 번째 형식에서는 [프롬프트에 표시될 수 있는 다양한 문자열의 최대 허용 길이를 지정하는 숫자 인수가 뒤에 올 수 있습니다. 처음 두 형식에서 이 숫자 인수는 음수일 수 있으며, 이 경우 잘림 길이는 현재 프롬프트 행에 남아 있는 문자 위치 수에서 숫자 인수의 절대값을 빼서 결정됩니다. 길이가 0이거나 음수인 경우 길이 1이 사용됩니다. 즉, 음수 인수는 오른쪽 여백(RPROMPT의 왼쪽 여백) 앞에 최소 n 문자를 남기도록 잘림을 정렬합니다.

< 문자열의 왼쪽이 잘리는 형식과 >문자열의 오른쪽이 잘리는 형식입니다. 예를 들어 현재 디렉터리가 이면 /home/pike프롬프트가 %8<..<%/로 확장됩니다 ..e/pike. 이 문자열에서 종료 문자( <, >또는 ]) 또는 실제로 모든 문자는 선행하는 \;로 인해 발생할 수 있습니다. 그러나 큰따옴표로 묶인 문자열에서 백슬래시를 제거하는 것 외에도 문자열도 표준 인쇄 처리의 대상이 되므로 print -P를 사용할 때 이를 두 배로 늘려야 합니다. 따라서 최악의 경우 시나리오입니다 print -P "%<\\\\<<...".

문자열이 지정된 잘림 길이보다 길면 잘린 문자열을 완전히 대체하여 전체가 표시됩니다.

잘릴 문자열 부분이 문자열의 끝, 구성된 다음 포함된 그룹의 끝 %(또는 동일한 그룹화 수준에서 발생하는 다음 잘림(즉, a 내의 잘림 %(은 별도) 중 어디까지 실행되는지 묻는 메시지를 표시합니다. 먼저 온다. 특히 인수가 0인 잘림(예: %<<)은 잘릴 문자열 범위의 끝을 표시하는 동시에 거기에서 잘림을 해제합니다. 예를 들어, 프롬프트는 %10<...<%~%<<%#현재 디렉토리의 잘린 표현을 인쇄하고 그 뒤에 %또는 #, 공백이 차례로 표시됩니다. 그렇지 않으면 %<<이 두 문자가 잘릴 문자열에 포함됩니다. %-0<<같지 않지만 지정된 %<<힌트는 오른쪽 여백에서 잘립니다.

잘림은 프롬프트의 각 줄에만 적용되며 포함된 개행 문자(있는 경우)로 구분됩니다. 잘린 프롬프트 줄의 전체 길이가 터미널 너비보다 크거나 잘릴 부분에 새 줄이 포함되어 있으면 잘림 동작이 정의되지 않으며 이후 버전의 셸에서 변경될 수 있습니다. %-n(l.true-text.false-text)사용 가능한 공간이 n 미만인 경우 일부 프롬프트를 삭제하는 데 사용됩니다.

답변2

이것은 매우 간단합니다!

       %d
       %/     Current working directory.  If an integer follows the `%', it spec‐
              ifies a number of trailing components of the current working direc‐
              tory to show; zero means the whole path.  A negative integer speci‐
              fies leading components, i.e. %-1d specifies the first component.

       %~     As %d and %/, but if the  current  working  directory  starts  with
              $HOME,  that  part  is  replaced by a `~'. Furthermore, if it has a
              named directory as its prefix, that part is replaced by a `~'  fol‐
              lowed  by  the  name  of  the  directory, but only if the result is
              shorter than the full path; see Dynamic and Static  named  directo‐
              ries in zshexpn(1).

©man zshmisc

관련 정보