280 votes

Fermer le fichier sans quitter l'application VIM ?

J'utilise le :e y :w des commandes pour éditer et écrire un fichier. Je ne suis pas sûr qu'il existe une commande "close" pour fermer le fichier en cours sans quitter Vim ?

Je sais que le :q peut être utilisée pour fermer un fichier, mais s'il s'agit du dernier fichier, Vim est également fermé ; En fait, sous Mac OS, MacVim se ferme. Seule la fenêtre de Vim est fermée et je pourrais utiliser la commande Control - N pour ouvrir à nouveau une fenêtre Vim vierge. Je voudrais que Vim reste ouvert avec un écran vide.

381voto

Vinko Vrsalovic Points 116138

Cela supprime le tampon (ce qui revient à fermer le fichier).

:bd

7 votes

Le vôtre est meilleur que le mien pour ce que l'OP a demandé, bien que j'aie tendance à préférer :enew parce que j'aime avoir le tampon dans la liste des tampons. :)

2 votes

Lorsque je fais cela, vim montre le premier tampon, mais je peux toujours accéder au tampon

22 votes

@Martin, pour supprimer complètement le tampon, utilisez :bw

53voto

sebnow Points 950

Comme déjà mentionné, vous recherchez :bd Cependant, cela ne supprime pas complètement le tampon, il est toujours accessible :

:e foo
:e bar
:buffers
  1 #h   "foo"                          line 1
  2 %a   "bar"                          line 1
Press ENTER or type command to continue
:bd 2
:buffers
  1 %a   "foo"                          line 1
Press ENTER or type command to continue
:b 2
2   bar

Vous pourriez plutôt vouloir :bw qui le supprime complètement.

:bw 2
:b 2 
E86: Buffer 2 does not exist

Ne pas savoir :bw m'a dérangé pendant un certain temps.

5 votes

Gardez juste à l'esprit que l'aide de VIM dit ceci à propos de :bw -- "N'utilisez pas ça si vous ne savez pas ce que vous faites."

24voto

Gowri Points 931

Si vous avez plusieurs fenêtres divisées dans votre fenêtre Vim, alors :bd ferme la fenêtre fractionnée du fichier en cours, j'aime donc utiliser quelque chose d'un peu plus avancé :

map fc <Esc>:call CleanClose(1)

map fq <Esc>:call CleanClose(0)

function! CleanClose(tosave)
if (a:tosave == 1)
    w!
endif
let todelbufNr = bufnr("%")
let newbufNr = bufnr("#")
if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr))
    exe "b".newbufNr
else
    bnext
endif

if (bufnr("%") == todelbufNr)
    new
endif
exe "bd".todelbufNr
endfunction

13 votes

Maintenant, que fait cet extrait ?

1 votes

Vous voulez probablement <CR> après les appels pour exécuter réellement la commande.

2 votes

@dolzenko il associe 'fc' et 'fq' en mode normal pour sauvegarder optionnellement le tampon actuel puis basculer vers un nouveau tampon avant d'effacer l'original. Cela permet de préserver toute division que vous avez mise en place.

18voto

ephemient Points 87003
:\[N\]bd\[elete\]\[!\]                        \*:bd\* \*:bdel\* \*:bdelete\* \*E516\*
:bd\[elete\]\[!\] \[N\]
                Unload buffer \[N\] (default: current buffer) and delete it from
                the buffer list.  If the buffer was changed, this fails,
                unless when \[!\] is specified, in which case changes are lost.
                The file remains unaffected.  Any windows for this buffer are
                closed.  If buffer \[N\] is the current buffer, another buffer
                will be displayed instead.  This is the most recent entry in
                the jump list that points into a loaded buffer.
                Actually, the buffer isn't completely deleted, it is removed
                from the buffer list |unlisted-buffer| and option values,
                variables and mappings/abbreviations for the buffer are
                cleared.

10voto

Rytmis Points 15848

Si vous avez déjà enregistré le dernier fichier, alors :enew est votre ami ( :enew! si vous ne voulez pas sauvegarder le dernier fichier). Notez que le fichier original sera toujours dans votre liste de tampons (celle accessible via :ls ).

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