Vimのスペルチェックを構文に対応させず、すべてをチェックできますか?


7

Vimのスペルチェッカーはコードに対応しています。構文ファイルを使用して、通常意味をなさない部分のスペルチェックを無効にします。

しかし、時々私これをスペルチェックたいと思います。試験例には、マークダウンコードブロック、HTML属性、変数/関数名などが含まれます。

私はファイルタイプ固有の解決策を探しているのではなく、Vimに「すべてをスペルチェックする」ように指示する一般的なものを探していることに注意してください。


注:この質問は以前にSOで出されましたが、ファイルタイプ固有の回避策しかありません。HTML属性のスペルをチェックするにはどうすればよいですか?; これもファイルタイプ固有の回避策です。


4
:syn offリンクの回答で述べたがファイルタイプに固有ではなく、これを実行する最も簡単なと最も簡単な方法のように見えます。
インゴカーカット、2015

@IngoKarkat Carpetsmokerがその答えを書いたのを見て、彼のニーズには十分ではないと私は推測しています。
リッチ

ええ、それは私が時々使用するものですが、構文の強調表示をすべて無効にするという明らかな副作用があります(これが私が頻繁に使用しない理由です)...おそらくそれは可能な限り最良の答えです、おそらく両方ともありますより良い方法(だから私はここでもう一度尋ねることが役に立つだろうと思いました)
Martin Tournoij、2015

回答:


3

これを有効にしたり無効にしたりしたい場合は(「ときどき」と書いて暗示されているように)、読み込まれている既存の構文アイテムからすべての@Spell@NoSpellクラスターを削除できるスクリプトが必要になると思います。(を参照してください:help spell-syntax。)

これを実装できる方法の1つは、を使用:redirして、呼び出しからの出力を:syntaxファイルにリダイレクトし、そのファイルを解析して、内部のすべての構文項目をリセットし、@Spell@NoSpellクラスターへの参照を削除することです。出力を変数にリダイレクトすることもできます

すべての場所でスペルチェックを永続的に有効にしたい場合は、実際にインストールされている構文ファイルからクラスターを削除するスクリプトを書く方が簡単です。

よりクリーンなソリューションが必要な場合は、Vim自体を編集する必要があると思います。


0

構文ファイルを修正するbashスクリプトを作成しました。それは完璧ではありませんが、それは良いです。もう一度実行すると元に戻すことができます。これは、追加contains=@Spellsyn 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/

リンクが死んでいるようです?あなたは持っているfix_syntax_files.shfix_vim_syntax_files.sh 、ここで同じように見えるれ、?どれが正しいリンクかわからない?
マーティンTournoij

すみません、config_filesリポジトリの向きを変えました。リンクを更新しました。
ドミニクダ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.