2009-04-02 9 views
7

J'ai la configuration suivante:Obtenir le chemin logique dans vim quand il y a un lien symbolique

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

Si je cd /1/3, puis pwd, je reçois /1/3. Si j'utilise pwd -P, je peux obtenir /1/2/3, ou pwd -L pour forcer /1/3.

Dans VIM, je cherche un moyen d'obtenir le /1/3.
Si j'ouvre un fichier dans /1/3/foo.txt, et j'utilise quelque chose comme fnamemodify(bufname(winbufnr(0)), ':p:h'), il renvoie /1/2/3.
Comment puis-je lui donner le même répertoire que pwd donnerait?

+0

Vous pouvez modifier dans le « pourquoi » de ce que vous essayez de faire, parce que le comportement de vim semble correct pour moi. – dwc

+0

C'est un système de compilation compliqué (basé sur le clearcase) où les sources principales sont quelque chose/code/comp/sous-comp/src mais l'arbre de travail est dans quelque chose comme/tree/tree1/build/comp. – Mikeage

Répondre

7

Il semble que vous ne pouvez pas, autre que via system('pwd -L'). Selon le vim_use mailing list Vim résout automatiquement les liens symboliques de nos jours.

Voir le texte autour de :h E773 pour la justification; si Vim passait par des liens symboliques au lieu du nom de fichier résolu, il serait possible d'avoir le même fichier ouvert dans deux tampons sous deux noms différents, et Vim deviendrait confus en essayant de comprendre où le fichier d'échange devrait être. Voir aussi dans :h version7.txt:

Unix: Lors de l'édition d'un fichier via un lien symbolique avec le fichier d'échange utiliserait le nom du lien symbolique. Maintenant, utilisez le nom du fichier actuel, de sorte que l'édition du même fichier deux fois est détectée.

+0

Ok, question de suivi. Si je lance vim en utilisant "vim 1/3/foo.txt", comment puis-je utiliser system ('pwd -L')? Si je change dans le répertoire en utilisant cd%: p: h j'ai déjà sauté dans le lien symbolique/1/2/3/ – Mikeage

+0

Ouais si vous: cd dans le répertoire, je ne sais pas s'il y a quelque chose que vous pouvez faire à ce point. Vous pouvez faire quelque chose d'horrible comme system ('cd' '. Expand ('%: h ').' "; Pwd -L ') avant de: cd'importer Vim lui-même mais vous ne savez pas à quoi vous l'utilisez, il peut pas assez. –

1

Réponse courte:

Vous pouvez être en mesure d'utiliser de support de fixations en remplacement de liens symboliques. Voir man mount.

Réponse longue:

j'ai eu un problème similaire, comme je l'ai un court lien symbolique vers une partition montée,

/e -> /media/iam/ext4test 

J'ai aussi un lien symbolique ~/.vimrc -> /e/configs/.vimrc. J'ai eu des problèmes en essayant d'apparaître dans Netrw dans le répertoire contenant (j'arrivais en ~, mais je ne pouvais pas voir une manière robuste d'éviter cela, en gardant à l'esprit le désir d'utiliser des signets, etc.). Ma solution était, après avoir envisagé de changer le point de montage, est que vous pouvez ajouter des points de montage. Donc, après unlink e, j'ai utilisé mount --bind /media/iam/ext4test /e. Maintenant, si je suis en /e/configs/.vimrc et que j'utilise :edit . (ou :e. etc), cela me fera apparaître dans Netrw dans le répertoire contenant.

Edit:

La commande mount --bind apporte des modifications transitoires.Pour une liaison permanente montage, ajouter ce qui suit à /etc/fstab,

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

En général, cela peut être une alternative utile, mais il (a) nécessite des permissions root et (b) ne convient pas à de nombreux mappages différents. Dans le cas de la question d'origine, il s'agissait d'un système de construction sur un serveur partagé qui pouvait héberger cinquante ou même 500 arbres source, donc ce ne serait pas pertinent. – Mikeage

+0

J'étais paresseux, j'aurais dû poser une nouvelle question et répondre, mais votre question avait au moins quelques-uns des termes de recherche que j'utilisais. Comme une partie de ma réponse * était * ici, c'est-à-dire que Vim ne joue pas bien avec la façon dont je m'attends à ce qu'elle se comporte, j'ai viré ma solution de contournement sur cette page. Voici une blague: avez-vous essayé Emacs? Il peut faire ce que vous attendez avec des liens symboliques. (Certes, je ne suis pas qualifié pour considérer les hébergements, etc.) JK Je suis sûr que vous utilisez Vim pour plusieurs raisons. –

Questions connexes