5 dòng đầu tiên và cuối cùng của một tập tin? Sử dụng cho danh sách bỏ qua chính tả cụ thể tập tin?


8

Có tin đồn cho tôi biết rằng có thể đặt vimcác lệnh trong năm đầu tiên hoặc trong năm dòng cuối cùng của tệp aa. Nhưng, tôi không thể tìm thấy điều này trong Google. Bất kỳ khách hàng tiềm năng sẽ được đánh giá cao.

Tôi tự hỏi nếu có thể sử dụng tính năng này để xác định bổ sung cụ thể của tập tin vào danh sách từ.

Chỉnh sửa Cảm ơn! Các modelinenó là! Nó có thể được sử dụng để kiểm tra chính tả theo cách được đề xuất không?


4
Bạn có ý gì khác ngoài a modeline?
muru

Câu trả lời:


8

Modelines có vẻ như là một cách để làm điều này, nhưng tiếc là chúng sẽ không hoạt động. Modelines chỉ hỗ trợ các tùy chọn cài đặt ( shiftwidth,, colorcolumnloại đó). Bạn có thể sử dụng một mô hình như vim: spellđể kích hoạt kiểm tra chính tả cho một tài liệu. Tuy nhiên, spellgood!là một lệnh Ex, không phải là một tùy chọn. Hơn nữa, bạn đặc biệt không thể đặt một số tùy chọn (bao gồm spellfile, xem :help spellfile) từ các mô hình vì lý do bảo mật.

Bạn có thể tạo một loạt các autocommands tệp cụ thể trong vimrc của mình, nhưng điều đó sẽ trở nên rất khó để duy trì theo thời gian, tẻ nhạt nếu bạn từng có hai tệp có cùng tên ở các vị trí khác nhau và sẽ không di chuyển "với tập tin."

Thay vào đó, giải pháp tốt nhất có lẽ là xây dựng tính năng giống mô hình của riêng bạn để thêm từ bằng cách phân tích một số khối văn bản đã xác định trong tài liệu. Ví dụ: bạn có thể tìm các dòng bắt đầu bằng "spellgood:"và tự động thêm bộ từ được phân tách bằng dấu cách vào danh sách từ bên trong:

function! AddLocalSpelling ()
  " Save the cursor position.
  let cursor_position = getcurpos()

  let location = searchpos("\"spellgood:", "c")
  while location != [0, 0]
    let words = split(getline(location[0]))
    " The first 'word' will be the sentinel token itself (unless)
    " we found the token in an embedded string or comment...
    if words[0] == "\"spellgood:"
      call remove(words, 0)
      for word in words
        execute "silent spellgood! " . word
      endfor
    endif
    let location = searchpos("\"spellgood:", "W")
  endwhile

  " Restore cursor position.
  call setpos(".", cursor_position)
endfunction

Sau đó, bạn có thể thiết lập một autocommand cho, nói BufReadPost * call AddLocalSpelling()trong của bạn .vimrc. Trong thực tế, có lẽ bạn muốn làm cho chức năng trên trở nên mạnh mẽ hơn khi đối mặt với các lỗi và có thể sử dụng commentsđể xem mã thông báo nhận xét hợp lệ là gì (tôi đã chọn "vì tôi đã thử nghiệm điều này trong bộ đệm VimL). Câu trả lời SuperUser này được liên kết bởi JJoao trong các bình luận cung cấp cách triển khai tương tự nhưng thay thế cho phép bạn sử dụng các khối từ thay vì chỉ một dòng tại một thời điểm.

Phương pháp này sẽ yêu cầu những người khác sử dụng cùng chức năng hoặc ít nhất là đồng ý với các quy tắc phân tích cú pháp tương tự, vì vậy nó không hoàn hảo. Nhưng bạn có thể lấy nó và quảng bá chức năng cho một plugin nếu bạn muốn, cho phép người dùng khác truy cập dễ dàng hơn.

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.