3

このようなHTMLコードがあります。

<tr>
  <td>$value</td>
  <td>$value</td>
  <td>$value</td>
</tr>

$value私は配列からの値ですべてを変更したいのですnew_value = ['Noodle', 'Rice', 'Pizza']が、いくつかのマクロを行うと解決されると思っていましたが、これが私の最初の試みです。

:let new_value = ['Noodle', 'Rice', 'Pizza']
:let i = 0
qq
/$value
:s/$value/\=new_value[i]/
:let i += 1
q

しかし、このマクロを実行すると、スムーズに実行されません。

4

1 に答える 1

4

マクロ内で 1 行下に移動する必要があります。現状では、毎回同じ行で代替コマンドを実行します。したがって、最初の 1 つだけ$valueが置き換えられます。(カーソルが最初の<td>行から始まったと仮定します。)

:let new_value = ['Noodle', 'Rice', 'Pizza']
:let i = 0
qq
/$value
:s/$value/\=new_value[i]/
:let i += 1
jq  <-- Added j

現在のようにマクロを実行すると、すべてのテキストが 1 行にある場合に適切に置換されます。


より良い解決策はこれですが

:let new_value = ['Noodle', 'Rice', 'Pizza']
:%s/$value/\=remove(new_value, 0)/g

1 行目で単語のリストを作成し、2 行目で のすべてのインスタンスをリストの先頭に置き換えます$value。これが完了new_valueすると、空になります。( new_value のサイズが の数に等しいと仮定$value)

于 2013-05-24T20:29:21.997 に答える