vimで数値列の条件付き編集を使用するには?

vimで数値列の条件付き編集を使用するには?

たとえば、数値列がある場合:

4
6
8
10
12

8より大きい数値を計算する代わりに、Vimで8より大きいすべての数値を見つける方法はありますか?結果は新しい列です。

4
6
8
(10+2)=12
(12+2)=14

ベストアンサー1

これらの置換を実行するには、特別な代替式を使用できます\=。確認する:help sub-replace-specialすべての詳細を確認してください。この特定の代替品の仕組みは次のとおりです。

%s/\d\+/\=str2nr(submatch(0)) > 8 ? str2nr(submatch(0)) + 2 : submatch(0)

コマンドの代替部分では、:substitute完全な一致を提供します。グローバル関数はそれを数値に変換します。\=submatch(0)str2nr

ロジックをより読みやすくしたい場合は、それを関数として抽出できます。

function! IncrementNumber(number_string)
  let number = str2nr(a:number_string)
  if number > 8
    let number += 2
  endif

  return number
endfunction

これを入れて.vimrc調整し、しきい値を8パラメータなどに設定してからファイルから呼び出すことができます。

%s/\d\+/\=IncrementNumber(submatch(0))

おすすめ記事