Cómo pasar el nombre del archivo actual con una ruta diferente a la línea de comando

8

¿Hay alguna forma de hacer que el símbolo especial %funcione con los nombres de ruta en la línea de comando? Por ejemplo, me gustaría hacer:

:diffsplit Path\to\other\directory\%

Para poder hacer una @:comparación rápida de archivos del mismo nombre. Sin embargo, esto solo abre un nuevo buffer llamado %.

Por supuesto que podría hacer:

:exe 'diffsplit Path\to\other\directory\'.expand('%')

Pero esto es engorroso ya que no puedo tabular directorios completos al escribir el comando.

¿Hay alguna otra mejor manera de hacer esto?

Aquí hay una pregunta relacionada , pero no aborda mi situación exactamente.

Editar: solo para aclarar, me gustaría poder reutilizar el comando exactamente para diferentes archivos. Por lo tanto, una solución que simplemente complete automáticamente el archivo actual en la línea de comando no funcionará. El mismo comando debe funcionar para diferentes nombres de archivo.

Vaso41
fuente
Puede usar un cmap para% de modo que se expanda a nombre de archivo, que podría ayudar: D
SibiCoder
Esto tiene el mismo problema que tiene la solución de Kent. Tan pronto como presione %, se rellenará con el nombre del archivo, pero cuando quiera volver a usar esa línea, el nombre del archivo antiguo seguirá presente. Me gustaría que el% inserte dinámicamente el nombre de archivo actual, sea lo que sea en ese momento sin tener que volver a escribirlo.
Tumbler41
2
:diffsplit Path/to/other/directory/%:t
Sato Katsura
Wow, pensé que lo había intentado, pero tienes razón, ¡eso funciona! ¡Gracias! Si quieres ponerlo en una respuesta, lo aceptaré.
Tumbler41

Respuestas:

10

Los caracteres especiales (ver :h cmdline-special) y los modificadores de nombre de archivo (ver :h filename-modifiers) se expanden en la línea de comando, por lo que:

:diffsplit Path/to/other/directory/%:t
Sato Katsura
fuente
1

Entonces resulta que es un estúpido problema de Windows. El remedio para esto es simplemente usar barras diagonales en el nombre de la ruta. es decir, :diffsplit Path/to/other/directory/%funciona bien.

He remediado esto en mi sistema usando la opción set shellslashque por defecto usa barras inclinadas incluso en Windows.

Vaso41
fuente
Sí, la barra invertida se usa para escapar del significado especial de %, y es el separador de ruta predeterminado en Windows. Vim no puede decir cuál tenías en mente.
Ingo Karkat
Mira, pensé en eso. Así que pensé que podría hacer un directory\\%pero que todavía no funcionaba. IDK, pero supongo que no importa, ya que las barras diagonales resuelven el problema.
Tumbler41
0

No sé si esto está bien para ti:

:diffsplit Path/to/somewhere/<c-r>%

Solo una tecla más a su original, la <C-r>, para completar el %valor de registro.

Kent
fuente
Esto todavía no permite el uso @:para archivos futuros ya que "codifica" el nombre del archivo actual.
Tumbler41
luego ajuste un comando personalizado como :Mydiff /path/to/there/para que la ruta se pueda completar con pestañas. solo pasa esto a tu comando / función conexec
Kent