Linux

如何使用條件編輯 vim 中的數字列?

  • March 28, 2020

例如,如果我有一列數字:

4
6
8
10
12

在 Vim 中有沒有一種方法可以找到所有大於 8 的數字,而不是只用這些數字進行數學運算?結果獲得一個新列:

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

\=您可以使用特殊的替換錶達式來實現這種替換。查看: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))

引用自:https://unix.stackexchange.com/questions/575405