내부 vim wordlist에 파일 고유의 좋은 단어 추가 (modeline을 통해)


9

modeline을 통해 철자가 올바른 단어를 vim의 내부 단어 목록에 추가 할 수 있습니까? 아니면 다른 파일 특정 방법?

Vim은 키 명령 zG또는을 통해 임시 내부 단어 목록에 단어를 추가 할 수 있습니다 :spellgood! {word}. 모델에서 동일한 작업을 수행 할 수 있습니까?

예를 들어 vim의 맞춤법 검사를 사용할 때 약어 "RAS"및 "RAP"를 좋은 단어로 사용하려는 텍스트가 있습니다.

RAS 증후군 ( "중복 약어 증후군 증후군"의 약자), PNS 증후군 ( "개인 식별 번호 번호 증후군 증후군"으로 확장되는 "PIN 번호 증후군 증후군") 또는 RAP 문구 ( "중복 약어 문구"), "약어"는 약어와 함께 약어 또는 초기를 구성하는 하나 이상의 단어를 사용하여 사실상 하나 이상의 단어를 반복하는 것을 의미한다.

텍스트는 http://en.wikipedia.org/wiki/RAS_syndrome 에서 복사되었습니다 .

답변:


6

현재 Vim은 "네이티브"메커니즘을 제공하지 않지만 좋은 생각이라고 생각합니다. 내가 생각할 수있는 유일한 방법은 있습니다 :autocmd다음 파일에 특별 섹션을 검색하여이 섹션의 단어 및 트리거에 커서를 이동하는 함수를 호출 그 zG:normal명령을. 이것은 지저분 할 것이고 나는 그것을 귀찮게하는 것을 꺼려 할 것입니다.

편집 : 물론, 나는:spellgood!그것이 당신의 질문에 있음에도 불구하고의 존재를 간과했습니다. 이것은 일을 훨씬 더 실현 가능하게 만듭니다. 나는 당신이 당신의 요구에 맞게 조정할 수있는 기본 구현을 생각해 냈습니다.

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()

이렇게하면 다음과 같은 블록이 검색됩니다.

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

그리고 각 단어는 그것이 발견 -이 경우, word1, word2, word3, word4, 및 word5블록 --within는 임시 좋은 단어 목록에 추가됩니다.

스트레스 테스트를하지 않았다는 점에 유의하십시오.


이것은 내가 예상했던 것보다 더 깊이 있고 매우 유용한 vim 스크립트를 만들 것입니다. vim.org를 확인했지만 비슷한 항목이 없습니다. 감사!
Charles Maresh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.