我正在使用 :!grep "tag1"文件名 | grep "tag2"文件名 | vim 中的 grep -n "tag3 or more"filename
命令在一个大文件中根据标签(代码段顶部的简单注释)搜索我的代码片段,类似于 firefox 的标签功能。我使用片段来记住棘手的事情。
每次写出来都很痛苦。我想做一个别名,或者函数来做这样的事情:
:!greptag tag1 tag2 ... tag39
它应该搜索当前文档并返回带有所有标签的行。
Vim 设置为交互式 shell 模式,以便它可以解析我的 bashrc 以获取别名/函数。
set shellcmdflag=-ic "lets vim use bashrc
我如何在 bash 中构造一个允许这样的可变参数的函数?
最佳答案
你也可以使用 sed:
sed e '/tag1/!d;/tag2/!d;.../tagN/!d' filename
/tag1/!
命令是一个地址前缀,它告诉 sed 仅在该行包含 tag1 时才执行该命令。我们执行的命令是“d”,删除该行。
函数(在 .bashrc 中)将是:
greptags () {
local filename="$1"
shift
sed "$filename" -e "$(echo "$@" | sed -e 's,\([^ ]*\) *,/\1/\!d;,g')"
}
请注意,我们使用另一个 sed 命令将参数解析为最终的 sed 命令列表。基本上,对于每个单词(没有空格),我们删除其后面的空格并将其放入 /tagN/!d;
命令形式。
并称它为:
greptags filename tag1 tag2 tag3 tag4
希望这有帮助 =)
关于linux - 如何创建具有可变参数/参数的 bash 函数以 grep 多个关键字/标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735315/