默認情況下,vim拼寫檢查器具有代碼識別功能,所以它不會拼寫檢查文件的代碼部分。實際上,在markdown中它認爲(pandoc multiline)表是代碼,因此不會拼寫檢查其內容。如何讓vim SpellCheck *不知道代碼?
是否可以重寫?或者對包括代碼在內的整個文件啓用拼寫檢查。
默認情況下,vim拼寫檢查器具有代碼識別功能,所以它不會拼寫檢查文件的代碼部分。實際上,在markdown中它認爲(pandoc multiline)表是代碼,因此不會拼寫檢查其內容。如何讓vim SpellCheck *不知道代碼?
是否可以重寫?或者對包括代碼在內的整個文件啓用拼寫檢查。
至於我能夠確定,有沒有辦法告訴Vim忽略語法文件 拼寫檢查的建議和只是「檢查一切」。
一個相當嚴厲的解決方法是完全禁用語法:syn off
; 您可以使用:syn on
重新啓用此功能。
專門針對Markdown,您可以使用 :syn clear markdownCodeBlock
禁用突出顯示的代碼塊;您也可以使用:syn on
重置此項。
我創建了bash腳本修復語法文件。它不是完美的,但它是好的。可以通過再次運行來反轉。它在給定目錄中的所有文件中將[email protected]
添加到syn match
和syn region
定義。
要使用它:
該腳本在修改之前對所有文件進行備份,因此您可以認爲運行它是安全的。無論如何,我對劇本造成的潛在問題不承擔任何責任。
編輯: 你可以離開反饋給腳本以下庫: 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/
在這種情況下,我會聯繫降價語法文件的維護者,讓他/她如果(一個或多個)他可以解決這個問題。
它也不適用於我。 – Mustafa 2014-12-02 23:52:43
雖然這看起來很有前景,但仔細閱讀':help syn-spell'解釋了爲什麼它不起作用:*「定義了對不在語法項」*「中的文本進行拼寫檢查的位置。大多數文件幾乎包含了所有「語法項目」中的所有內容。它不會覆蓋'@ NoSpell'指令。 – Carpetsmoker 2014-12-02 23:57:48