Les 5 premières et dernières lignes d'un fichier? Utiliser pour la liste d'ignorance des sorts spécifiques au fichier?

8

La rumeur m'est parvenue qu'il est possible de placer des vimcommandes dans les cinq premiers, ou dans les cinq dernières lignes d'un fichier. Mais, je ne pouvais pas trouver cela dans Google. Toutes les pistes seraient appréciées.

Je me demande s'il serait possible d'utiliser cette fonctionnalité pour définir des ajouts spécifiques à un fichier dans la liste de mots.

Modifier Merci! C'est modelineça! Peut-il être utilisé pour la vérification orthographique de la manière suggérée?

Yossi Gil
la source
4
Vous voulez dire autre chose qu'un modeline?
muru
2
jetez un oeil à superuser.com/questions/641946/…
JJoao

Réponses:

8

Les modelines peuvent sembler être un moyen de le faire, mais malheureusement, elles ne fonctionneront pas. ModeLines seules options de réglage (support shiftwidth, colorcolumn, ce genre de choses). Vous pouvez utiliser une modélisation comme vim: spellpour activer la vérification orthographique d'un document. Cependant, spellgood!c'est une commande Ex, pas une option. De plus, vous ne pouvez pas spécifiquement définir certaines options (y compris spellfile, voir :help spellfile) à partir des modèles pour des raisons de sécurité.

Vous pouvez créer un tas d'autocommandes spécifiques à un fichier dans votre vimrc, mais cela deviendrait très difficile à maintenir au fil du temps, fastidieux si jamais vous aviez un fichier portant le même nom à différents endroits et que vous ne voyagiez pas "avec le fichier."

Au lieu de cela, la meilleure solution est probablement de créer votre propre fonctionnalité de type modeline pour ajouter des mots en analysant un bloc de texte défini dans le document. Par exemple, vous pouvez rechercher des lignes commençant par "spellgood:"et ajouter automatiquement l'ensemble de mots délimité par des espaces après à la liste de mots interne:

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

Ensuite, vous pouvez configurer une autocommande pour, disons BufReadPost * call AddLocalSpelling()dans votre .vimrc. En pratique, vous voudriez probablement rendre la fonction ci-dessus plus robuste face aux erreurs, et éventuellement utiliser commentspour voir ce qu'est un jeton de commentaire valide (j'ai choisi "parce que je l'ai testé dans un tampon VimL). Cette réponse SuperUser liée par JJoao dans les commentaires fournit une implémentation similaire mais alternative qui vous permet d'utiliser des blocs de mots au lieu d'une seule ligne à la fois.

Cette méthode exigera que d' autres utilisent la même fonction ou au moins s'accordent sur les mêmes règles d'analyse, donc ce n'est pas parfait. Mais vous pouvez le prendre et promouvoir la fonctionnalité en un plugin si vous le souhaitez, ce qui permet un accès plus facile pour les autres utilisateurs.

Communauté
la source