No vim, como se faz para aplicar autocommands para um tipo de ficheiro para uma região de um arquivo?

StackOverflow https://stackoverflow.com//questions/25086204

  •  02-01-2020
  •  | 
  •  

Pergunta

Eu tenho uma espécie de poliglota tipo de arquivo que pode ter incorporado C, python, ruby, etc nele (pensar "a página wiki' se isso ajuda).Existe uma maneira de executar o autocommands para um conhecido filetype em uma região de um arquivo?

Por exemplo, eu poderia ter:

#!bash
if [ a = b ]; then
   echo 'equal'
fi

#!python
if a = b:
    print('equal')

E eu quero aplicar bash filetype autocommands para a primeira parte e python filetype autocommands para a última parte.

Eu consiga sintaxe hilighting definindo uma região usando este o método, mas eu não entendo autocommands o suficiente para ser capaz de aplicá-los de uma forma semelhante.

Foi útil?

Solução

Fazendo isso automaticamente é um desafio, assim como o tipo de ficheiro de definições são de buffer-local;O Vim não tem noção de regiões, de modo :autocmds precisa ser usado, como já foi escrito corretamente.

Rápido e fácil

Com um plug-in como NrrwRgn - Uma Região Estreita Plugin semelhante ao Emacs, você pode clonar regiões para separar zero buffers;o plugin automaticamente sincroniza-los a voltar a escrever.Cada buffer pode ser dado um separado por tipo de arquivo através de :setf.

Uma abordagem ainda mais simples é definir alguns mapeamentos para alternar rapidamente tipos de arquivos:

:nnoremap <Leader>fp :setf python<CR>
:nnoremap <Leader>fs :setf sh<CR>

Realmente regiões separadas em um único buffer

O esboço deste é fácil:

:autocmd CursorMoved,CursorMovedI <buffer> if line('.') >= 6 | setf python | else | setf sh | endif

Isso depende de cada tipo de plugin para fazer a limpeza adequada (ou substituindo todas as opções).

Como determinar as regiões

Você certamente não deseja especificar os números de linha explicitamente como no desenho acima.Meu OnSyntaxChange plugin pode ajudar, no caso de você ter / pode definir a sintaxe adequada regiões para cada bloco.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top