Comment puis-je renommer le fichier en cours d'édition?

38

Est-il possible de renommer le fichier que je modifie depuis Vim? Actuellement, je quitte Vim, renomme le fichier et ouvre à nouveau Vim.

thameera
la source
Je suis intéressé pour le faire par neovim
Miguel de Val-Borro

Réponses:

35

Vous pouvez enregistrer le fichier sous un nom différent en utilisant :w. Mais cette opération ne supprime pas l'ancien fichier et le fichier "ancien" reste dans votre mémoire tampon. Toute modification sera donc appliquée à votre "ancien" fichier.

:saveasenregistre votre nouveau fichier et l’ouvre dans un nouveau tampon. Mais cela ne supprime pas l'ancien fichier.

J'utilise tpope / vim-eneuch pour les :Movefichiers.

: Move: Renomme un tampon et le fichier sur le disque simultanément.

OrangeTux
la source
Un des inconvénients de :wou :saveasest qu'il perdra l'autorisation d'exécution si vous éditez un script. netrwRenommer conservera les autorisations.
Wisbucky le
11

Vous pouvez déposer sur Netrw et renommer le fichier ici.

Si le fichier que vous êtes en train de modifier se trouve dans le répertoire actuel, procédez comme suit:

:edit .

Accédez au fichier, appuyez sur Ret modifiez le nom. Appuyez sur Enterpour éditer le fichier.

Il y a cependant une mise en garde: le tampon d'origine reste dans la liste des tampons. Si vous passez à cela, il est vide.

Si le fichier que vous modifiez se trouve dans un autre répertoire, vous pouvez changer de répertoire avec:

:cd %:p:h

Si vous ne souhaitez pas modifier le répertoire pour la session entière de Vim mais uniquement pour le tampon actuel, vous pouvez alors effectuer les opérations suivantes:

:lcd %:p:h
Arrêtez le mal en cours à Monica
la source
2
Taper directement :edit %:p:hsemble aussi fonctionner.
Mladen Jablanović
:Eouvrira également netrw
wisbucky
6

J'utilise le plugin Rename2 pour cela depuis des années. Il renomme à la fois le tampon actuel et le fichier sur le disque:

:Rename {newname}

EDIT: J'ai trouvé ceci un .vimrcfichier sur 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
la source
3

Le meilleur moyen est d'utiliser :Move, comme l'a dit OrangTux. Pour être complet, vous pouvez également exécuter des commandes de terminal dans les éditeurs vi en utilisant un bang ( !) en mode commande.

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

Cependant, cette méthode ne supprime pas l'ancien tampon de votre liste de tampons.

Cody Poll
la source