2014-12-02 56 views
4

默认情况下,vim拼写检查器具有代码识别功能,所以它不会拼写检查文件的代码部分。实际上,在markdown中它认为(pandoc multiline)表是代码,因此不会拼写检查其内容。如何让vim SpellCheck *不知道代码?

是否可以重写?或者对包括代码在内的整个文件启用拼写检查。

回答

2

至于我能够确定,有没有办法告诉Vim忽略语法文件 拼写检查的建议和只是“检查一切”。

一个相当严厉的解决方法是完全禁用语法:syn off; 您可以使用:syn on重新启用此功能。

专门针对Markdown,您可以使用 :syn clear markdownCodeBlock禁用突出显示的代码块;您也可以使用:syn on重置此项。

2

使用语法拼写

:syntax spell toplevel 

参见: http://usevim.com/2013/05/10/synspell/

+0

它也不适用于我。 – Mustafa 2014-12-02 23:52:43

+2

虽然这看起来很有前景,但仔细阅读':help syn-spell'解释了为什么它不起作用:*“定义了对不在语法项”*“中的文本进行拼写检查的位置。大多数文件几乎包含了所有“语法项目”中的所有内容。它不会覆盖'@ NoSpell'指令。 – Carpetsmoker 2014-12-02 23:57:48

0

我创建了bash脚本修复语法文件。它不是完美的,但它是好的。可以通过再次运行来反转。它在给定目录中的所有文件中将[email protected]添加到syn matchsyn region定义。

要使用它:

  1. 脚本另存为fix_syntax_files.sh
  2. 给它在脚本的底部一个对应于你的vim插件位置
  3. 运行权限
  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=/[email protected],/g}' $1 
    sed -i -e 's/[email protected],ALL/contains=ALL/g' $1 
    sed -i -e 's/[email protected],ALLBUT/contains=ALLBUT/g' $1 
    sed -i -e 's/[email protected],TOP/contains=TOP/g' $1 
    sed -i -e 's/[email protected],CONTAINED/contains=CONTAINED/g' $1 
    sed -i -e 's/[email protected],NONE/[email protected]/g' $1 
    sed -i -e '/^ *syn match/ {/contains=/! s/$/ [email protected]/g}' $1 
    sed -i -e '/^ *syn region/ {/contains=/! s/$/ [email protected]/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/ 
0

在这种情况下,我会联系降价语法文件的维护者,让他/她如果(一个或多个)他可以解决这个问题。