¿Cómo puedo cambiar el nombre del archivo que estoy editando?

38

¿Es posible cambiar el nombre del archivo que estoy editando desde Vim? Actualmente lo que hago es salir de Vim, cambiar el nombre del archivo y abrirlo desde Vim nuevamente.

thameera
fuente
Estoy interesado en hacer esto en neovim
Miguel de Val-Borro

Respuestas:

35

Puede guardar el archivo con un nombre diferente usando :w. Pero esta operación no eliminará el archivo antiguo y el archivo 'antiguo' permanece en su búfer, por lo que cualquier cambio se aplicará a su archivo 'antiguo'.

:saveasguarda su nuevo archivo y lo abre en un nuevo búfer. Pero no elimina el archivo anterior.

Yo uso tpope / vim-eneuch para los :Movearchivos.

: Mover: cambie el nombre de un búfer y el archivo en el disco simultáneamente.

OrangeTux
fuente
Una desventaja de :wo :saveases que perderá el permiso de ejecución si estaba editando un script. netrwRenombrar mantendrá los permisos.
wisbucky
11

Puede ir a Netrw y cambiar el nombre del archivo allí.

Si el archivo que está editando está en el directorio actual, haga lo siguiente:

:edit .

Navegue hasta el archivo, presione Ry cambie el nombre. Presione Enterpara editar el archivo.

Sin embargo, hay una advertencia: el búfer original permanece en la lista de búferes. Si lo cambias, está vacío.

Si el archivo que está editando está en un directorio diferente, puede cambiar al directorio del archivo con:

:cd %:p:h

Si no desea cambiar el directorio para toda la sesión de Vim, sino solo para el búfer actual, puede hacer lo siguiente:

:lcd %:p:h
Detener el daño continuo a Mónica
fuente
2
Escribir directamente :edit %:p:htambién parece funcionar.
Mladen Jablanović
:Etambién abrirá netrw
wisbucky
6

He estado usando el complemento Rename2 para esto durante años. Cambia el nombre del búfer actual y el archivo en el disco:

:Rename {newname}

EDITAR: Encontré esto un .vimrcarchivo en github :

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>
craigp
fuente
3

La mejor manera es usar :Move, como dijo OrangTux. Para completar, también puede ejecutar comandos de terminal en editores vi usando bang ( !) en modo comando.

:!mv {current_file} {new_name}
:e {new_name}

Sin embargo, este método no elimina el búfer antiguo de su lista de búferes.

Encuesta Cody
fuente