如何使用条件编辑 vim 中的数字列?

如何使用条件编辑 vim 中的数字列?

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

4
6
8
10
12

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))

相关内容