Existe uma maneira de o vim não sinalizar URLs HTTP e endereços de email como erros de ortografia? Ou, de maneira mais geral, uma maneira de listar regexes de grafias válidas?
Existe uma maneira de o vim não sinalizar URLs HTTP e endereços de email como erros de ortografia? Ou, de maneira mais geral, uma maneira de listar regexes de grafias válidas?
Você pode adicionar regras de sintaxe personalizadas e fornecer a @nospell
palavra -
chave para que o Vim não aplique a verificação ortográfica a essa correspondência de sintaxe. Por exemplo:
:syn match UrlNoSpell "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell
O acima funcionará para arquivos de texto e alguns tipos de arquivos (como descontos), mas não para todos os tipos de arquivos.
Observe que eu usei uma regex bastante simples aqui; consulte Como analiso URLs do texto para obter algumas alternativas.
Para outros tipos de arquivos, você precisa trabalhar um pouco mais. Por exemplo, para python
arquivos, os comentários estão contidos em um pythonComment
grupo, de /usr/share/vim/vim74/syntax/python.vim
:
syn match pythonComment "#.*$" contains=pythonTodo,@Spell
Para substituir isso, precisamos fazer:
:syn match UrlNoSpellComment "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonComment
:highlight def link UrlNoSpellComment Comment
O truque consiste em adicionar uma lista de partidas de sintaxe previamente combinados em que o nosso jogo sintaxe personalizado pode ser contido com containedin=
Isto diz Vim para olhar para o
UrlNoSpell
regex dentro das pythonComment
partidas.
Também precisamos usar highlight
para definir as cores corretas, pois elas não são herdadas.
Você precisa fazer isso em vários lugares, por exemplo, para seqüências de caracteres Python:
:syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
:highlight def link UrlNoSpellString String
Precisamos de dois grupos de correspondência de sintaxe diferentes para que possamos aplicar o realce correto da sintaxe.
Obviamente, para outros tipos de arquivos, você precisa usar outras containedin=
correspondências de sintaxe ... AFAIK não existe uma solução "universal", mas procurar as soluções corretas /usr/share/vim/vim74/syntax/*.vim
não deve ser muito difícil.
Observe que todos os comandos acima devem ser executados após os arquivos de sintaxe; existem 2 maneiras de fazer isso:
Em um comando ou mapeamento de chave, isso deve ser chamado manualmente sempre. por exemplo
fun! NoUrlSpell()
if &filetype == 'python'
:syn match UrlNoSpellComment "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonComment
:highlight def link UrlNoSpellComment Comment
:syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
:highlight def link UrlNoSpellString String
elseif &filetype == 'ruby'
" ...
else
syn match pythonComment "#.*$" contains=pythonTodo,@Spell
endif
endfun
command NoUrlSpell :call NoUrlSpell()
Coloque os comandos no ~/.vim/after/syntax/[filetype].vim
. O Vim selecionará esses arquivos e os executará após os arquivos de sintaxe padrão (consulte
:help after-directory
:).