Asumiendo que el búfer actual es un archivo abierto para editar, :e
no se muestra E32: No file name
.
Me gustaría tirar uno o todos de:
- El nombre del archivo exactamente como se muestra en la línea de estado, por ejemplo
~\myfile.txt
- Una ruta completa al archivo, p. Ej.
c:\foo\bar\myfile.txt
- Solo el nombre del archivo, por ejemplo
myfile.txt
Respuestas:
TL; DR
:let @" = expand("%")
>esto copiará el nombre del archivo en el registro sin nombre , luego puede usar el viejo
p
para pegarlo. y, por supuesto, puede asignar esto a una clave para un uso más rápido.:nmap cp :let @" = expand("%")<cr>
también puedes usar esto para la ruta completa
:let @" = expand("%:p")
Explicación
Vim utiliza el registro sin nombre para almacenar texto que se ha eliminado o copiado (eliminado), del mismo modo que cuando lo pega, lee el texto de este registro.
Usando
let
podemos almacenar manualmente el texto en el registro usando,:let @" = "text"
pero también podemos almacenar el resultado de una expresión.En el ejemplo anterior, utilizamos la función
expand
que expande comodines y palabras clave. en nuestro ejemplo, usamosexpand('%')
para expandir el nombre del archivo actual. Podemos modificarloexpand('%:p')
para el nombre completo del archivo.Ver
:help let
:help expand
:help registers
para más detallesfuente
unnamedplus
como su uso portapapeleslet @+ = expand("%")
"%:h"
para obtener la ruta completa sin el nombre del archivo.Casi lo que está pidiendo, y podría hacer:
Ctrl+R %
extrae el nombre del archivo actual donde está (símbolo del sistema, búfer de edición, ...). Vea este Consejo Vim para más información.fuente
Ctrl+R %
funciona mientras está eninsert
modo, pero enedit
modoCtrl+R
significa rehacer.Si desea poner el nombre de archivo del búfer actual en su portapapeles a nivel del sistema, intente cambiar el registro a @ +:
Editar 20140421: Normalmente los uso, así que creé algunos accesos directos. Los Vims de Linux aparentemente funcionan de manera ligeramente diferente a los Vims de Mac , por lo que también hay un caso especial para eso. Si pones lo siguiente en tu
~/.vimrc
:Luego, por ejemplo
<leader>cf
, copiará la ruta relativa del búfer actual (el líder predeterminado es la barra invertida (\
)). A menudo los uso para ejecutar comandos en un archivo o hacer otras cosas en la línea de comandos. Realmente no uso el último nombre de archivo / nombre de directorio a menudo.Puede considerar asignaciones más intuitivas como
<leader>cfr
para relativo,<leader>cfa
para absoluto,<leader>cff
solo para nombre de archivo,<leader>cfd
para directorio.fuente
"*
y"+
son equivalentes, por lo que puede prescindir de las comprobaciones de la plataforma y simplemente usar@+
Si lo hace
:reg
, verá el nombre del archivo actual en el%
registro. Puedes pegarlo con"%p
, por ejemplo.Si, como yo, a menudo cambia al búfer 'alternativo', es muy útil que su ruta completa y nombre de archivo se coloquen en el
#
registro. Puedes pegarlo con"#p
, por ejemplo.Nota (en caso de que este sea un comportamiento específico de mi configuración): estoy usando VIM 7.4.52 en Ubuntu 14.04.4 LTS.
fuente
Combinación de información de un par de otras respuestas: si desea extraer la ruta completa actual a un archivo y colocarla en el búfer de comandos en otra ventana, primero haga
:let @" = expand("%:p")
, luego vaya a otra ventana y escribaCtrl+R "
.Útil para copiar un archivo mientras permanece en el mismo directorio y mantiene abierto el antiguo. Por ejemplo:
fuente
Aquí está mi solución:
fuente
Uso xclip para acceder al portapapeles de X, así que uso:
fuente