0

私の意見では、Vimscript には文字列を操作するための多くの機能がありません。matchstr()substitute()、および はあまり使用しませんstrpart()。おそらくそれ以上のものがあります。

たとえば、次の文字列の行番号の間のすべてのテキストを削除する最良の方法は何aですか?

let a = "\%8l............\|\%11l..........\|\%17l.........\|\%20l...."  " etc.

数字だけを保持してリストに入れたい:

['8', '11', '17', '20']  " etc.

(行番号間のテキストは異なる場合があることに注意してください。)

4

2 に答える 2

5

split() を探しています

echo split(a, '[^0-9]\+') 

編集:

新しい制約:からの数字のみ\%d\+lを考えると、次のようにします。

echo map(split(a, '|'), "matchstr(v:val, '^%\\zs\\d\\+\\zel')")

注: vim 変数の形式が正しくありません。バックスラッシュを 1 つだけ使用するには、文字列を単一引用符で囲む必要があります。二重引用符を使用すると、ここで 2 つのバックスラッシュが必要になります。だから、

let b = '\%8l............\|\%11l..........\|\%17l.........\|\%20l....'

あれは。。。になる

echo map(split(b, '\\|'), "matchstr(v:val, '^\\\\%\\zs\\d\\+\\zel')")
于 2012-04-04T08:50:00.537 に答える
2

式機能(を参照)を使用した置換を利用して、 :help sub-replace-\=すべてのターゲット一致を実行し、それらをリストに追加できます。

:let l=[] | call substitute(a, '\\%\(\d\+\)l', '\=add(l,submatch(1))[1:0]', 'g')
于 2012-04-05T14:37:33.150 に答える