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.

Réponses:


343

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

:bd 

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.


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

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é.

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).


6

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


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.


2

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


1

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

:map <F4> :bd<CR>


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.