Fermer le fichier sans quitter l'application VIM?

258

J'utilise les commandes :eet :wpour éditer et écrire un fichier. Je ne sais pas s'il existe une commande "close" pour fermer le fichier actuel sans quitter Vim?

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

David.Chu.ca
la source

Réponses:

343

Cela supprime le tampon (qui se traduit par fermer le fichier)

:bd 
Vinko Vrsalovic
la source
6
Le vôtre est meilleur que le mien pour ce que le PO a demandé, même si j'ai tendance à préférer: enew parce que j'aime avoir le tampon dans la liste des tampons. :)
Rytmis
2
Quand je fais cela, vim montre le premier tampon, mais je peux toujours accéder au tampon
Martin Andersson
18
@Martin, pour supprimer complètement le tampon, utilisez : bw
sebnow
43

Comme déjà mentionné, vous recherchez :bd, mais 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 voudrez peut-être plutôt le :bwsupprimer complètement.

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

Ne pas :bwme connaître sur écoute pendant un bon moment.

sebnow
la source
3
Gardez juste à l'esprit que l'aide de VIM dit ceci à propos de :bw"Ne l'utilisez pas à moins de savoir ce que vous faites."
mato
23

Si vous avez plusieurs fenêtres divisées dans votre fenêtre Vim, puis :bdferme la fenêtre divisée du fichier actuel, donc j'aime 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
Gowri
la source
13
Maintenant, que fait cet extrait?
dolzenko du
1
Vous souhaiterez probablement que <CR> après les appels exécute réellement la commande.
dma
2
@dolzenko, il mappe 'fc' et 'fq' en mode normal pour éventuellement enregistrer le tampon actuel puis basculer vers un nouveau tampon avant de supprimer l'original. Cela préserve toutes les divisions que vous avez configurées.
dma
Cela semble être une bonne idée. Quand je l'essaye, cependant, j'obtiens le message d'erreur suivant: "Impossible de redéfinir la fonction CleanClose: il est en cours d'utilisation"
jononomo
2
Ne remappez pas "f". . . "f" est en fait super utile. Avec ce mappage, vous ne pouvez jamais "rechercher" vers l'avant pour "c" ou "q".
tandrewnichols
17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Déchargez le tampon [N] (par défaut: tampon actuel) et supprimez-le de
                la liste des tampons. Si le tampon a été modifié, cela échoue,
                sauf si [!] est spécifié, auquel cas les modifications sont perdues.
                Le fichier n'est pas affecté. Toutes les fenêtres de ce tampon sont
                fermé. Si le tampon [N] est le tampon actuel, un autre tampon
                sera affiché à la place. Ceci est l'entrée la plus récente de
                la liste de raccourcis qui pointe vers un tampon chargé.
                En fait, le tampon n'est pas complètement supprimé, il est supprimé
                de la liste des tampons | unlisted-buffer | et les valeurs des options,
                les variables et les mappages / abréviations du tampon sont
                effacé.
éphémère
la source
9

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

Rytmis
la source
6

Si vous modifiez un fichier et souhaitez le fermer sans quitter Vim et sans enregistrer, vous devez taper :bd!.

pablofiumara
la source
3

:bdpeut être mappé. Je le mappe à F4, Shift- F4si j'ai besoin de forcer la fermeture à cause d'un changement que je ne veux plus.

wbogacz
la source
2

Le plugin bufkill.vim ajoute BDetc., pour supprimer le tampon sans fermer aucune division (comme bd) le ferait seul.

bleuté
la source
1

Insérez ce qui suit dans votre fichier .vimrc et, en appuyant sur F4, il fermera le fichier actuel.

:map <F4> :bd<CR>
Stryker
la source
0

Regardez le plugin Butane pour conserver la disposition des fenêtres lors de la fermeture d'un tampon.

Gary Willoughby
la source