이 상황과 관련하여:
cd ~/temp
ln -s /var/lib/alsa alsa
cd alsa
pwd -> /home/<username>/temp/alsa
하지만 출력 디렉토리에서 파일을 열면 상태 줄에 다음과 같이 표시됩니다 pwd
.vim
/var/lib/alsa/asound.state
pwd
링크를 클릭하는 대신 결과를 표시하려면 어떻게 해야 합니까 ?
나는 다음을 사용하고 있습니다 :
set statusline=%F%=%m\ %y\ \%r\ %1*\ \%l\:\%c\ \%2*\ \ \%p%%\ \
답변1
vim으로 이 작업을 직접 수행할 수는 없습니다. vim은 항상 링크를 구문 분석하여 실제 파일 이름을 찾습니다.
에서 :h E773
:
For symbolic links Vim resolves the links to find the name of the actual file.
The swap file name is based on that name. Thus it doesn't matter by what name
you edit the file, the swap file name will normally be the same.
외부 명령을 사용하여 현재 작업 디렉터리와 %f
상태 줄을 가져올 수 있습니다.
노력하다:
set statusline=%{system('echo\ -n\ $\(pwd\ -L\)')}/%f%=%m\ %y\ \%r\ %1*\ \%l\:\%c\ \%2*\ \ \%p%%\ \
더 많은 정보를 알고 싶다면:
:h E773
:h todo.txt
:h version7.txt
답변2
@Gnouc의 답변은 올바른 방향이지만 내부에서 외부 명령을 호출할 수는 없습니다.상태 표시줄평가하다! 이렇게 하면 커서를 움직이고 문자를 입력할 때마다 새로운 프로세스가 생성되어 Vim의 성능이 저하됩니다(경험한 바와 같이).
:autocmd
현재 버퍼가 변경될 때마다 변수를 업데이트하고 상태 줄 자체에서 해당 변수를 매우 효율적으로 사용하는 두 부분으로 나누는 것이 좋습니다 .
set statusline=%{exists('b:actualCwd')?b:actualCwd:getcwd()}/%f%=%m\ %y\ \%r\ %1*\ \%l\:\%c\ \%2*\ \ \%p%%\ \
autocmd BufEnter * let b:actualCwd = system('echo -n $(pwd -L)')