はじめはいくつかの文字で始まる2文字以上のバッファ内のすべての単語を取得する方法は?
私はmatch()
、matchstr()
などがある知っているが、それは、文字列(いないサブ試合)ですべての一致を返す機能がないようです。 matchstrpos()
を扱うことは可能ですが、たびに大きな正規表現解析正規表現があります。だから私は性能関連の仕事のためにsplit()
関数を使うのです。
私は少なくとも2つの文字が「テキスト」で始まるバッファ内のすべての単語を見つける必要がある
目標。パターンはとてもシンプルです。たとえば、 "f"で始まるすべての単語を検索するには、f\w\+
を使用しますが、パターンを逆にしてsplit()
関数に渡す方法はわかりません。今私は\W
を使用して、filter()
機能を持つ単語をフィルタリングします。私はアルゴリズムがより速くなると思う。
現在のコード
function! completion#filter(base, lastIndex, i, word)
return a:word[1] != "" && a:word[0:a:lastIndex] ==# a:base
" also tried this
" return a:word[1] != "" && strridx(a:word, a:base, 0) == 0
endfunction
let words = split(join(getline(1, "$"), "\n"), '\W\+')
call filter(words, funcref("completion#filter", [a:base, len(a:base) - 1]))
あなたの現在のコードを投稿すると助けになるかもしれません... –
まあ、コードはここにあります。 – Evgeniy
最後にすべての単語のリストが必要ですか? –