2010-08-15 16 views
6

Estoy tratando de hacer que Vim ejecute el comando 'CommandTFlush' cada vez que se escribe un nuevo archivo. Para aquellos que no usan el complemento Command-T, el comando 'CommandTFlush' se usa para reconstruir un índice de archivos en el directorio actual.Ejecutar el comando CommandTFlush cuando se escribe un archivo nuevo

Lo que quiero hacer es ejecutar el comando después de escribir el archivo en el disco, para que CommandTFlush encuentre el archivo y lo agregue a su índice.

he intentado escribir una función a mí mismo, pero o bien no se dispara o se dispara demasiado pronto (antes de que el archivo está escrito, y el punto es para agregar el archivo al índice):

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

Sospecho que podría resolverse configurando var boolean var (isTheFileNew) en BufWritePre y luego ejecutar el comando CommandTFlush en BufWritePost si el archivo se acaba de crear, pero no puedo deducir la sintaxis. Otra solución podría ser configurar/desactivar la devolución de llamada BufWritePost desde la devolución de llamada de BufWritePre, si eso es posible ...

¿Alguien podría ayudarme aquí? ;)

+0

¿Qué hace 'ks |' al inicio de su autocomando? No puedo encontrarlo en vim help. – ZyX

+0

Lo encontré. ¿Por qué quieres marcar tu posición si tu función no mueve el cursor? – ZyX

+0

No tengo idea realmente. Es solo un mal trabajo de copiar/pegar basado en algunos indicadores que obtuve en #[email protected] Aún no he descubierto cómo obtener algo útil de los archivos de ayuda. Estoy en mi tercer día con Vim aquí;) – peterfarsinsen

Respuesta

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 

Esta es una realización de su segunda sugerencia.

+0

¡Gracias! Parece estar funcionando exactamente como me gustaría. – peterfarsinsen

17

Aquí está mi solución. Activa CommandTFlush siempre que se escribe un archivo y también cuando la ventana de Vim gana foco. Esto es útil cuando crea archivos fuera de vim; por ejemplo, al cambiar de una rama a otra en su sistema de control de versiones. Los nuevos archivos estarán disponibles en CommandT inmediatamente después de volver a ingresar a Vim.

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

Eso funciona muy bien. Acabo de pegar eso en mi .vimrc y ahora CommandT funciona como esperaba. Gracias. –

+0

Esto es genial, gracias. – jpc

+0

Perfecto - ¡gracias! – Skilldrick

Cuestiones relacionadas