Ignorar URLs e endereços de email no arquivo de ortografia

11

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?

noffle
fonte

Respostas:

14

Você pode adicionar regras de sintaxe personalizadas e fornecer a @nospellpalavra - 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 pythonarquivos, 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 UrlNoSpellregex dentro das pythonCommentpartidas.

Também precisamos usar highlightpara 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/*.vimnã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:).

Martin Tournoij
fonte