Muestra el nombre del archivo actual para la edición en la línea de comando


10

¿Cómo puedo mostrar la ruta al archivo actual en la línea de comando para escribir un nombre de archivo similar? No quiero una abreviatura que sea reemplazada por el nombre del archivo actual, quiero editar el nombre del archivo, completo con su ruta de directorio. Por ejemplo, quiero :editun archivo con un nombre similar, o en un directorio similar, por ejemplo

vim src/submodule/frontend/frobnicate2.c

y ahora quiero editar ../trunk/src/submodule/frontend/frobnicate.c, y solo quiero insertar ../trunky eliminar el 2, no volver a escribir la ruta completa.

Por supuesto, puedo volver al shell y usar su historial de comandos, o podría copiar y pegar la ruta a través de la GUI, pero estoy buscando una forma más eficiente que no requiera abandonar Vim.

Respuestas:


11

Además de insertar el %registro como ha descubierto, también puede usarlo :edit %<Tab>.

De :help cmdline-special:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

Entonces puede, por ejemplo, usar:

:edit %.orig

a editar file.txt.orig. Para su ejemplo, escriba :e ../trunk/%, presione <Tab>para obtener el nombre del archivo con la ruta relativa y elimine el 2antes de presionar <Enter>.

Puede agregar algunos modificadores a la ruta para modificarlo; Encontré :hque es particularmente útil, obtiene el "dirname" (o "head" en Vim-speak ") de la ruta actual:

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

Incluso puedes usarlo :hvarias veces. Por ejemplo:

:edit %:h:h:h/file.txt

Abrirá file/in/a/deeply/file.txt

También hay una :pque le proporciona la ruta completa y que podría ser útil en su caso: escriba :e %:p, presione <Tab>y edite la ruta según lo desee. Incluso puede utilizar varios modificadores, por ejemplo: :e %:p:h.

Ver :help filename-modifierspara la lista completa.

Nota: si usted <Tab>, Vim ampliará el %. Si usa <C-d>, Vim no expandirá el %(pero lo sustituye %mientras completa el camino).


5

Oh. Busque "nombre de archivo" en :help :! Es muy sencillo: para insertar el especial r egistro , es decir, el nombre del archivo actual.CTRL-R %%


1
Entonces, basándose en su respuesta: para obtener la ruta completa como lo solicitó el OP, haría algo como Ctrl-r =expand('%:p'). Esto usa el registro = .
lcd047

3

Si ha configurado su pathvariable vim , tiene todo el poder del :findcomando, es decir, completar con tabulación los nombres de archivo (¡sin necesidad de especificar la parte del directorio!)

En tu caso, algo como

set path=./**

puede ser todo lo que necesitas para :fin frob<tab>trabajar. Para los detalles morbosos, :help find, :help file-searching.


0

Aquí hay un mapeo que puedes probar:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

Esto guarda el comando actual y luego establece el registro 'a' al nombre del archivo actual. Luego, el último comando se recupera y se agrega con el contenido del registro 'a'. Por supuesto, si tiene algo útil en el registro 'a', esto lo sobrescribirá.

Es posible que desee cambiar los caracteres asignados a otra cosa. Me gusta usar la tecla Alt pero no funciona en algunas terminales.

Como Carpetsmoker señaló en su respuesta, puede cambiar la llamada de función a

expand('%:p')

para forzar el camino completo.


1
Esto eliminaría sin sentido el registro a. Pruebe algo como esto en su lugar:cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.