tutorial libro guardar editar descargar commands comandos basicos vim vi

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 a person.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 mejor

  • call 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 + R

  • try | 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 deshacer

  • expand(''%: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 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:

  1. Renombra tu archivo en el disco.
  2. Renombra el archivo en git repo.
  3. Vuelve a cargar el archivo en el búfer actual.
  4. 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 .