如何在 Vim 中的函数中对文本应用替换

国家统计局

我知道我可以使用以下代码在函数中获取缓冲区的所有文本:

let alltext = getline(1,'$')

我也知道以下命令将行号添加到缓冲区中的所有行:

:%!cat -n

但是,我试图获取函数中的所有文本,然后向该文本添加行号以进行进一步处理。

以下不起作用:

let alltext = %!cat -n

或者:

let alltext = %s!cat -n

我不认为以下是正确的方法(我没有尝试它,因为它是系统命令并且我严重失火):

function Myfn()
   let alltext = getline(1,'$')  
   echo alltext | !cat -n
endfunction

如何alltext在上面的函数中添加行号,以便后续echo alltext将显示所有带有数字前缀的行?谢谢你的帮助。

罗马音

[range]!cat -n 仅在正常模式下“有用”(如果有的话)。

在脚本环境中,您需要以不同的方式思考。下面的方法使用:help map()并将在 Vim 7.4 及更高版本中工作:

function! Myfn()
   let alltext = getline(1,'$')
   echo alltext
   call map(alltext, 'v:key + 1 . " " . v:val')
   echo alltext
endfunction

假设以下内容:

foo
bar
baz

上面的函数将输出:

['foo', 'bar', 'baz']
['1 foo', '2 bar', '3 baz']

:help map():help lambda

如果您只关心 Vim 8 及更高版本,则可以使用新的 lambda 语法:

function! Myfn()
   let alltext = getline(1,'$')
   echo alltext
   call map(alltext, {key, val -> key + 1 . ' ' . val})
   echo alltext
endfunction

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章