Le prime e ultime 5 righe di un file? Utilizzare per l'incantesimo specifico del file ignora l'elenco?


8

Sono arrivate voci secondo le quali è possibile inserire vimcomandi nelle prime cinque o nelle ultime cinque righe di un file. Ma non sono riuscito a trovarlo su Google. Qualsiasi vantaggio sarebbe apprezzato.

Mi chiedo se sarebbe possibile utilizzare questa funzione per definire aggiunte specifiche di file all'elenco di parole.

Modifica Grazie! Lo modelineè! Può essere utilizzato per il controllo ortografico nel modo suggerito?


4
Intendi qualcosa di diverso da un modeline?
Muru,

Risposte:


8

Le modeline possono sembrare un modo per farlo, ma sfortunatamente non funzioneranno. Modelines solo le opzioni di impostazione di supporto ( shiftwidth, colorcolumn, quel genere di cose). Puoi usare un modello come vim: spellper abilitare il controllo ortografico per un documento. Tuttavia, spellgood!è un comando Ex, non un'opzione. Inoltre, per motivi di sicurezza , non è possibile impostare alcune opzioni (incluso spellfile, vedi :help spellfile) da modeline.

Si potrebbe predisporre un mucchio di autocomandi file specifici nel vostro vimrc, ma che sarebbe diventata davvero difficile da mantenere nel tempo, noioso se mai capita di avere due file con lo stesso nome in luoghi diversi, e non sarebbero di viaggio "con la file."

Invece, la soluzione migliore è probabilmente quella di creare la tua funzione simile alla modellistica per aggiungere parole analizzando alcuni blocchi di testo definiti nel documento. Ad esempio, puoi cercare le righe che iniziano con "spellgood:"e aggiungere automaticamente il gruppo di parole delimitato da spazi all'elenco di parole interno:

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

Quindi puoi impostare un autocommand per, diciamo BufReadPost * call AddLocalSpelling()nel tuo .vimrc. In pratica probabilmente vorresti rendere la funzione sopra più robusta di fronte agli errori, e possibilmente usare commentsper vedere cos'è un token di commento valido (l'ho scelto "perché l'ho testato in un buffer VimL). Questa risposta di SuperUser collegata da JJoao nei commenti fornisce un'implementazione simile ma alternativa che ti consente di usare blocchi di parole invece di una sola riga alla volta.

Questo metodo richiederà ad altri di usare la stessa funzione o almeno di concordare sulle stesse regole di analisi, quindi non è perfetto. Ma potresti prenderlo e promuovere la funzionalità di un plug-in, se lo desideri, consentendo un accesso più facile per altri utenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.