95 votes

Comment supprimer le fichier en cours dans vim ?

Comment puis-je supprimer du disque le fichier ouvert en cours depuis vim ? Ce serait bien de pouvoir également fermer le tampon.

Je te vois. vous pouvez utiliser NERDTree pour cela mais je n'utilise pas ce plugin.

115voto

glts Points 5761

En utilisant un outil externe tel que rm (1) est bien, mais Vim a aussi sa propre delete() pour supprimer des fichiers. Il présente l'avantage d'être portable.

:call delete(expand('%'))

Une autre façon d'exprimer cela est :call delete(@%) qui utilise le % (fichier courant) registre (astuce de @accolade).

Pour purger complètement le tampon actuel, à la fois la représentation du fichier sur le disque et le tampon de Vim, ajoutez :bdelete :

:call delete(expand('%')) | bdelete!

Vous voudrez sans doute modifier cette carte en fonction de vos préférences.

8 votes

Merci ! La carte suivante dans le fichier .vimrc semble fonctionner : nnoremap rm :call delete(expand('%')) \| bdelete!<CR> . Vous pourriez ajouter dans votre réponse.

14 votes

Cette cartographie n'est pas idéale. Nous ne voulons pas casser le r commande ! Mieux vaut préfixer votre cartographie avec <Leader>... .

0 votes

N'est pas idéal, même parce qu'il est facile de supprimer le fichier et de fermer le tampon sans intention ! Mais je n'en avais besoin que comme solution temporaire.

100voto

David Cain Points 5164

Jetez un coup d'œil à Supprimer des fichiers avec une commande Vim . Le site Commentaires La section devrait avoir ce que vous cherchez :

En gros, Rm supprimera le fichier actuel ; RM supprimera le fichier actuel et quittera le tampon (sans sauvegarder) en une seule fois.

Sinon, vous pouvez simplement lancer une commande shell pour supprimer le fichier en cours :

:!rm %

1 votes

C'est quelque chose de si simple que je n'arrive presque pas à croire que je doive créer un script pour cela. Merci.

3 votes

Suppression avec !rm % Est-ce qu'il y a un moyen d'éviter l'avertissement lorsque vim revient à la mémoire tampon ?

1 votes

Avec certains caractères spéciaux dans le nom du fichier, cette commande ne fonctionnera pas, par exemple si le nom du fichier est 20130711-contacts #285.vcf, qui contient un espace, le message suivant apparaîtra : 'rm : cannot remove `20130711-contacts' : No such file or directory'

26voto

glts Points 5761

Parfois, un plugin peut être une solution intéressante même pour un problème simple. Dans ce cas, nous avons de la chance car il existe eunuque.vim par le tout-puissant Tim Pope.

Selon ses propres termes eunuque.vim fournit

Le sucre de Vim pour les commandes du shell UNIX qui en ont le plus besoin. Supprimer ou renommer un tampon et le fichier sous-jacent en même temps. Chargez un find ou un locate dans la liste des corrections rapides. Et ainsi de suite.

Parfait. Il a tout ce dont nous avons besoin, plus quelques outils supplémentaires si nous sommes sur un système UNIX.

La commande que vous recherchez est

:Remove!

Encore une fois, remappez-la si vous en avez souvent besoin, par ex. :nnoremap <Leader>rm :Remove!<CR> .

0 votes

Je cherchais un moyen de se passer de plugins, je vais donc accepter votre autre réponse. Le plugin a l'air bien :-)

1 votes

Ce plugin est assez pratique si vous avez besoin des moyens vim de mv , mkdir , find etc. Hautement recommandé.

6voto

joelostblom Points 7189

J'aime pouvoir supprimer des fichiers à partir de vim, mais je suis également paranoïaque à l'idée de supprimer accidentellement un travail important qui, pour une raison ou une autre, n'est pas encore sous contrôle de version. Je trouve qu'il est utile de combiner les informations précédentes de @glts et @accolade avec cette réponse sur la façon d'utiliser le confirm à l'invite avant de quitter vim.

En combinant ces éléments, j'ai ajouté une fonction à mon fichier ~/.vimrc qui vous invite à supprimer le fichier et à fermer le tampon, et l'a associé à une combinaison de touches :

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()

fun! DeleteFileAndCloseBuffer()
  let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
  if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun

Si vous êtes un peu moins paranoïaque que moi, vous pouvez ajouter <CR> à la première ligne

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>

et n'avoir à appuyer qu'une seule fois sur la touche retour.

0voto

GaGa_Ek Points 79

Vous pouvez le faire en deux étapes :

  1. enregistrer comme un nouveau fichier

    w nouveaufilename

  2. supprimer l'ancien fichier

    ! rm oldfilename

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X