来自以下
# industrials
# * airlines: AAL
aal_score = run("AAL")
# information technology
# * MSFT
# * AAPL
msft_score = run("MSFT")
aapl_score = run("AAPL")
# materials
# * Agnico Eagle Mines AEM
aem_score = run("AEM")
# telecommunication services
# * ATT
att_score = run("ATT")
# utilities
# * AEP
aep_score = run("AEP")
我想收集变量名称并打印它们的值,比如
print "AAL score {%2.2f}".format(aal_score)
print "MSFT score {%2.2f}".format(msft_score)
print "AAPL score {%2.2f}".format(aapl_score)
...
如何在Vim中有效地做到这一点?
答案 0 :(得分:4)
这是一个流水线命令,可以执行您想要的操作,您将在名为Output
的文件中找到结果:
:g/^\s*\(\w*_score\)\s*=\s*run("\(\w*\)").*$/ s//&\rprint "\2 score {2.2f}".format(\1)/ | :. w! >> Output | normal! dd
上面的命令实际上分为3个命令:
:g/^\s*\(\w*_score\)\s*=\s*run("\(\w*\)").*$/ s//&\rprint "\2 score {2.2f}".format(\1)/
强> 首先是全局搜索,它搜索具有模式^\s*\(\w*_score\)\s*=\s*run("\(\w*\)").*$
的行(即这些行)
aal_score = run(“AAL”)
msft_score = run(“MSFT”)
aapl_score = run(“AAPL”)
aem_score = run(“AEM”)
att_score = run(“ATT”)
aep_score = run(“AEP”)
- [----- \ 1 ------] --------- [\ 2]
在每一行我们通过将其包围到\(...\)
(反向引用和分组)来捕获所需文本,然后我们使用替换:
s//&\rprint "\2 score {2.2f}".format(\1)/
每次生成(例如:)
aep_score = run(“AEP”)
打印“AEP得分{2.2f}”。格式(aep_score)
:. w! >> Output
强> 对于第二个命令,我们将在文件Output
的末尾写下打印行normal! dd
或 :.d
从当前文件中删除打印行