As primeiras e últimas 5 linhas de um arquivo? Usar para lista específica de arquivos ignorados por ortografia?


8

Chegou o boato de que é possível colocar vimcomandos nas cinco primeiras ou nas últimas cinco linhas de um arquivo. Mas não consegui encontrar isso no Google. Quaisquer leads seriam apreciados.

Gostaria de saber se seria possível empregar esse recurso para definir adições específicas de arquivos à lista de palavras.

Editar Obrigado! O modelineque é! Pode ser usado para verificação ortográfica da maneira sugerida?


4
Você quer dizer algo diferente de um modeline?
muru

Respostas:


8

Modelines pode parecer uma maneira de fazer isso, mas infelizmente eles não vão funcionar. Modelines apenas opções de configuração de suporte ( shiftwidth, colorcolumn, esse tipo de coisa). Você pode usar uma modelagem como vim: spellpara ativar a verificação ortográfica de um documento. No entanto, spellgood!é um comando Ex, não uma opção. Além disso, você especificamente não pode definir algumas opções (incluindo spellfile, consulte :help spellfile) de modelos por motivos de segurança.

Você poderia criar um monte de comandos automáticos específicos do arquivo no vimrc, mas isso se tornaria muito difícil de manter ao longo do tempo, tedioso se você tiver dois arquivos com o mesmo nome em locais diferentes e não viaje "com o Arquivo."

Em vez disso, a melhor solução é provavelmente criar seu próprio recurso de modelo para adicionar palavras analisando algum bloco de texto definido no documento. Por exemplo, você pode procurar linhas começando com "spellgood:"e adicionar automaticamente o conjunto de palavras delimitado por espaço após à lista interna de palavras:

function! AddLocalSpelling ()
  " Save the cursor position.
  let cursor_position = getcurpos()

  let location = searchpos("\"spellgood:", "c")
  while location != [0, 0]
    let words = split(getline(location[0]))
    " The first 'word' will be the sentinel token itself (unless)
    " we found the token in an embedded string or comment...
    if words[0] == "\"spellgood:"
      call remove(words, 0)
      for word in words
        execute "silent spellgood! " . word
      endfor
    endif
    let location = searchpos("\"spellgood:", "W")
  endwhile

  " Restore cursor position.
  call setpos(".", cursor_position)
endfunction

Em seguida, você pode configurar um comando automático para, digamos, BufReadPost * call AddLocalSpelling()no seu .vimrc. Na prática, você provavelmente desejaria tornar a função acima mais robusta diante de erros e possivelmente usar commentspara ver o que é um token de comentário válido (eu escolhi "porque testei isso em um buffer VimL). Essa resposta do Superusuário vinculada por JJoao nos comentários fornece uma implementação semelhante, mas alternativa, que permite usar blocos de palavras em vez de apenas uma única linha de cada vez.

Esse método exigirá que outras pessoas usem a mesma função ou, pelo menos, concordem com as mesmas regras de análise, portanto, não é perfeito. Mas você pode aceitá-lo e promover a funcionalidade de um plug-in, se desejar, permitindo um acesso mais fácil a outros usuários.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.