2009-08-21 14 views
6

Necesito hacer el lógico y de dos eventos autocmd en vim. Básicamente, el comando tiene que ejecutarse en un InsertLeave cuando el FileType es tex. Parece que esto debería funcionar (en un .vimrc):Vim: ¿Combinando autocmd?

autocmd FileType tex :autocmd InsertLeave :w 

Pero no es así. La opción anidada tampoco parece ser de ayuda, aunque el manual indique que debería serlo.

Su fácil de hacer un lógico-O:

autocmd BufEnter,BufLeave ... 

no debe ser demasiado difícil de hacer un lógico-Y.

+0

Debería tomar la solución de ZyX como respuesta, ya que resuelve el problema del buffer local de Eevee. – Profpatsch

+0

Hecho, pero estoy tomando su palabra para ello. Me parece recordar el problema de los buffers locales, pero no he escrito el látex en años y me cambié a emacs hace dos años. –

Respuesta

8

que tienen una corrección a la respuesta @Eevee: para hacer el trabajo AutoCommand para una sola memoria intermedia, se debe utilizar

augroup TexAutoWrite 
    autocmd FileType tex :autocmd! TexAutoWrite InsertLeave <buffer> :update 
augroup END 

, ver `: h autocmd-buflocal.

+0

Esto es brillante. Ahora puedo volver a procesar documentos asciidoc al cambiar a mi navegador. – Profpatsch

+1

Ouch. Problema: el segundo autocomando agregado * cada vez * cambia a un archivo tex. Después de un tiempo breve, vim comienza a ahorrar muchas veces seguidas después de salir del modo de inserción. – Profpatsch

+1

@Profpatsch corregido. – ZyX

4

InsertLeave todavía necesita un parámetro.

Esto funciona para mí:

autocmd FileType tex :autocmd InsertLeave * :w 

Tenga en cuenta que este comportamiento se mantendrá si posteriormente se edita un archivo no tex en el mismo tampón. No estoy seguro de si hay una manera simple de eliminarlo al editar cualquier cosa pero un cierto tipo de archivo.

+0

De hecho, funciona como un encanto. –

+0

El colon no es realmente necesario. p.ej. 'au FileType go au VimLeave * call system (" killall gocode ")' – Meow

4

Puede usar la opción de patrón de la función auto.

autocmd InsertLeave *.tex w 
+0

Esto no funciona cuando la extensión del archivo no coincide con el tipo de archivo o no existe. Eso sucede cuando haces cosas como comparar contra copia de seguridad/archivos temporales, o si la ubicación del archivo determina su tipo, p. archivos de configuración del sistema. – Walf