libro - vim python
Renombrando el archivo actual en Vim (19)
¿Cómo debo cambiar el nombre de mi archivo actual en Vim?
Por ejemplo:
- Estoy editando
person.html_erb_spec.rb
- Me gustaría que se le
person.haml_spec.rb
nombre aperson.haml_spec.rb
- Me gustaría continuar editando
person.haml_spec.rb
¿Cómo voy a hacer esto, con elegancia?
Corto, seguro, sin plugin:
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control + R , # se expandirá instantáneamente a un alternate-file (ruta editada anteriormente en la ventana actual) antes de presionar Intro . Eso nos permite revisar qué es exactamente lo que vamos a eliminar. Utilizando tubo |
en tal caso, no es seguro, porque si sav
falla por alguna razón, #
aún apuntará a otro lugar (o a nada). Eso significa que !rm #
o delete(expand(#))
puede eliminar archivos completamente diferentes! Así que hágalo a mano con cuidado o use un buen script (se mencionan en muchas respuestas aquí)
Educativo
... o intente construir una función / comando / script usted mismo. Comenzar desde algo simple como:
command! -nargs=1 Rename saveas <args> | call delete(expand(''#'')) | bd #
después de vimrc recargar, simplemente escriba :Rename new_filename
. ¿Cuál es el problema con este comando?
Prueba de seguridad 1: ¿Qué hace :Rename
sin argumento?
Sí, borra el archivo oculto en ''#''!
Solución: se puede utilizar por ejemplo. Condiciones o declaración de try
así:
command! -nargs=1 Rename try | saveas <args> | call delete(expand(''#'')) | bd # | endtry
Prueba de seguridad 1:: :Rename
(sin argumento) generará un error:
E471: Argumento requerido
Prueba de seguridad 2: ¿Qué pasa si el nombre será el mismo que el anterior?
Prueba de seguridad 3: ¿Qué sucede si el archivo se encuentra en una ubicación diferente a la actual?
Arreglalo tu mismo. Para facilitar la lectura puede escribirlo de esta manera:
function! s:localscript_name(name):
try
execute ''saveas '' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
notas
!rm #
es mejor que!rm old_name
-> no necesita recordar el nombre antiguo!rm <CR>#
es mejor que!rm #
cuando lo hace a mano -> verá lo que realmente elimina (motivo de seguridad)!rm
generalmente no es muy seguro ...mv
a una ubicación de basura es mejorcall delete(expand(''#''))
es mejor que el comando de shell (sin uso del sistema operativo) pero es más largo de escribir e imposible de usar control + Rtry | code1 | code2 | tryend
try | code1 | code2 | tryend
-> cuando se produce un error mientras código1, no ejecute código2:sav
(o:saveas
) es equivalente a:f new_name | w
:f new_name | w
- ver file_f - y conserva el historial de deshacerexpand(''%:p'')
muestra la ruta completa de su ubicación (%
) o la ubicación de un archivo alternativo (#
)
¿Qué tal esto (mejorado por la sugerencia de Jake):
:exe "!mv % newfilename" | e newfilename
El comando se llama :saveas
, pero desafortunadamente no eliminará el archivo anterior, tendrá que hacerlo manualmente. Ver :help saveas
para más información.
EDITAR:
La mayoría de las instalaciones de vim tienen un explorador de archivos integrado, que puede utilizar para tales operaciones. Probar :Explore
en modo de comando (en realidad lo asignaría a una tecla de función, es muy útil). Puede cambiar el nombre de los archivos con R
o eliminarlos con D
, por ejemplo. Pero presionar <F1>
en el explorador le dará una mejor visión general.
Este pequeño script no es perfecto (el retorno de carro adicional que tiene que presionar) pero se hace el trabajo.
function Rename()
let new_file_name = input(''New filename: '')
let full_path_current_file = expand("%:p")
let new_full_path = expand("%:p:h")."/".new_file_name
bd
execute "!mv ".full_path_current_file." ".new_full_path
execute "e ".new_full_path
endfunction
command! Rename :call Rename()
nmap RN :Rename<CR>
Hay un pequeño plugin que te permite hacer esto.
Hay un plugin mucho más grande llamado eunuch por Tim Pope que incluye una función de cambio de nombre, así como algunas otras funciones (eliminar, buscar, guardar todo, chmod, edición de sudo, ...).
Para renombrar un archivo en vim-eunuch:
:Move filename.ext
Comparado con rename.vim:
:rename[!] filename.ext
Guarda algunas pulsaciones de teclas :)
Hay una función en .vimrc de Gary Bernhardt que maneja esto.
function! RenameFile()
let old_name = expand(''%'')
let new_name = input(''New file name: '', expand(''%''), ''file'')
if new_name != '''' && new_name != old_name
exec '':saveas '' . new_name
exec '':silent !rm '' . old_name
redraw!
endif
endfunction
map <leader>n :call RenameFile()<cr>
Lo estoy haciendo con el plugin NERDTree:
:NERDTreeFind
luego presione m
Para cambiar el nombre puede elegir (m)ove the current node
y cambiar el nombre del archivo. También hay opciones como borrar, copiar, mover, etc ...
Lo recomendaría :Rename
del eunuch de tpope por esto.
También incluye un montón de otros comandos útiles.
El comando Cambiar nombre se define de la siguiente manera en la actualidad (consulte el repositorio para ver si hay actualizaciones):
command! -bar -nargs=1 -bang -complete=file Rename :
/ let s:file = expand(''%:p'') |
/ setlocal modified |
/ keepalt saveas<bang> <args> |
/ if s:file !=# expand(''%:p'') |
/ call delete(s:file) |
/ endif |
/ unlet s:file
No sé si este es el método "más fácil", pero asumiendo que ya ha guardado su archivo (: w) invocaría el shell (: sh) y haría un cp foo foo.bak simple Para volver al editor use Ctrl-D / Salir. Lista útil de comandos del editor vi en este enlace
Otra forma es simplemente usar netrw, que es una parte nativa de vim.
:e path/to/whatever/folder/
Luego hay opciones para borrar, renombrar, etc.
Aquí hay un mapa de teclado para abrir netrw a la carpeta del archivo que está editando:
map <leader>e :e <C-R>=expand("%:p:h") . ''/''<CR><CR>
Si usa git y ya tiene el complemento fugitive.vim tpope, simplemente:
:Gmove newname
Esta voluntad:
- Renombra tu archivo en el disco.
- Renombra el archivo en git repo.
- Vuelve a cargar el archivo en el búfer actual.
- Preservar deshacer la historia.
Si su archivo aún no se agregó a un repositorio de git, primero agréguelo:
:Gwrite
También puedes hacerlo usando netrw.
El comando explorar abre netrw en el directorio del archivo abierto
:E
Mueva el cursor sobre el archivo que desea renombrar:
R
Escriba el nuevo nombre, presione enter, presione y.
También puedes usar: f seguido de: w
Vim tiene una función de rename
, pero desafortunadamente no retiene el historial.
La forma más fácil para cambiar el nombre de un archivo sin perder el historial sería:
:saveas new_file_name
:call delete(expand(''#:p''))
expand(''#:p'')
devuelve la ruta completa del archivo anterior.
Utilice :bd #
si también desea eliminar el archivo anterior de la lista de búferes.
O crea un plugin
Si desea usar un comando rápido para cambiar el nombre del archivo, agregue un nuevo archivo en ~ / .vim / plugin con el siguiente contenido:
function! s:rename_file(new_file_path)
execute ''saveas '' . a:new_file_path
call delete(expand(''#:p''))
bd #
endfunction
command! -nargs=1 -complete=file Rename call <SID>rename_file(<f-args>)
El comando Rename
te ayudará a cambiar rápidamente el nombre de un archivo.
:sav newfile | !rm #
Tenga en cuenta que no elimina el archivo antiguo de la lista de búferes. Si eso es importante para ti, puedes usar lo siguiente:
:sav newfile | bd# | !rm #
Si el archivo ya está guardado:
:!mv {file location} {new file location}
:e {new file location}
Ejemplo:
:!mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
:e src/test/scala/myNewFile.scala
Requisitos de permiso:
:!sudo mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
Guardar como:
:!mv {file location} {save_as file location}
:w
:e {save_as file location}
Para Windows sin verificar
:!move {file location} {new file location}
:e {new file location}
sav person.haml_spec.rb | call delete(expand(''#''))
- Escriba el archivo mientras edita -
:w newname
- para crear una copia. - Comience a editar la nueva copia -
:e#
. - (Opcionalmente) elimine la copia antigua -
:!rm oldname
.
En Windows, el tercer paso opcional cambia un poco:
- (Opcionalmente) elimine la copia antigua de Windows -
:!del oldname
.