Tôi có thể làm cho kiểm tra chính tả của Vim không nhận biết cú pháp và kiểm tra mọi thứ không?


7

Trình kiểm tra chính tả Vim là nhận biết mã; nó sử dụng tệp cú pháp để vô hiệu hóa kiểm tra chính tả cho các phần mà nó thường không có ý nghĩa gì.

Tuy nhiên, nhân dịp tôi làm muốn kiểm tra chính tả này. Exampels bao gồm các khối mã markdown, thuộc tính HTML, tên biến / hàm, v.v.

Lưu ý rằng tôi * không tìm kiếm một giải pháp dành riêng cho filetype, mà là một cái gì đó chung chung bảo Vim "chỉ kiểm tra chính tả tất cả".


Lưu ý: câu hỏi này trước đây đã được đưa ra trên SO , nhưng chỉ có một cách giải quyết cụ thể về kiểu tệp. Cũng liên quan là Làm thế nào tôi có thể kiểm tra chính tả trong các thuộc tính HTML? ; đó cũng là một cách giải quyết cụ thể loại tệp.


4
Các :syn offđề cập trong câu trả lời liên quan không phải là filetype cụ thể, và trông giống như là cách dễ nhất và hầu hết đơn giản để làm điều này.
Ingo Karkat 23/2/2015

@IngoKarkat Xem như Carpetsmoker đã viết câu trả lời đó, tôi đoán nó không đủ cho nhu cầu của anh ta.
Giàu

Vâng, đó là những gì tôi sử dụng bây giờ, nhưng nó có tác dụng phụ rõ ràng là vô hiệu hóa tất cả tô sáng cú pháp (đó là lý do tại sao tôi không sử dụng nó thường xuyên) ... Có lẽ đó là câu trả lời tốt nhất có thể, cả có lẽ cũng có một cách tốt hơn (vì vậy tôi nghĩ sẽ rất hữu ích khi hỏi lại ở đây).
Martin Tournoij 23/2/2015

Câu trả lời:


3

Nếu bạn muốn đây là thứ gì đó bạn có thể bật và tắt (như bạn ngụ ý bằng cách viết "nhân dịp") Tôi nghĩ bạn sẽ cần một tập lệnh có thể loại bỏ tất cả @Spell@NoSpellcụm từ các mục cú pháp được tải hiện có. (Xem :help spell-syntax.)

Một cách mà bạn có thể thực hiện điều này là sử dụng :redirđể chuyển hướng đầu ra từ một cuộc gọi :syntaxđến một tệp, và sau đó phân tích tệp đó đặt lại tất cả các mục cú pháp bên trong, nhưng xóa các tham chiếu đến @Spell@NoSpellcụm. Cũng có thể chuyển hướng đầu ra thành một biến .

Nếu bạn vui lòng bật tính năng kiểm tra chính tả ở mọi nơi vĩnh viễn , thì việc viết một tập lệnh để loại bỏ các cụm từ các tệp cú pháp được cài đặt thực tế sẽ dễ dàng hơn.

Nếu bạn muốn một giải pháp sạch hơn, tôi nghĩ bạn sẽ phải tự chỉnh sửa Vim.


0

Tôi đã tạo bash script sửa các tập tin cú pháp. NÓ KHÔNG HOÀN HẢO NHƯNG NÓ TỐT. Nó có thể được đảo ngược bằng cách chạy lại. Nó cho biết thêm contains=@Spellđến syn matchsyn regionđịnh nghĩa trong tất cả các file trong thư mục nhất định.

Để dùng nó:

  1. Lưu tập lệnh dưới dạng fix_syntax_files.sh
  2. Cung cấp cho nó quyền
  3. Thay đổi đường dẫn ở dưới cùng của tập lệnh thành một vị trí tương ứng với vị trí bổ trợ vim của bạn
  4. Chạy kịch bản
  5. (TÙY CHỌN) Chạy lại tập lệnh để hoàn nguyên các thay đổi

Kịch bản tạo bản sao lưu của tất cả các tệp trước khi sửa đổi để bạn có thể cho rằng nó an toàn để chạy nó. Dù sao tôi cũng không chịu trách nhiệm cho các vấn đề tiềm ẩn do kịch bản gây ra.

Chỉnh sửa: Bạn có thể để lại phản hồi cho tập lệnh trong kho lưu trữ sau: 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/

Liên kết dường như đã chết? Bạn có fix_syntax_files.shfix_vim_syntax_files.sh ở đây , có vẻ giống nhau? Không chắc chắn cái nào là chính xác để liên kết đến?
Martin Tournoij

Xin lỗi tôi đã định hướng lại repo config_files của tôi. Liên kết được cập nhật.
dominikduda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.