2010-08-15 10 views
6

J'essaie de faire en sorte que Vim exécute la commande 'CommandTFlush' chaque fois qu'un nouveau fichier est écrit. Pour ceux qui n'utilisent pas le plugin Command-T, la commande 'CommandTFlush' est utilisée pour reconstruire un index de fichiers dans le répertoire courant. Ce que je veux faire est d'exécuter la commande après que le fichier soit écrit sur le disque, afin que CommandTFlush trouve le fichier et l'ajoute à son index.Exécutez la commande CommandTFlush lors de l'écriture d'un nouveau fichier

J'ai essayé d'écrire une fonction moi-même, mais soit il ne (avant que le fichier est écrit, et le point entier est d'ajouter le fichier à l'index) pas trop tôt le feu ou il se déclenche:

au! BufWritePre * ks| call NewFilesUpdatesCommandT() 
function! NewFilesUpdatesCommandT() 
    let [email protected]% 
    if !filereadable(filename) 
     CommandTFlush 
    endif 
endfunction 

Je suppose qu'il pourrait être résolu en définissant une variable booléenne (isTheFileNew) dans BufWritePre et ensuite exécuter la commande CommandTFlush dans BufWritePost si le fichier venait juste d'être créé, mais je n'arrive pas à comprendre la syntaxe. Une autre solution pourrait être de mettre en/hors service le rappel BufWritePost depuis le rappel BufWritePre, si c'est possible ...

Quelqu'un pourrait-il m'aider? ;)

+0

Que fait 'ks |' au début de votre autocommande? Je ne peux pas le trouver dans l'aide de vim. – ZyX

+0

Trouvé. Pourquoi voulez-vous marquer votre position si votre fonction ne déplace pas le curseur? – ZyX

+0

Aucune idée vraiment. C'est juste un mauvais travail de copier/coller basé sur quelques pointeurs que j'ai eu dans #[email protected] Je n'ai pas encore compris comment obtenir quelque chose d'utile sur les fichiers d'aide pour le moment. Je suis sur mon troisième jour avec Vim ici;) – peterfarsinsen

Répondre

2
augroup NFUCT 
    autocmd! 
    autocmd BufWritePre * call NFUCTset() 
augroup END 
function NFUCTset() 
    if !filereadable(expand('%')) 
     augroup NFUCT 
      autocmd BufWritePost * call NFUCT() 
     augroup END 
    endif 
endfunction 
function NFUCT() 
    augroup NFUCT 
     autocmd! 
     autocmd BufWritePre * call NFUCTset() 
    augroup END 
    CommandTFlush 
endfunction 

Ceci est une réalisation de votre deuxième suggestion.

+0

Merci! Ça semble fonctionner exactement comme je le voudrais. – peterfarsinsen

17

Voici ma solution. Il déclenche CommandTFlush à chaque fois qu'un fichier est écrit et à chaque fois que la fenêtre de Vim est mise au point. Ceci est utile lorsque vous créez des fichiers en dehors de vim - par exemple en basculant entre les branches dans votre système de contrôle de version. Les nouveaux fichiers seront disponibles dans CommandT immédiatement après avoir ré-entré Vim.

augroup CommandTExtension 
    autocmd! 
    autocmd FocusGained * CommandTFlush 
    autocmd BufWritePost * CommandTFlush 
augroup END 
+0

Cela fonctionne très bien. Je l'ai juste coincé dans mon .vimrc et maintenant CommandT fonctionne comme je m'y attendais. Merci. –

+0

C'est génial, merci. – jpc

+0

Parfait - merci! – Skilldrick