2009-04-02 20 views
7

tengo la siguiente configuración:Conseguir el camino lógico en VIM cuando hay un enlace simbólico

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

Si hago cd /1/3, y luego pwd, me sale /1/3. Si uso pwd -P, puedo obtener /1/2/3 o pwd -L para forzar /1/3.

En VIM, estoy buscando una manera de obtener el /1/3.
Si abro un archivo en /1/3/foo.txt, y uso algo como fnamemodify(bufname(winbufnr(0)), ':p:h'), devuelve /1/2/3.
¿Cómo puedo decir que me dé el mismo directorio que pwd daría?

+0

Es posible que desee editar en el "qué" de lo que estás tratando de hacer, porque el comportamiento del vim me parece correcto. – dwc

+0

es un sistema de compilación complicado (basado en clearcase) donde las fuentes principales están en algo/code/comp/subcomp/src pero el árbol de trabajo está en algo como/tree/tree1/build/comp. – Mikeage

Respuesta

7

Parece que no se puede, a través de system('pwd -L'). De acuerdo con el vim_use mailing list Vim resuelve automáticamente los enlaces simbólicos hoy en día.

Vea el texto alrededor de :h E773 para justificación; si Vim utilizara enlaces simbólicos en lugar de un nombre de archivo resuelto, sería posible tener el mismo archivo abierto en dos almacenamientos intermedios con dos nombres diferentes, y Vim se confundiría tratando de descubrir dónde debería estar el archivo de intercambio. Ver también en :h version7.txt:

Unix: Al editar un archivo a través de un enlace simbólico al archivo de intercambio usaría el nombre del enlace simbólico. Ahora use el nombre del archivo real, de modo que se detecte dos veces el mismo archivo .

+0

Ok, pregunta de seguimiento. Si ejecuto vim usando "vim 1/3/foo.txt", ¿cómo puedo usar el sistema ('pwd -L')? Si cambio al directorio usando cd%: p: h, ya he saltado al enlace simbólico/1/2/3/ – Mikeage

+0

Sí, si: has ingresado en el directorio, no sé si hay algo que puedas hacer en ese punto. Puedes hacer algo horrible como system ('cd' '' expandir '('%: h ').' "; Pwd -L ') antes de: hacer un CD propio de Vim pero no estar seguro para qué lo estás usando, puede no será suficiente –

1

Respuesta corta:

Usted puede ser capaz de utilizar un montaje de unión como un sustituto de enlaces simbólicos. Ver man mount.

Respuesta larga:

tuve un problema similar, ya que tengo un corto enlace simbólico a una partición montada,

/e -> /media/iam/ext4test 

también tengo un enlace simbólico ~/.vimrc -> /e/configs/.vimrc.

Me estaba metiendo en problemas al intentar ingresar a Netrw en el directorio contenedor (estaba aterrizando en ~, pero no pude ver una manera robusta de evitar eso, teniendo en cuenta el deseo de usar Marcadores, etc.).

Mi solución fue, después de considerar posiblemente cambiar el punto de montaje, es que puede agregar puntos de montaje. Así que después de unlink e, utilicé mount --bind /media/iam/ext4test /e.

Ahora, si estoy en /e/configs/.vimrc y uso :edit . (o :e. etc.), me abrirá en Netrw en el directorio que lo contiene.

Editar:

El comando mount --bind hace cambios transitorios.Para montaje en un aprieto permanente, añado lo siguiente para /etc/fstab,

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

En general, esta puede ser una alternativa útil, pero (a) requiere permisos de raíz y (b) no es adecuada para muchas asignaciones diferentes. En el caso de la pregunta original, este era un sistema de compilación en un servidor compartido que podría albergar cincuenta o incluso 500 árboles fuente, por lo que no sería relevante. – Mikeage

+0

Estaba siendo flojo, debería haber hecho una nueva pregunta y respuesta, pero al menos su pregunta tenía algunos de los términos de búsqueda que estaba usando. Como parte de mi respuesta * fue * aquí, es decir, Vim no funciona bien con la forma en que espero que se comporte, agregué mi solución a esta página. Aquí hay una broma: ¿has probado Emacs? Puede hacer lo que esperas con enlaces simbólicos. (Es cierto que no estoy calificado para considerar hospedajes, etc.) JK Estoy seguro de que estás usando Vim por muchas razones. –

Cuestiones relacionadas