我最近放弃了鼠标驱动的,特定于平台的GUI编辑器,并完全致力于vim.迄今为止的体验非常棒,但是当涉及到Javascript时我就陷入了困境.
广受欢迎的taglist实用程序(使用Exuberant Ctags)除了Javascript外,一切都很棒.使用该语言过于自由的形式和结构,taglist只能在我打开它时获取一些功能 - 只有以下格式定义的那些:
function FUNCNAME (arg1, arg2) {
Run Code Online (Sandbox Code Playgroud)
但没有定义的变量或函数对象:
var myFunc = function (arg1, arg2) {
Run Code Online (Sandbox Code Playgroud)
所以我google了一下,找到了ctags的以下定义集,我把它放在〜/ .ctags文件中:
--langdef=js
--langmap=js:.js
--regex-js=/([A-Za-z0-9._$]+)[ \t]*[:=][ \t]*\{/\1/,object/
--regex-js=/([A-Za-z0-9._$()]+)[ \t]*[:=][ \t]*function[ \t]*\(/\1/,function/
--regex-js=/function[ \t]+([A-Za-z0-9._$]+)[ \t]*([^])])/\1/,function/
--regex-js=/([A-Za-z0-9._$]+)[ \t]*[:=][ \t]*\[/\1/,array/
--regex-js=/([^= ]+)[ \t]*=[ \t]*[^""]'[^'']*/\1/,string/
--regex-js=/([^= ]+)[ \t]*=[ \t]*[^'']"[^""]*/\1/,string/
Run Code Online (Sandbox Code Playgroud)
之后,从命令行运行ctags非常棒.它找到了我需要它找到的每个功能和对象.
问题是taglist.vim插件没有看到这些新结果.当我在vim中打开我的javascript文件并点击:TlistToggle时,我得到了与之前相同的少量功能.我点击'u'更新列表,没有任何效果.
深入taglist.vim,我发现了这个:
" java language
let s:tlist_def_java_settings = 'java;p:package;c:class;i:interface;' .
\ 'f:field;m:method'
" javascript language
let s:tlist_def_javascript_settings = 'javascript;f:function'
Run Code Online (Sandbox Code Playgroud)
...这意味着我们只是从jta的ctags实用程序中查看一种特定类型的输出.不幸的是,我对taglist或vim一般都不够精明(尚未)发现我可以做出哪些改变以使所有那些精彩的ctags命令行结果显示在vim中.
帮助赞赏!
我在Vim窗口的左侧有NERDTree(中间的主要文件).每次打开Taglist(:TlistToggle)时,它都会与NerdTree一起显示在左侧.我为Taglist做了自定义重映射:
nnoremap <F3> :TlistToggle<CR>
Run Code Online (Sandbox Code Playgroud)
如何将Taglist打开到右侧而不是左侧?
我在vim中使用Taglist插件.在taglist窗口中,我可以看到名称空间,类,结构,函数等标签,但不能看到变量.我在Taglist网站上看到了一个截图(附在下面),里面有这个信息.我正在使用Vim 7和Exuberant Ctags 5.8,并且我使用此命令生成了我的ctags
ctags --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
Run Code Online (Sandbox Code Playgroud)
alt text http://vim-taglist.sourceforge.net/images/taglist_c.gif
我在开发中使用Vim和TagList.TagList似乎非常好,但是一个问题是它需要很长时间才能刷新,所以如果我的意思是从函数A到同一文件中的函数B,则TagList需要大约5秒钟才能获得更新.无论如何都要缩短这个间隔,例如半秒钟?
我在VIM中使用Taglist,但是我继承的一个特定的PHP应用程序用if()和elseif()以及include()进行了广泛的编码.每个文件(以及数十或数百个文件)的近5000行代码中没有单一的方法或函数.有没有办法使用Taglist或其他插件来获得代码流的概述?我正在考虑在侧边栏中以简洁的方式显示if()中的条件,包括它们的层次结构.任何远程接近的东西都会很棒.
谢谢!
我正在编辑使用Moose的软件包,我想知道是否有一个插件可以让Moose属性出现在Tag List中.
例如,在以下代码中,该属性options不会显示在Tag_List中,但会print_out_site执行以下操作:
use Moose;
use MooseX::AttributeHelpers;
...
has 'options' => (
metaclass => 'Collection::Hash',
isa => 'HashRef[Str]',
is => 'ro',
provides => {
exists => 'exists',
get => 'get',
set => 'set',
},
);
...
sub print_out_site {
my $self = shift;
my $key = shift;
$self->fasta_out_fh->print(">", $key, "\n");
$self->fasta_out_fh->print($self->sites->{$key}, "\n");
}
Run Code Online (Sandbox Code Playgroud) 我已经安装了DoctorJS(以前的jsctags),试图为Vim获得一些好的源代码浏览/标签列表(使用Taglist插件).
安装很顺利,但Vim的Taglist与DoctorJS不兼容.
当试图在Vim via中打开标签列表窗口时:TListToggle,我收到以下错误:
Taglist: Failed to generate tags for /home/me/script.js
ctags: illegal option -- -^@usage: ctags [-BFadtuwvx] [-f tagsfile] file ...^@
Run Code Online (Sandbox Code Playgroud)
我搜索了www,并找到了这个指南,建议一个名为Taglist-Plus的替换插件,但它不能与DoctorJS一起使用,只能使用旧的非维护版本jsctags.
简而言之 - 我无法让它发挥作用.很沮丧.我们应该能够拥有良好的JavaScript源代码浏览功能!
任何Vim都在那里设法让这个东西运转起来?
提前致谢.
在解决了这个问题后(感谢答案@romainl),我写了一篇关于如何轻松完成这个问题的简短指南作为另一个问题的答案.我建议检查一下.
我无法使用Scala使taglist插件正常工作.我已经安装了插件和ctags,并验证它与Java和C++一起正常工作.然后我按照本页面上的说明(减去Lift特定说明),但在编辑Scala文件时打开它时,标签列表窗口中没有显示任何内容.有没有人有这个工作,什么是正确的步骤?谢谢.
在我的项目中使用virtualenv和django,我试图找到一种更有效的方式来浏览Django源代码。
正如这里所建议的- 帮助开发人员更快地阅读类层次结构的工具 -我通过以下方式使用ctags进行了设置
sudo port -v install ctags
Run Code Online (Sandbox Code Playgroud)
并taglist通过https://github.com/vim-scripts/taglist.vim安装了vim插件
不幸的是,ctags当我尝试通过“跳转”查看类时,似乎无法找到我的django的类Ctrl+]。
有什么建议可以让我ctags阅读位于virtualenv中的python源代码吗?
更新
通过进一步的实验,我意识到这ctags是一种“索引”程序,它通过给定的目录/文件/文件进行解析,并捕获找到的所有关键字(类名,方法名,函数名等)并将其写入文件。该文件可以更新,并且vim插件taglist从中读取内容,以了解在对Ctrlt类/方法/函数名进行操作时将我发送到哪里。
因此,我想出了一个临时的手动解决方案,可以在vim中执行,如下所示:
:set tags=~/mytags
:! ctags -R -o ~/mytags ~/.virtualenvs/myprojectname
Run Code Online (Sandbox Code Playgroud)
第一个命令告诉我的vim / taglist我的“索引”结果存储在哪里。
第二条命令~/mytags通过递归搜索(-R)将索引结果写入文件。~/.virtualenvs/myprojectname
这是可行的,但是如果我碰巧在另一个virtualenv环境中,这是维护标签和标签更改的非常手动的方法。
有人知道管理该ctags过程的自动化方法吗?
我设置了"set guioptions- = l",但只要启用了taglist,左手滚动条仍会显示,无法禁用(右手滚动条切换正常).另外,如果启用了taglist,vim将不会在启动时最大化.
如果以上不能修复,是否有任何taglist altenatives.