我正在使用“:ta”来跳转到某个方法
例如,我有两个名为A.java
和B.java
的类。它们都有foo()
方法,而B.java有另一个方法fooBar()
。然后我打开A.java
并输入:ta foo
然后按 TAB 然后我将完成两次:foo
和fooBar
。但我现在要跳的只是当前文件中的标签,我不喜欢在其他文件中显示标签。
答案 0 :(得分:3)
根据您调用方法的次数,*
可能就足够了。
不使用标记,gd
可用于转到光标下方法的本地声明。我倾向于选择最低技术的解决方案,所以我会选择这个。
但ctags
也能够仅为单个文件或任意选择的文件生成标签。它可以在几个步骤中完成,但它的定义并不像您习惯做的那么简单......
使用您要扫描的文件的名称创建一个文件。假设它叫files.txt
,它位于工作目录的根目录。
使用tags
参数生成-L <file>
文件:ctags -L files.txt
。
此时,您应该有一个tags
文件,其中只包含步骤1中指定的文件中的标记。
在此处为整个项目和单个文件生成不同的tags
文件可能很有用。生成以当前文件命名的tags
文件并使其成为唯一tags
源的简短脚本可能会使整个过程变得更容易。
修改的
实际上,TagList和TagBar不会生成tags
个文件。它们运行的ctags <options>
命令的输出在内部使用,并使用各种正则表达式进行解析,以按范围或文件名或其他方式进行过滤。
答案 1 :(得分:2)
不幸的是,无法使用ctags 完成。 Ctags不尊重上下文,它是所有可能的“函数”的纯列表。尝试使用编辑器(例如vim)打开标记文件,您将看到它只是一个“函数”列表(在Java的情况下它们是“方法”)。例如:
getDesc src/com/redhat/rhn/internal/doclet/Handler.java /^ public String getDesc() {$/;" m class:Handler
getDoc src/com/redhat/rhn/internal/doclet/ApiCall.java /^ public String getDoc() {$/;" m class:ApiCall
Vim只是“按原样”搜索文件而不给它任何上下文 - 它只是搜索“功能”。它能够搜索文件,类,方法,枚举等。标签格式在此处有更详细的描述:http://ctags.sourceforge.net/FORMAT
在Vim你几乎没有可能。有几个插件可以为Vim提供一些上下文敏感度,但不能使用标签。 Vim本身有一个名为 OmniComplete 的功能,并且很少有专用于Java的插件。然后,您可以使用 Ctrl-X Ctrl-O 来启动completition。我建议你把它映射到一个不同的键(如果你愿意,可能是Ctrl-Space)。有关 Java OmniComplete插件的更多信息,请访问:
Eclim(http://eclim.org/)是非常全面的,但很难设置(你需要在后台运行Eclipse)。 JDE脚本更容易且更健壮(http://www.vim.org/scripts/script.php?script_id=1213)。请注意IntelliJ IDEA社区版(免费)也有一个非常好的Vim插件,可以免费使用。但我理解你 - Vim是Vim。
祝你好运!答案 2 :(得分:1)
不完全是你的问题的答案,但似乎没有办法完全按照你的需要做,所以,我建议你使用以下内容:对于你在Vim中的Java开发,试试eclim。
此工具可帮助您使用自己喜欢的文本编辑器Vim,具有Eclipse(IDE)的强大功能。
我无法找到:ta
的标签完成的模拟,但我知道g]
的明智模拟:这是一个命令:JavaSearchContext
。你可以将它映射到某个东西。
例如,如果您有两个课程A
和B
,并且每个课程中都有方法foo()
,那么g]
每次都会询问您跳转到foo()
,但:JavaSearchContext
将始终跳转到foo()
的正确声明。
当然,还有很多其他功能。