2012-05-29 18 views
1

我使用taglist()来获取标签列表。 后来我做了一些过滤,只留下一些有用的一个是这样的:如何在窗口中显示自定义标签列表,如:tag或:ptag

let tttlist = taglist("^List$") 
"echo ttt 
let newtttlist = [] 
for item in tttlist 
    if item['kind'] == 'i' || item['kind'] == 'c' 
     call add(newtttlist, item) 
    endif 
endfor 
echo newtttlist 

但是,如何向他们展示,如:标记和:pTAG中的VIM?

回答

1

我看没有办法使用你所提到的这样的解决方案是在列表中的第一个项目使用:execute:ptag/:tag命令的一个标签小号显示:

execute 'ptag' fnameescape(get(newtttlist, 0, '')) 

。更多的,在找到其中一个标签后,您不需要处理标签列表:

let tttlist = taglist("^List$") 
for item in tttlist 
    if item.kind == 'i' || item.kind == 'c' 
     execute 'ptag' fnameescape(item.name) 
    endif 
endfor 

。如果你的意思是别的东西,请在这里发帖,告诉你如何使:ptag/:tag为你显示一个标签列表:根据文档和观察到的行为,他们所做的只是跳到第一个匹配。

另请注意:如果字典的关键字只包含拉丁字母,数字和下划线,则可以将其作为dict.key而不是dict['key']来访问。当使用字典传递结构化数据时,它几乎总是如此。

+0

感谢您的回复。 但这不是我所需要的。 你的方式就像直接调用“:ptag List”一样。 (我使用'List'作为例子)。 我只想显示标签是'我'还是'c'。 – stevenfrog

+0

@stevenfrog你可以使用'echo' /'echom'来做到这一点。原始请求是“show like:tag /:ptag”,这些命令都不会向您显示超过一个标签(:标签将跳转到它,不显示;:ptag将使用预览窗口)。因此我不能说应该做什么,因为我不知道它们应该如何显示。也许你甚至需要'echon' +'echohl'(例如,你不能模拟':tselect'的输出)。 – ZyX

+0

如果你想要显示的像'tselect',你应该考虑使用':execute'tselect /\V\^\%('.join(map(copy(newtttlist),'escape(v:val,“\\ “)'),'\\ |')。'\)\ $'。 – ZyX

相关问题