たとえば、数値列がある場合:
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))