Pregunta

¿Cómo debo cambiar el nombre de mi archivo actual en Vim?

Por ejemplo:

  • estoy editando person.html_erb_spec.rb
  • Me gustaría cambiarle el nombre a person.haml_spec.rb
  • me gustaria seguir editando person.haml_spec.rb

¿Cómo haría esto con elegancia?

¿Fue útil?

Solución

Hay un pequeño complemento que le permite hacer esto.

Otros consejos

El comando se llama :saveas, pero desafortunadamente no eliminará su archivo anterior, tendrá que hacerlo manualmente. consulte :help saveas para obtener más información.

EDIT:

La mayoría de las instalaciones de vim tienen un explorador de archivos integrado, que puede usar para tales operaciones. Pruebe :Explore en modo 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.

Si usa git y ya tiene el complemento de tpope fugitive.vim entonces simplemente:

:Gmove newname

Esto:

  1. Cambie el nombre de su archivo en el disco.
  2. Cambie el nombre del archivo en git repo.
  3. Vuelva a cargar el archivo en el búfer actual.
  4. Conservar el historial de deshacer.

Si su archivo aún no se agregó a un repositorio de git, primero agréguelo:

:Gwrite
  • Escriba el archivo mientras edita - :w newname - para crear una copia.
  • Comience a editar la nueva copia - :e#.
  • (Opcionalmente) elimine la copia anterior - :!rm oldname.

En Windows, el tercer paso opcional cambia un poco:

  • (Opcionalmente) elimine la copia antigua de Windows - :!del oldname.

Lo estoy haciendo con el complemento NERDTree:

:NERDTreeFind

entonces presione metro

Para cambiar el nombre puedes elegir (m)ove the current node y cambiar el nombre del archivo.También hay opciones como borrar, copiar, mover, etc...

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}

Recomiendo :Rename de eunuch de tpope para esto.

También incluye muchos otros comandos útiles.

El comando Cambiar nombre se define de la siguiente manera en este momento (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

Corto, seguro, sin complemento:

:sav new_name
:!rm <C-R>#  // or !del <C-R># for windows

control + R , # se expandirá instantáneamente a un alternate-file (ruta previamente editada en la ventana actual) antes de presionar Enter . Eso nos permite revisar qué es exactamente lo que vamos a eliminar. Usar pipe | en tal caso es no seguro, porque si sav falla por alguna razón, # aún señalará a otro lugar (o nada). ¡Eso significa que !rm # o delete(expand(#)) pueden eliminar archivos completamente diferentes! 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. Comience desde algo simple como:

command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #

después de la recarga de vimrc, simplemente escriba :Rename new_filename. ¿Cuál es el problema con este comando?

Prueba de seguridad 1: ¿Qué significa :Rename sin argumento?

Sí, elimina el archivo oculto en '#'!

Solución: puede usar, por ejemplo. condiciones o try declaración como esa:

command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry

Prueba de seguridad 1: !rm old_name (sin argumento) arrojará 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 estará en una ubicación diferente a la real?

Arreglalo tú 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 <C-R># es mejor que !rm - > no necesitas recordar el antiguo nombre

  • mv es mejor que call delete(expand('#')) cuando lo haces a mano - > verá lo que realmente elimina (razón de seguridad)

  • try | code1 | code2 | tryend generalmente no es muy seguro ... :sav a una ubicación de basura es mejor

  • :saveas es mejor que el comando de shell (sistema operativo independiente) pero más largo para escribir e imposible de usar control + R

  • :f new_name | w - > cuando se produce un error mientras el código1, no ejecute el código2

  • expand('%:p') (o %) es equivalente a <=> - vea file_f - y conserva el historial de deshacer

  • <=> proporciona la ruta completa de su ubicación (<=>) o la ubicación del archivo alternativo (<=>)

También puedes hacerlo usando netrw

El comando de exploración abre netrw en el directorio del archivo abierto

:E

Mueva el cursor sobre el archivo que desea renombrar:

R

Escriba el nuevo nombre, presione Intro, presione y.

sav person.haml_spec.rb | call delete(expand('#'))

Hay & # 8217; una función en Gary Bernhardt & # 8217 ; s .vimrc 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>

¿Qué tal esto (mejorado por la sugerencia de Jake):

:exe "!mv % newfilename" | e newfilename

Vim tiene una función rename, pero desafortunadamente no retiene el historial.

La forma más fácil de 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.

Use :bd # si también desea eliminar el archivo anterior de la lista de búfer.

O crea un complemento

Si desea utilizar 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 lo ayudará a cambiar rápidamente el nombre de un archivo.

Hay un complemento visiblemente más grande llamado vim-eunuch de Tim Pope que incluye una función de cambio de nombre como así como algunas otras cosas (eliminar, buscar, guardar todo, chmod, sudo edit, ...).

Para cambiar el nombre de un archivo en vim-eunuch:

:Move filename.ext

Comparado con rename.vim:

:rename[!] filename.ext

Guarda algunas teclas :)

También puede usar: f seguido de: w

No sé si este es el & "; el más fácil &"; método, pero suponiendo que ya haya guardado su archivo (: w) invocaría el shell (: sh) y haría un simple cp foo foo.bak Para volver al editor use Ctrl-D / Exit. Lista útil de los comandos del editor vi en este enlace

:!mv % %:h/new_name

Registrarse % contiene el nombre del archivo actual. '%:h' muestra el directorio 'head' que contiene el archivo actual, por ejemplo: %:h devuelve /abc/def cuando la ruta completa de su archivo es abc/dev/my.txt

Este pequeño script no es perfecto (el retorno de carro adicional que tienes que presionar) pero 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>

Otra forma es usar netrw, que es una parte nativa de vim.

:e path/to/whatever/folder/

Luego hay opciones para eliminar, renombrar, etc.

Aquí hay un mapa de teclas para abrir netrw en la carpeta del archivo que está editando:

map <leader>e :e <C-R>=expand("%:p:h") . '/'<CR><CR>

:sav newfile | !rm #

Tenga en cuenta que no elimina el archivo antiguo de la lista de búfer. Si eso es importante para usted, puede usar lo siguiente en su lugar:

:sav newfile | bd# | !rm #

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top