我知道我可以使用以下代码在函数中获取缓冲区的所有文本:
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] 删除。
我来说两句