En Vim, ¿cómo se aplica autocomands para un tipo de filetipo a una región de un archivo?
-
02-01-2020 - |
Pregunta
Tengo una especie de tipo de filetipo de Polyglot que puede haber incrustado C, Python, Ruby, etc. En él (piense "la página de Wiki 'si ayuda).¿Hay alguna manera de ejecutar los autocomands para un tipo de filetipo conocido en una región del archivo?
Por ejemplo, podría tener:
#!bash
if [ a = b ]; then
echo 'equal'
fi
#!python
if a = b:
print('equal')
Y quiero aplicar Bash FileType AutoCommands a la primera parte y Python FileType Autocommands a la última parte.
Puedo obtener justas de la sintaxis con la definición de una región usando este método , pero noT Entender los autocomands lo suficiente como para poder aplicarlos de una manera similar.
Solución
Hacer esto automáticamente es desafiante, ya que la configuración de FileType es local-local; VIM no tiene noción de regiones, por lo que se debe usar :autocmds
, como lo indica correctamente.
rápido y fácil
:nnoremap <Leader>fp :setf python<CR>
:nnoremap <Leader>fs :setf sh<CR>
Regiones realmente separadas en un solo tampón
El boceto de esto es fácil:
:autocmd CursorMoved,CursorMovedI <buffer> if line('.') >= 6 | setf python | else | setf sh | endif
Esto se basa en cada complemento de tipo FileType que realiza la limpieza adecuada (o anulando todas las opciones relevantes).
Cómo determinar las regiones
Ciertamente, no quiere especificar explícitamente los números de línea como en el boceto de arriba. Mi complemento onSyntaxchange podría ayudar, en caso de que usted tenga / pueda definir la sintaxis adecuada regiones para cada bloque.