Vim 文章挿入モードの完成

Vim 文章挿入モードの完成

私は行の代わりに文のためにvimで挿入モードを完了したいと思います。

C-x C-l行を完成させるが新しい行で始まらない文は完成できません。

たとえば、

I have a dog. My dog's name is Spot.

私は次のように入力できるようにしたいです。

My dog

次に、キーを押して文章を完成させます。

これを行う最良の方法は何ですか? ㅏ同じタイトルのスレッド解決策はありません。

答え1

Cx Copperをお試しください。 vimヘルプの全機能セクションで説明されているように、完成を定義する必要があります。タイプ:

:help complete-functions

それだけでこのセクションを見ることができます。同様に、

:help i_^X

(ここで^XはCx文字です。)このモードを説明するセクションが表示されます。文章は通常/パターンで終わることを覚えておいてください。 /。頑張ってください。

答え2

文章を完成させるために、同義語辞書完成器を修正しました。いくつかの改善はPWD /を使用して行うことができます。、グーテンベルク/本/、カーソルの周りのコンテキストを使用するより良い正規表現です。

" What: Complete sentence
" Usage: :so % <CR> Get sentence[press C-x C-o]
" How:  Get sentence completions using perl from current  file

set completeopt+=menuone

set omnifunc=MoshCompleteSentence
function!    MoshCompleteSentence(findstart, base)
    " == First call: find-sentence-backwards, see :help omnifunc
    if a:findstart
        let s:line = getline('.')
        let s:wordStart = col('.') - 1
        " Check backward for a sentence_prefix
        while s:wordStart > 0 && s:line[s:wordStart - 1] =~ '[A-Za-z0-9 _,]'
            let s:wordStart -= 1
        endwhile
        return s:wordStart

    else
        " == Second call: grep for sentence_regex, output: list of sentences
        let a:sentence_regex = a:base
        " in regex trim spaces
        let a:sentence_regex = substitute( a:sentence_regex,'\v^\s*(.{-})\s*$','\1','')
        " in regex change punctuation as dot.
        let a:sentence_regex = substitute(a:sentence_regex,'\W','.','g')
        " grep using perl
        let s:cmd='perl -ne '' '
            \.'chomp;'
            \.'next if m/^[;#]/;'
            \.'if( /('.a:sentence_regex.'.{1,30})/io ){'
            \.'   print qq/$1;;/ '
            \.'}'
            \. ' '' '
            \.expand("%:p")
        " == To debug: redir echom to file
        " redir >> c:/tmp/vim.log
        echom s:cmd
        let   s:rawOutput = system(s:cmd)
        let   s:listing = split(s:rawOutput, ';;')
        " echom join(s:listing,',')
        " redir END
        return s:listing
    endif
endfunction

関連情報