Die ersten und letzten 5 Zeilen einer Datei? Für dateispezifische Liste zum Ignorieren von Zaubersprüchen verwenden?

8

Es hat mich das Gerücht erreicht, dass es möglich ist, vimBefehle in den ersten fünf oder in den letzten fünf Zeilen einer Datei zu platzieren. Aber ich konnte dies nicht in Google finden. Alle Hinweise wäre dankbar.

Ich frage mich, ob es möglich wäre, diese Funktion zu verwenden, um dateispezifische Ergänzungen zur Wortliste zu definieren.

Bearbeiten Danke! Das ist modelinees! Kann es in der vorgeschlagenen Weise zur Rechtschreibprüfung verwendet werden?

Yossi Gil
quelle
4
Du meinst etwas anderes als ein modeline?
Muru
2
einen Blick auf superuser.com/questions/641946/...
JJoao

Antworten:

8

Modelines scheinen eine Möglichkeit zu sein, dies zu tun, aber leider funktionieren sie nicht. -Modelines nur Unterstützung Einstellmöglichkeiten ( shiftwidth, colorcolumn, diese Art der Sache). Sie können eine Modeline verwenden vim: spell, um die Rechtschreibprüfung für ein Dokument zu aktivieren. Ist spellgood!jedoch ein Ex-Befehl, keine Option. Darüber hinaus können Sie aus Sicherheitsgründen einige Optionen (einschließlich , siehe ) von Modelines nicht festlegen .spellfile:help spellfile

Sie könnten eine Reihe von dateispezifischen Autobefehlen in Ihrem vimrc erstellen, aber das würde im Laufe der Zeit sehr schwer zu pflegen sein, mühsam, wenn Sie jemals zwei Dateien mit demselben Namen an verschiedenen Orten haben und nicht mit dem reisen würden Datei."

Stattdessen besteht die beste Lösung wahrscheinlich darin, eine eigene modellartige Funktion zum Hinzufügen von Wörtern zu erstellen, indem Sie einen definierten Textblock im Dokument analysieren. Sie können beispielsweise nach Zeilen suchen, die mit beginnen, "spellgood:"und den durch Leerzeichen getrennten Satz von Wörtern automatisch zur internen Wortliste hinzufügen:

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

Dann können Sie einen Autobefehl für beispielsweise BufReadPost * call AddLocalSpelling()in Ihrem einrichten .vimrc. In der Praxis möchten Sie wahrscheinlich die oben genannte Funktion angesichts von Fehlern robuster machen und möglicherweise verwenden, um commentszu sehen, was ein gültiges Kommentartoken ist (ich habe es ausgewählt, "weil ich es in einem VimL-Puffer getestet habe). Diese von JJoao in den Kommentaren verknüpfte SuperUser-Antwort bietet eine ähnliche, aber alternative Implementierung, mit der Sie Wortblöcke anstelle von jeweils nur einer Zeile verwenden können.

Diese Methode erfordert, dass andere dieselbe Funktion verwenden oder sich zumindest auf dieselben Analyseregeln einigen, sodass sie nicht perfekt ist. Sie können es aber auch verwenden und die Funktionalität auf Wunsch in ein Plugin umwandeln, um anderen Benutzern einen einfacheren Zugriff zu ermöglichen.

Gemeinschaft
quelle