vim strip autocmd

Vim ejecuta autocmd en todos los tipos de archivos EXCEPTO



strip (3)

La manera más fácil sería establecer una variable local para el tipo de archivo en verdadero. A continuación, configure el comando autom si esa variable es falsa (si está configurada para todo lo demás) o si existe (no es necesario preconfigurarla).

autocmd BufWritePre *.foo let b:foo=true if !exists("b:foo") autocmd ... endif

cambio de prefijos variables basados ​​en comentarios

Tengo un Vim autocmd que elimina los espacios en blanco finales en los archivos antes de escribir. Quiero esto casi el 100% de las veces, pero hay algunos tipos de archivos que me gustaría deshabilitar. La sabiduría convencional es listar los tipos de archivos que quiere que se ejecute un autocmd en una lista separada por comas, por ejemplo:

autocmd BufWritePre *.rb, *.js, *.pl

Pero en este caso eso sería oneroso.

¿Hay alguna manera de hacer coincidir un patrón autocmd con todos los archivos EXCEPTO los que coinciden con el patrón? No puedo encontrar el equivalente a un matcher NO en los documentos.


Otra opción de una sola línea:

let blacklist = [''rb'', ''js'', ''pl''] autocmd BufWritePre * if index(blacklist, &ft) < 0 | do somthing you like

Luego puede hacer algo que le guste para todos los tipos de archivos excepto los de la lista negra.


*.rb no es un tipo de archivo. Es un patrón de archivo. ruby es el tipo de archivo e incluso se puede configurar en archivos que no tienen la extensión .rb . Entonces, lo que probablemente desee es una función a la que llame su autocmd para verificar los tipos de archivos en los que no se debe actuar y eliminar los espacios en blanco.

fun! StripTrailingWhitespace() " Don''t strip on these filetypes if &ft =~ ''ruby/|javascript/|perl'' return endif %s//s/+$//e endfun autocmd BufWritePre * call StripTrailingWhitespace()

Basándose en la respuesta de evan, se podría verificar una variable local de búfer y determinar si se hace la tira con eso. Esto también te permitiría desactivarlo una sola vez si decides que no quieres quitar un buffer que es un tipo de archivo que normalmente quitarías.

fun! StripTrailingWhitespace() " Only strip if the b:noStripeWhitespace variable isn''t set if exists(''b:noStripWhitespace'') return endif %s//s/+$//e endfun autocmd BufWritePre * call StripTrailingWhitespace() autocmd FileType ruby,javascript,perl let b:noStripWhitespace=1