Thêm tập tin từ cụ thể vào danh sách từ vim nội bộ (thông qua modeline)


9

Có thể thêm các từ được đánh vần chính xác vào danh sách từ nội bộ của vim thông qua modeline không? Hoặc một phương pháp cụ thể tập tin khác?

Vim có thể thêm từ vào danh sách từ nội bộ tạm thời thông qua lệnh chính zGhoặc :spellgood! {word}. Điều tương tự có thể được thực hiện trên modeline?

Một ví dụ sẽ theo sau văn bản nơi tôi muốn các từ viết tắt "RAS" và "RAP" được coi là những từ hay khi sử dụng kiểm tra chính tả của vim.

Hội chứng RAS (viết tắt của "hội chứng từ viết tắt dư thừa"), còn được gọi là hội chứng PNS ("hội chứng số PIN", mở rộng thành "hội chứng số nhận dạng cá nhân") hoặc cụm từ RAP ("cụm từ viết tắt dự phòng"), đề cập đến việc sử dụng một hoặc nhiều từ tạo thành từ viết tắt hoặc viết tắt kết hợp với hình thức viết tắt, do đó có hiệu lực lặp lại một hoặc nhiều từ.

Văn bản đã được sao chép từ http://en.wikipedia.org/wiki/RAS_sy Triệu chứng

Câu trả lời:


6

Hiện tại Vim cung cấp không có cơ chế "bản địa" để làm điều này, mặc dù tôi nghĩ rằng đó là một ý tưởng tốt. Điều duy nhất tôi có thể nghĩ đến là :autocmdmột hàm gọi một hàm tìm kiếm một phần đặc biệt trong tệp và sau đó di chuyển con trỏ qua các từ trong phần đó và kích hoạt zGbằng :normalcác lệnh. Điều này sẽ lộn xộn và tôi sẽ miễn cưỡng bận tâm với nó.

Chỉnh sửa: Tất nhiên, bằng cách nào đó, tôi bỏ qua sự tồn tại của:spellgood!, mặc dù đó là trong câu hỏi của bạn. Điều này làm cho công việc khả thi hơn nhiều. Tôi đã đưa ra một triển khai cơ bản mà bạn có thể điều chỉnh để phù hợp với nhu cầu của mình:

function! AutoSpellGoodWords()
    let l:goodwords_start = search('\C-\*-SpellGoodWordsStart-\*-', 'wcn')
    let l:goodwords_end = search('\C-\*-SpellGoodWordsEnd-\*-', 'wcn')
    if l:goodwords_start == 0 || l:goodwords_end == 0
        return
    endif
    let l:lines = getline(l:goodwords_start + 1, l:goodwords_end - 1)
    let l:words = []
    call map(l:lines, "extend(l:words, split(v:val, '\\W\\+'))")
    for l:word in l:words
        silent execute ':spellgood! ' . l:word
    endfor
endfunction

autocmd BufReadPost * call AutoSpellGoodWords()

Điều này sẽ tìm kiếm một khối trông giống như thế này:

-*-SpellGoodWordsStart-*-
word1 word2 word3
word4 word5 ...
-*-SpellGoodWordsEnd-*-

Và mỗi từ mà nó tìm thấy - trong trường hợp này, word1, word2, word3, word4, và word5--within khối nó sẽ thêm vào danh sách tạm lời tốt đẹp.

Chỉ cần lưu ý rằng tôi đã không kiểm tra căng thẳng này.


Điều này sâu hơn tôi mong đợi, và nó sẽ tạo ra một kịch bản vim rất hữu ích. Tôi đã kiểm tra vim.org, nhưng không có trận đấu nào tương tự. Cảm ơn!
Charles Maresh
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.