pegar - Nombre del archivo Yank/ruta del búfer actual en Vim
vim comandos (7)
Aquí está mi solución:
" filename / dirname of the current file {{{
" copy result to the system clipboard and echo the result
" the cb> prompt means the clipboard
" *f*ile *n*ame, ex. init.vim
map <Leader>fn :let @+ = expand("%:t") /| echo ''cb> '' . @+<CR>
" *f*ile *p*ath, ex. /home/user/nvim/init.vim
map <Leader>fp :let @+ = expand("%:p") /| echo ''cb> '' . @+<CR>
" *d*irectory *p*ath, ex. /home/user/nvim
map <Leader>dp :let @+ = expand("%:p:h") /| echo ''cb> '' . @+<CR>
" *d*irectory *n*ame, ex. nvim
map <Leader>dn :let @+ = expand("%:p:h:t") /| echo ''cb> '' . @+<CR>
" }}}
Suponiendo que el búfer actual es un archivo abierto para editar, entonces :e
no muestra E32: No file name
.
Me gustaría tirar uno o todos:
- El nombre del archivo exactamente como se muestra en la línea de estado, por ejemplo
~/myfile.txt
- Una ruta completa al archivo, por ejemplo,
c:/foo/bar/myfile.txt
- Solo el nombre del archivo, p. Ej.
myfile.txt
Casi lo que está pidiendo, y podría ser: Ctrl+R %
extrae el nombre del archivo actual en el lugar en el que se encuentra (símbolo del sistema, búfer de edición, ...). Vea este consejo de Vim para más.
Combinando información de un par de otras respuestas: si quiere tirar de la ruta completa actual a un archivo y ponerla en el búfer de comando en otra ventana, primero haga :let @" = expand("%:p")
, luego muévase a otra ventana y escriba Ctrl+R "
.
Útil para copiar un archivo mientras permanece en el mismo directorio y mantener abierto el anterior. Por ejemplo:
Inicio : Edición de src / com / benatkin / paint / shapes / Circle.java
Tipo
:let @" = expand("%:p")
(La ruta se extrae al búfer principal del portapapeles).Abra una nueva ventana con
:sp
Escriba
:e Ctrl+R"
Use las teclas de flecha para volver a Círculo y cámbielo a Cuadrado, y presione <CR>
Fin : Edición de src / com / benatkin / paint / shapes / Square.java
Prueba esto:
:let @" = expand("%")
esto copiará el nombre del archivo en el registro unamed, luego puede usar la antigua ''p'' para pegarlo. y, por supuesto, puede asignar esto a una clave para un uso más rápido.
:nmap cp :let @" = expand("%")
también puedes usar esto para la ruta completa
:let @" = expand("%:p")
uso: ayuda a expandir para más detalles
Si desea poner el nombre de archivo del búfer actual en su portapapeles a nivel de sistema, intente cambiar el registro a @ +:
" relative path
:let @+ = expand("%")
" full path
:let @+ = expand("%:p")
" just filename
:let @+ = expand("%:t")
Editar 20140421: los uso comúnmente, así que creé algunos accesos directos. Parece que Linux Vims funciona de forma ligeramente diferente a Mac Vims , por lo que también hay un caso especial para eso. Si pones lo siguiente en tu ~/.vimrc
:
" copy current file name (relative/absolute) to system clipboard
if has("mac") || has("gui_macvim") || has("gui_mac")
" relative path (src/foo.txt)
nnoremap <leader>cf :let @*=expand("%")<CR>
" absolute path (/something/src/foo.txt)
nnoremap <leader>cF :let @*=expand("%:p")<CR>
" filename (foo.txt)
nnoremap <leader>ct :let @*=expand("%:t")<CR>
" directory name (/something/src)
nnoremap <leader>ch :let @*=expand("%:p:h")<CR>
endif
" copy current file name (relative/absolute) to system clipboard (Linux version)
if has("gui_gtk") || has("gui_gtk2") || has("gui_gnome") || has("unix")
" relative path (src/foo.txt)
nnoremap <leader>cf :let @+=expand("%")<CR>
" absolute path (/something/src/foo.txt)
nnoremap <leader>cF :let @+=expand("%:p")<CR>
" filename (foo.txt)
nnoremap <leader>ct :let @+=expand("%:t")<CR>
" directory name (/something/src)
nnoremap <leader>ch :let @+=expand("%:p:h")<CR>
endif
Entonces, por ejemplo, <leader>cf
copiará la ruta relativa del búfer actual (el líder predeterminado es la barra diagonal inversa ( /
)). A menudo los utilizo para ejecutar comandos en un archivo o hacer otras cosas en la línea de comando. Realmente no uso el último nombre de archivo / directorio a menudo.
Puede considerar asignaciones más intuitivas como <leader>cfr
para relativo, <leader>cfa
para absoluto, <leader>cff
para solo nombre de archivo, <leader>cfd
para directorio.
Si lo hace :reg
, verá el nombre del archivo actual en el registro %
. Puede pegarlo con "%p
, por ejemplo.
Si, como yo, a menudo cambias al búfer ''alternativo'', es muy útil que su nombre completo de ruta y archivo se ponga en el registro #
. Puedes pegarlo con "#p
, por ejemplo.
Nota (en caso de que esto sea un comportamiento específico de mi configuración): estoy usando VIM 7.4.52 en Ubuntu 14.04.4 LTS.
Utilizo xclip para acceder al portapapeles de X, así que utilizo:
nmap <localleader>d :call system("xclip -i -selection clipboard", expand("%:p"))<CR>