我在vim中使用:!grep "tag1" filename | grep "tag2" filename | grep -n "tag3 or more" filename命令,根据代码片段的标记(代码片段顶部的简单注释)在一个大文件中搜索代码片段,这与firefox的标记功能类似。我使用片段来记住棘手的事情。
每次写出来都很痛苦。我想创建一个别名或函数来执行以下操作:
:!greptag tag1 tag2 ... tag39它应该搜索当前文档,并返回包含所有标签的行。
Vim被设置为交互式shell模式,这样它就可以解析我的bashrc中的别名/函数。
set shellcmdflag=-ic "lets vim use bashrc如何在bash中构造允许变量参数的函数?
发布于 2012-10-05 05:10:02
您还可以使用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希望这会有帮助=)
发布于 2012-10-05 04:34:22
这样如何:
greptags() {
if [[ -z "$1" ]] ; then
cat
else
local t="$1" ; shift
greptags "$@" | grep "$t"
fi
}
greptag() {
local f="$1" ; shift
local t="$2" ; shift
grep "$t" "$f" | greptags "$@"
}(未经测试,可能不完全是您想要的,但说明了它的想法)。
https://stackoverflow.com/questions/12735315
复制相似问题