Vim - ステータスバーとリンク

Vim - ステータスバーとリンク

この状況に関して:

cd ~/temp
ln -s /var/lib/alsa alsa
cd alsa
pwd -> /home/<username>/temp/alsa

ただし、出力ディレクトリでファイルを開くと、ステータス行に次のように表示されますpwdvim

/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現在のバッファが変更されるたびに変数を更新し、ステータス行自体からその変数を非常に効率的に使用する2つの部分に分割することをお勧めします。

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)')

関連情報