Como posso renomear o arquivo que estou editando?

38

É possível renomear o arquivo que estou editando no Vim? Atualmente, o que faço é sair do Vim, renomear o arquivo e abrir a partir do Vim novamente.

thameera
fonte
Estou interessado em fazer isso em neovim
Miguel de Val-Borro

Respostas:

35

Você pode salvar o arquivo com um nome diferente usando :w. Mas essa operação não removerá o arquivo antigo e o arquivo 'antigo' permanecerá no seu buffer, portanto, quaisquer alterações serão aplicadas ao seu arquivo 'antigo'.

:saveassalva seu novo arquivo e o abre em um novo buffer. Mas não exclui o arquivo antigo.

Eu uso o tpope / vim-eneuch nos :Movearquivos.

: Mover: renomeie um buffer e o arquivo no disco simultaneamente.

OrangeTux
fonte
Uma desvantagem :wou :saveasé que ela perderá a permissão de execução se você estiver editando um script. netrwRenomear manterá as permissões.
wisbucky 12/09
11

Você pode ir para o Netrw e renomear o arquivo lá.

Se o arquivo que você está editando estiver no diretório atual, faça:

:edit .

Navegue até o arquivo, pressione Re altere o nome. Pressione Enterpara editar o arquivo.

Há uma ressalva: o buffer original permanece na lista de buffers. Se você mudar para ele, está vazio.

Se o arquivo que você está editando estiver em um diretório diferente, você poderá mudar para o diretório do arquivo com:

:cd %:p:h

Se você não quiser alterar o diretório para toda a sessão do Vim, mas apenas para o buffer atual, poderá fazer:

:lcd %:p:h
Pare o dano contínuo a Monica
fonte
2
Digitar direto :edit %:p:htambém parece funcionar.
Mladen Jablanović
:Etambém abrirá netrw
wisbucky 12/09
6

Estou usando o plug-in Rename2 há anos. Renomeia o buffer atual e o arquivo no disco:

:Rename {newname}

EDIT: Encontrei este .vimrcarquivo no 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
fonte
3

A melhor maneira é usar :Move, como disse o OrangTux. Para completar, você também pode executar comandos de terminal nos editores do vi usando um bang ( !) no modo de comando.

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

No entanto, esse método não remove o buffer antigo da sua lista de buffers.

Cody Poll
fonte