私は行の代わりに文のために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