Как сделать так, чтобы vim SpellCheck *не* знал код?

По умолчанию средство проверки орфографии vim учитывает код, поэтому оно не проверяет кодовые части файла. По сути, в уценке он считает (многострочные таблицы pandoc) кодами и, таким образом, не проверяет их содержимое на правописание.

Можно ли переопределить это? Или включите проверку орфографии для всего файла, включая код.


person Mustafa    schedule 02.12.2014    source источник


Ответы (4)


Насколько я могу судить, нет способа заставить Vim игнорировать предложения проверки орфографии в файле синтаксиса и просто «проверить все».

Достаточно сложный обходной путь — полностью отключить синтаксис с помощью :syn off; вы можете снова включить это с помощью :syn on.

Специально для Markdown можно отключить подсветку блоков кода с помощью :syn clear markdownCodeBlock; вы также можете сбросить это с помощью :syn on.

person Martin Tournoij    schedule 03.12.2014

Использовать синтаксическое заклинание

:syntax spell toplevel

См.: http://usevim.com/2013/05/10/synspell/.

person Arjen Dijkstra    schedule 02.12.2014
comment
Хотя на первый взгляд это выглядит многообещающе, внимательное прочтение :help syn-spell объясняет, почему это не работает: определяет, где должна выполняться проверка орфографии для текста, который не находится в элементе синтаксиса... Большинство файлов иметь почти все в элементе синтаксиса; Он не отменяет директиву @NoSpell. - person Martin Tournoij; 03.12.2014

В этом случае я бы связался с сопровождающим файла синтаксиса уценки и спросил его / ее, может ли он (она) решить эту проблему.

person Luc Hermitte    schedule 26.05.2017

Я создал bash-скрипт, исправляющий файлы синтаксиса. ЭТО НЕ ИДЕАЛЬНО, НО ЭТО ХОРОШО. Его можно отменить, запустив его снова. Он добавляет contains=@Spell к определениям syn match и syn region во всех файлах в данном каталоге.

Чтобы использовать его:

  1. Сохраните скрипт как fix_syntax_files.sh.
  2. Дайте ему разрешения
  3. Измените путь в нижней части скрипта на тот, который соответствует местоположению ваших плагинов vim.
  4. Запустить скрипт
  5. (НЕОБЯЗАТЕЛЬНО) Запустите скрипт еще раз, чтобы отменить изменения

Сценарий делает резервную копию всех файлов перед модификацией, поэтому вы можете предположить, что его запуск безопасен. Я в любом случае не несу никакой ответственности за возможные проблемы, вызванные скриптом.

Изменить: вы можете оставить отзыв о скрипте в следующем репозитории: 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/
person dominikduda    schedule 25.05.2017