2009-04-02 14 views
7

があるときVIMで論理パスを取得:は、私は次のセットアップを持っているシンボリックリンク

mkdir /1 
mkdir /1/2 
mkdir /1/2/3 
ln -s /1/2/3 /1/3 

私はcd /1/3を行い、その後、pwd場合、私は/1/3を取得します。 pwd -Pを使用する場合は、/1/2/3、またはpwd -Lを入力して/1/3にすることができます。

VIMでは、私は/1/3を入手する方法を探しています。
/1/3/foo.txtでファイルを開き、fnamemodify(bufname(winbufnr(0)), ':p:h')のようなものを使用すると、/1/2/3が返されます。
pwdと同じディレクトリを私に教えてもらえますか?

+0

あなたはVimの行動が私には正しいようですので、「なぜ」あなたが何をしようとしてので、編集したい場合があります。 – dwc

+0

主なソースは/ code/comp/subcomp/srcにありますが、作業ツリーは/ tree/tree1/build/compのような複雑なビルドシステム(クリアケースベース)です。 – Mikeage

答えて

7

system('pwd -L')以外では表示されません。 vim_use mailing listによれば、Vimは現在シンボリックリンクを自動的に解決します。

rationaleについては:h E773を参照してください。 Vimがファイル名を解決するのではなくシンボリックリンクを使用した場合、2つの異なる名前で2つのバッファに同じファイルを開くことができ、Vimはスワップファイルの場所を把握しようとすると混乱します。 :h version7.txtでも参照してください:

UNIXの場合:シンボリックリンクを通じてファイルを編集する場合は、スワップファイルは、名前のシンボリックリンクの を使用します。実際のファイルの名前を使用して、同じ ファイルを2回編集することが検出されるようにします。

+0

Ok、フォローアップの質問。 "vim 1/3/foo.txt"を使ってvimを実行すると、どうすればsystem( 'pwd -L')を使うことができますか? cd%:p:hを使用してディレクトリに変更した場合、すでにシンボリックリンクにジャンプしています/ 1/2/3/ – Mikeage

+0

もしあなたが:ディレクトリにcdすれば、あなたができることがあるかどうかわかりませんその点。あなたはsystem( 'cd' '。expand('%:h ')。' '; pwd -L')のような何か恐ろしいことをする前に:vim自体をcdしているが、十分ではありません。 –

1

短い答え:

あなたはシンボリックリンクの代わりとして結合マウントを使用することができるかもしれません。 man mountを参照してください。

長い答え:

私がマウントされたパーティションに短いシンボリックリンクを持っているように私はまた、シンボリックリンク~/.vimrc -> /e/configs/.vimrcを持って、

/e -> /media/iam/ext4test 

を同様の問題がありました。

Netrwに格納されているディレクトリ(私は~に着いていましたが、ブックマークを使用したいという気持ちに留まらず、堅牢な方法を知ることができませんでした。

私の解決策は、おそらくマウントポイントを変更することを考慮した上で、マウントポイントを追加することでした。だからunlink eの後、私はmount --bind /media/iam/ext4test /eを使った。

ここで/e/configs/.vimrcにあり、:edit .(または:e.など)を使用している場合、Netrwに含まれているディレクトリが表示されます。

編集:

コマンドmount --bindが一時変更を行います。永久バインドマウントのために、私は/etc/fstabに以下を追加し、

# <file system>  <mount point> <type> <options> <dump> <pass> 
/media/iam/ext4test /e    none bind  0  0 
+0

一般に、これは有用な選択肢ですが、(a)はroot権限が必要であり、(b)多くの異なるマッピングには適していません。元の質問の場合、これは50個または500個のソースツリーをホストする可能性のある共有サーバー上のビルドシステムであったため、関係はありません。 – Mikeage

+0

私は怠け者でした。私は新しい質問と回答をしてはいけませんでしたが、あなたの質問には、少なくとも私が使っていた検索用語がいくつかありました。私の答え*の一部がここにあったので、Vimはどうやって動作するのかとうまくいきませんでした。私は回避策をこのページに貼り付けました。ここに冗談があります:あなたはEmacsを試しましたか?シンボリックリンクで期待していることをするかもしれません。 (確かに私はホスティングなどを検討する資格がありません)JK私はVimを多くの理由で使用していると確信しています。 –

関連する問題