Kann ich die Rechtschreibprüfung von Vim nicht syntaxbewusst machen und alles überprüfen?

7

Die Vim-Rechtschreibprüfung ist codebewusst. Es verwendet die Syntaxdatei, um die Rechtschreibprüfung für die Teile zu deaktivieren, bei denen dies normalerweise keinen Sinn ergibt.

Gelegentlich möchte ich dies jedoch überprüfen. Beispiele umfassen Markdown-Codeblöcke, HTML-Attribute, Variablen- / Funktionsnamen usw.

Beachten Sie, dass ich * nicht nach einer filetypspezifischen Lösung suche, sondern nach einer generischen Lösung, die Vim auffordert, "nur die Rechtschreibprüfung durchzuführen".


Hinweis: Diese Frage wurde zuvor in SO gestellt , hat jedoch nur eine filetypspezifische Problemumgehung. Auch im Zusammenhang ist Wie kann ich die Rechtschreibung überprüfen in HTML - Attribute? ;; Dies ist auch eine datentypspezifische Problemumgehung.

Martin Tournoij
quelle
4
Die :syn offin der verknüpften Antwort erwähnte ist nicht filetypspezifisch und scheint der einfachste und einfachste Weg zu sein, dies zu tun.
Ingo Karkat
@IngoKarkat Als Carpetsmoker diese Antwort schrieb, schätze ich, dass sie für seine Bedürfnisse nicht ausreicht.
Rich
Ja, es ist das, was ich jetzt gelegentlich benutze, aber es hat den offensichtlichen Nebeneffekt, dass alle Syntaxhervorhebungen deaktiviert werden (weshalb ich es nicht so oft benutze) ... Vielleicht ist es die bestmögliche Antwort, beides gibt es vielleicht auch ein besserer Weg (also dachte ich, es wäre nützlich, hier noch einmal zu fragen).
Martin Tournoij

Antworten:

3

Wenn Sie möchten, dass dies etwas ist, das Sie ein- und ausschalten können (wie Sie durch "gelegentliches Schreiben" angedeutet haben), benötigen Sie wahrscheinlich ein Skript, mit dem alle @Spellund @NoSpellCluster aus den vorhandenen geladenen Syntaxelementen entfernt werden können. (Siehe :help spell-syntax.)

Eine Möglichkeit, dies zu implementieren, besteht darin :redir, die Ausgabe von einem Aufruf an :syntaxeine Datei umzuleiten und diese Datei dann zu analysieren, wobei alle darin enthaltenen Syntaxelemente zurückgesetzt werden, aber Verweise auf @Spellund @NoSpellCluster entfernt werden. Es ist auch möglich, die Ausgabe in eine Variable umzuleiten .

Wenn Sie die Rechtschreibprüfung überall dauerhaft aktivieren möchten, ist es einfacher, ein Skript zu schreiben, um die Cluster aus den tatsächlich installierten Syntaxdateien zu entfernen.

Wenn Sie jedoch eine sauberere Lösung wünschen, müssen Sie Vim selbst bearbeiten.

Reich
quelle
0

Ich habe Bash-Skript zur Korrektur von Syntaxdateien erstellt. Es ist nicht perfekt, aber es ist gut. Es kann durch erneutes Ausführen rückgängig gemacht werden. Es fügt contains=@Spellzu syn matchund syn regionDefinitionen in allen Dateien in bestimmten Verzeichnis.

Um es zu benutzen:

  1. Speichern Sie das Skript als fix_syntax_files.sh
  2. Gib ihm Berechtigungen
  3. Ändern Sie den Pfad am unteren Rand des Skripts in einen Pfad, der dem Speicherort Ihres vim-Plugins entspricht
  4. Führen Sie das Skript aus
  5. (OPTIONAL) Führen Sie das Skript erneut aus, um die Änderungen rückgängig zu machen

Das Skript erstellt vor der Änderung eine Sicherungskopie aller Dateien, sodass Sie davon ausgehen können, dass die Ausführung sicher ist. Ich übernehme sowieso keine Verantwortung für mögliche Probleme, die durch das Skript verursacht werden.

Bearbeiten: Sie können dem Skript im folgenden Repository Feedback geben: https://github.com/dominikduda/config_files/blob/master/bin/fix_vim_syntax_files.sh

#!/bin/bash

function fix_file {
  sed -i -e '/exe/! {s/contains=/contains=@Spell,/g}' $1
  sed -i -e 's/contains=@Spell,ALL/contains=ALL/g' $1
  sed -i -e 's/contains=@Spell,ALLBUT/contains=ALLBUT/g' $1
  sed -i -e 's/contains=@Spell,TOP/contains=TOP/g' $1
  sed -i -e 's/contains=@Spell,CONTAINED/contains=CONTAINED/g' $1
  sed -i -e 's/contains=@Spell,NONE/contains=@Spell/g' $1
  sed -i -e '/^ *syn match/ {/contains=/! s/$/ contains=@Spell/g}' $1
  sed -i -e '/^ *syn region/ {/contains=/! s/$/ contains=@Spell/g}' $1
  return 0
}

function revert_file {
  mv "$1/$2.spellfix-backup" "$1/$2"
  return 0
}

function fix_recursively_in_catalog {
  syntax_catalogs_paths="$(find $1 -type d ! -name '*.*' -not -path '*git*' -print)"
  syntax_catalogs_count="$(echo "${syntax_catalogs_paths}" | wc -l)"

  echo "${syntax_catalogs_count} syntax catalogs found and will be scanned for files"

  echo "${syntax_catalogs_paths}" | while read -r catalog_path ; do
      echo "    Scanning $catalog_path"
      ls -p "${catalog_path}" | grep -v / | grep -v .spellfix-backup | grep .vim | while read -r file_name ; do
          cp "${catalog_path}/${file_name}" "${catalog_path}/${file_name}.spellfix-backup"
          fix_file "${catalog_path}/${file_name}"
          echo "        Fixing ${file_name} (backup created as ${file_name}.spellfix-backup)"
      done
  done
  echo 'Fix done.'
  echo 'Remember to REVERT FIX before updating vim plugins'
  return 0
}

function revert_recursively_in_catalog {
  syntax_catalogs_paths="$(find $1 -type d ! -name '*.*' -not -path '*git*' -print)"
  syntax_catalogs_count="$(echo "${syntax_catalogs_paths}" | wc -l)"

  echo "${syntax_catalogs_count} syntax catalogs found and will be scanned for spellfix-backup files"

  echo "${syntax_catalogs_paths}" | while read -r catalog_path ; do
      echo "    Scanning $catalog_path"
      ls -p "${catalog_path}" | grep -v / | grep -v .spellfix-backup | grep .vim | while read -r file_name ; do
          revert_file "${catalog_path}" "${file_name}"
          echo "        Reverting ${file_name} (from file ${file_name}.spellfix-backup)"
      done
  done
  echo 'Revert done.'
  echo 'Remember to FIX AGAIN after plugins update (or set it as a post update hook)'
  return 0
}

function main {
  syntax_catalogs_paths="$(find $1 -type d ! -name '*.*' -not -path '*git*' -print)"
  while read -r catalog_path ; do
      if ls -p "${catalog_path}" | grep -v / | grep .spellfix-backup; then
        echo ".spellfix-backup files found, reverting fix!"
        echo "--------------------------------------------"
        revert_recursively_in_catalog $1
        return 0
      fi
  done < <(echo "${syntax_catalogs_paths}")
  echo ".spellfix-backup files NOT found, fixing!"
  echo "-----------------------------------------"
  fix_recursively_in_catalog $1
}

main ~/PATH/TO/VIM/PLUGINS/
dominikduda
quelle
Link scheint tot zu sein? Sie haben fix_syntax_files.shund fix_vim_syntax_files.sh hier , welche scheinen gleich? Sie sind sich nicht sicher, zu welchem ​​Link Sie den richtigen Link erstellen sollen?
Martin Tournoij
Entschuldigung, ich habe mein config_files-Repo neu ausgerichtet. Link wird aktualisiert.
Dominikduda