In Vim, come si applica AutoCommomands per un tipo di file in una regione di un file?
-
02-01-2020 - |
Domanda
Ho una specie di filetto di poliglot che può essere incorporato C, Python, Ruby, ecc. In esso (pensa "Wiki Page" se aiuta).C'è un modo per eseguire le autocommomanze per un tipo noto di file in una regione del file?
Ad esempio, potrei avere:
#!bash
if [ a = b ]; then
echo 'equal'
fi
#!python
if a = b:
print('equal')
.
e voglio applicare BASH FileType Autocommands alla prima parte e ai tipi di file Filetype di Python a quest'ultima parte.
Posso ottenere solo syntax hillighting definendo una regione utilizzando questo metodo , ma io don 'T Capisci gli autocommamenti sufficienti per essere in grado di applicarli in modo simile.
Soluzione
Fare questo automaticamente è impegnativo, poiché le impostazioni del tipo di file sono buffer-locali; Vim non ha alcuna idea di regioni, quindi è necessario utilizzare :autocmds
, come hai dichiarato correttamente.
Quick and Easy
:nnoremap <Leader>fp :setf python<CR>
:nnoremap <Leader>fs :setf sh<CR>
.
regioni veramente separate in un singolo buffer
Lo schizzo di questo è facile:
:autocmd CursorMoved,CursorMovedI <buffer> if line('.') >= 6 | setf python | else | setf sh | endif
.
Ciò si basa su ciascun plug-in del tipo FileType che esegue la pulizia adeguata (o sovrascrivendo tutte le opzioni pertinenti).
Come determinare le regioni
Non vuoi certamente specificare i numeri di linea esplicitamente come nello schizzo sopra. My onsyntaxchange plugin potrebbe aiutare, nel caso in cui tu abbia / possa definire la sintassi corretta regioni per ogni blocco.