2014-12-02 53 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

在這種情況下,我會聯繫降價語法文件的維護者,讓他/她如果(一個或多個)他可以解決這個問題。