2009-07-31 6 views
1

L'option 'autowriteall' permet à Vim de sauvegarder tous les tampons lors de la fermeture. Je veux être capable d'utiliser cette option uniquement pour un tampon spécifique (un fichier temporaire qui sera bientôt supprimé) mais pas pour les autres tampons.Option Vim 'autowriteall' uniquement pour les tampons spécifiques

Comment puis-je obtenir Vim pour enregistrer automatiquement les modifications uniquement pour un tampon spécifique?

Répondre

1

Il est pas tout à fait parfait, mais une option serait d'utiliser le VimLeavePre autocmd:

:autocmd VimLeavePre <buffer> w 

Cependant, vous devrez arrêter de fumer avec :q! ou :qa! pour que cela fonctionne, sinon il ne aller aussi loin que l'initiation de l'autocmd.

:help autocmd 
:help VimLeavePre 
:help autocmd-buffer-local 
1

Vous allez devoir utiliser une combinaison d'autocommandes. Ceux qui sont pertinents immédiatement évidents sont:

  • BufHidden
  • BufLeave
  • BufUnload
  • BufDelete

Cela couvrira les tampons se cachant, en les laissant pour d'autres tampons ou des fenêtres, la fermeture Vim et suppression de tampons. (Je pense que BufDelete est redondant donné BufUnload mais je ne suis pas totalement sûr d'avoir examiné tous les cas). Notez que VimLeavePre ne fonctionnera que si le tampon que vous essayez d'enregistrer est actif, donc ce n'est pas ce que vous voulez.

Le autocommande modèle va être

:autocommand {event} {filename} w 

Ou, si vous ne disposez pas d'un motif de fichiers facile à égaler ou il pourrait ne pas avoir du tout (dans ce cas, la commande w aura besoin d'un argument de nom de fichier) vous pouvez utiliser des autocommandes locales. Celles-ci devront probablement être définies d'une manière ou d'une autre lors de la création du tampon, comme s'il s'agissait d'un script généré par un script pour afficher certaines informations. Pour plus d'informations à ce sujet, voir:

:help autocmd-buffer-local 

Vous pouvez obtenir des informations sur la multitude d'événements autocommandes de

:help autocommand-events 
0

peut-être ce que vous voulez est:

setlocal autowriteall 

setlocal permet seulement une fonction pour le tampon spécifié. autowriteall est autowrite + save on quit, enew, e et autres (h autowriteall)

+0

autowriteall est une option globale. –

+0

Non, autowriteall ne peut être défini que globalement, même si vous utilisez 'setlocal' il est défini globalement. –

Questions connexes