我使用C ++或Java编程。所以我想使用Vim编辑器,因为它非常灵活。我听说我可以配置Vim编辑器以便能够
我们是否有任何专业的Vim-er可以告诉我如何为此配置Vim?提前谢谢。
P.S。如果读者会认为这个问题与编程无关,我会说这是在提高编程速度。所以它对程序员有帮助。所以请不要关闭这个问题。
编辑:另外我想知道vim如何处理代码完成,并且可以提示提示某些对象可用的方法列表?如果是,那么我想知道如何配置这些选项?
答案 0 :(得分:12)
您正在寻找的是ctags和标签/ TAGS文件。 Ctags(我推荐使用Exuberant Ctags)是一个程序,它扫描源文件中的标识符并创建索引它们的文件。然后,您可以使用^]跳转到光标下标记的定义。
可能需要一些额外的细节来告诉vim如何找到标签文件;我不确定他们是什么。但这是一般的想法 - 对源代码运行ctags然后使用^]。
或者,您可以查看GNU Global。它有点复杂。但是ctags将完成你所描述的内容。
答案 1 :(得分:2)
Vim毫无疑问,是世界上最好的编辑(快来找我emacs)。除了火焰之战,我发现对C ++和Java编程都非常有用的是eclipse(世界上最好的IDE,现在我正在戳Netbeans)和vrapper插件。您可以获得完全集成的开发环境和vim键盘快捷键的强大功能。
Vrapper并没有为你提供完整的vim仿真,但是你可以使用vim快捷方式在你的代码周围反弹,而且你不会失去日食的任何优点。
答案 2 :(得分:2)
使用ctags绝对是开始的地方,但不要忘记cscope。在这两种情况下,首先让cscope和ctags扫描源文件并在启动vim之前创建它们的数据库。随着代码的增长和变化,您还需要偶尔刷新数据库。
使用ctags,只需在代码目录中使用命令“ctags
”即可。如果您有目录的层次结构,请从顶部开始并使用“ctags -R
”来递归下面的所有目录。在与生成的标签文件相同的目录中启动vim,vim应该自动查找并加载它。当光标位于函数或变量名称的编辑器中时,可以键入“^]”,vim应该跳转到定义。
同样,使用cscope,使用“cscope -b
”或“cscope -b -R
”来获取更详细的标记信息。 Vim和cscope协同工作,为您提供更多信息,例如使用标识符的位置以及调用函数的位置。有一组宏可用于访问信息。您可以在vim cscope帮助信息中找到宏及其含义。
答案 3 :(得分:2)
上次我检查过,很久以前,ctags
还可以,但它遗漏了一些标识符,cscope
有一个更详尽的搜索选项,但它仍然遗漏了一些标识符。
grep
。它是详尽无遗的,但如果源代码库的大小合理或PC速度很快,它仍然非常快。您可以使用:grep
从vim调用它。这是我自己的_vimrc
的简化版本,以显示我如何配置它。我发表评论来解释什么键做什么。
" for Windows, replace with the location of `grep.exe'
" not needed for Unix/Linux
:set grepprg=c:\prog\cygwin\bin\grep.exe\ -n\ $*\ /dev/null
:function! RecursiveSearchIdentifierUnderCursor()
: sp
: let grep_cmd = "silent grep -r \"\\<" . expand("<cword>") . "\\>\" *"
: exe grep_cmd
:endfunction
" CTRL-backslash to search for the identifier (or "word") under the cursor
"
" an identifier is in the form "xxx_123_yyy" but something in the form
" "xxx_123_yyy.aaa_999" would be two identifiers separated by a period
"
"
" this basically executes:
"
" :grep -r "\<identifier\>" *
"
" for whatever `identifier' the cursor happens to be over
"
"
" to close the newly opened window, use:
"
" :q
"
:map <C-\> :call RecursiveSearchIdentifierUnderCursor()<CR>
" cursor up/down to move to the previous/next search result
:map <Up> :cp<CR>zz
:map <Down> :cn<CR>zz
" jump up/down between horizontally split windows
:map <PageUp> <C-W>k
:map <PageDown> <C-W>j
" move to the previous/next enclosing brace
:map <Left> [{
:map <Right> ]}
" move to the previous/next enclosing parenthesis
:map <Home> [(
:map <End> ])
" move to the previous/next enclosing # preprocessor directive
:map <Insert> [#
:map <Del> ]#
另外,不要忘记*
(SHIFT-8)和#
(SHIFT-3)向前和向后搜索当前文件中光标下的当前标识符。我在通过代码跳转时发现这些非常宝贵,尤其是在搜索短变量名称时,比如'i'和'j',否则会在传统文本编辑器中盲目搜索其他变量名称的部分。
如果您想使用:make
,也可以从vim
调用make
。它将在第一次编译错误时停止,然后您可以从vim
内部再次编辑和启动构建。
一旦您熟悉定义自己的函数和键映射,有很多方法可以使vim
更容易重复编程任务。
答案 4 :(得分:1)
vim中的代码完成可用作vim-scripts:http://www.vim.org/scripts/index.php
答案 5 :(得分:1)
ctags *.c *.h
是一个简单的开始。然后,正如迈克尔所说,你可以使用^]来定义,然后使用^ T返回你来自的地方。这些是你用来在Vim帮助中移动的相同键。
在Java和C ++中,您可能有多个具有相同名称的方法。 :tn
将转到下一个,:ts
将列出备选方案。
对于Vim中的代码完成,我通常使用^ P和^ N.它不像Eclipse或MSVC中的等效项那样是上下文敏感的,但通常可以完成这项工作。
您可能考虑使用的其他工具是cscope
和(当然)Emacs或Eclipse。
答案 6 :(得分:1)
正如其他人所说,你需要为vi(m)生成一个索引文件。
我只想说使用vim编程Java而不是现代IDE,就像使用vim加上计算器而不是数字电子表格。两者都可以用于小任务,但是在扩展时,您会达到电子表格刚刚离开文本编辑器的程度。
如果你以java编程为生,请自己和雇主帮忙,并学会使用电动工具。
答案 7 :(得分:-1)
是的,提供此符号索引的工具称为ctags,许多unix编辑器都可以使用它。 vim在命令行上很不错,但我建议你花点时间习惯KATE。它是一个非常漂亮,现代的GUI编辑器,具有类似IDE的文件浏览,良好的语法高亮,我曾经使用的最好的动态文字包装等等。对于java,eclipse和netbeans可能值得一看。