1

選択範囲内の異なる文字の数を検出するスクリプトを作成しようとしています。ペ

a = 4  (the character "a" is 4 times in the selection)
b = 2
e = 10
\ = 2

これを取得するために、次のよう
なサブリストを含むリストを作成しました:
[['a', 1], ['b', 1], ['e', 1], ['\', 1]] --> etc
(a = 文字 // 1 = 文字がテキスト内で見つかった回数)

私が知らないのは:

  • サブリストを検索するには? リストに「e」または「\」がある場合、検索できますか?
  • 「e」の一致がある場合、「e」の後の数字に「1」を追加するにはどうすればよいですか?
    [['e', 1]] --> [['e', 2]]
  • また、正規表現を使用してサブリストを検索し、echo コマンド pe search [af] でエコーして、次の出力を取得するにはどうすればよいですか。

    a = 1
    b = 1
    e = 2

    c、d、f はリストに見つからないため、スキップする必要があります。

ところで...サブリストに関する適切なドキュメントがどこにあるか知っている人はいますか?
(vimのドキュメントでサブリストに関する情報があまり見つかりません)。

4

1 に答える 1

3

あなたの問題を正しく理解していれば、正しいデータ構造は、リストではなく、文字を出現回数にマッピングする辞書です。

let occurrences = { 'a': 1, 'b': 1, 'e': 1, '\': 1 }

を介して封じ込めをチェックしhas_key('a')、 を介してインクリメントすることができますlet occurrences['a'] += 1。結果を印刷するには

for char in keys(occurrences)
    echo char occurrences[char] "times"
endfor

また、Dictionaryの強力な関数map()と関数を使用できます。filter()たとえば、文字 af のみを含めるには、次のようにします。

echo filter(copy(occurrences), 'v:key =~# "[a-f]"')

詳しくは をご覧ください:help Dictionary

于 2012-05-21T08:50:57.663 に答える