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? ;)

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top