Eseguire il comando CommandTFlush quando un nuovo file viene scritto
Domanda
Sto cercando di rendere Vim eseguire il comando 'CommandTFlush' ogni volta che un nuovo file è writte. Per coloro che non utilizzano il plugin Comando-T, il comando 'CommandTFlush' viene utilizzato per ricostruire un indice dei file nella directory corrente.
Quello che voglio fare è eseguire il comando dopo che il file viene scritto su disco, in modo che CommandTFlush troverà il file e aggiungerlo ad esso di indice.
Ho provato a scrivere una funzione di me stesso, ma o non scatta o spara troppo presto (prima che il file è scritto, e il punto è quello di aggiungere il file all'indice):
au! BufWritePre * ks| call NewFilesUpdatesCommandT()
function! NewFilesUpdatesCommandT()
let filename=@%
if !filereadable(filename)
CommandTFlush
endif
endfunction
ho il sospetto che potrebbe essere risolto impostando alcuni var booleano (isTheFileNew) in BufWritePre e poi eseguire il comando CommandTFlush nel BufWritePost se il file è stato appena creato, ma non riesco a capire la sintassi. Un'altra soluzione potrebbe essere l'impostazione / disattivazione del callback BufWritePost dall'interno BufWritePre callback, se è possibile ...
Qualcuno potrebbe darmi una mano qui? ;)
Soluzione
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
Si tratta di una realizzazione del vostro secondo suggerimento.
Altri suggerimenti
Ecco la mia soluzione. Si innesca CommandTFlush ogni volta che un file viene scritto e anche ogni volta che i guadagni della finestra di Vim si concentrano. Questo è utile quando si creano file al di fuori di vim - per esempio passando tra i rami nel vostro sistema di controllo versione. I nuovi file saranno disponibili in CommandT subito dopo aver re-immette Vim.
augroup CommandTExtension
autocmd!
autocmd FocusGained * CommandTFlush
autocmd BufWritePost * CommandTFlush
augroup END