zsh에서 긴 문자열 자르기

zsh에서 긴 문자열 자르기

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

답변1

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

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

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

Wow lo.. % 

man 1 zshmisc말한다:

프롬프트의 조건부 문자열

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

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

세 번째 형식에서 바로 뒤에 나타날 수 있는 숫자 인수는 [프롬프트에 표시될 수 있는 다양한 문자열의 최대 허용 길이를 지정합니다. 처음 두 형식에서 이 숫자 인수는 음수일 수 있으며, 이 경우 잘림 길이는 현재 프롬프트 줄에 남아 있는 문자 위치 수에서 숫자 인수의 절대값을 빼서 결정됩니다. 길이가 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

관련 정보