导航项目的传统方式是什么?

时间:2010-09-28 12:25:55

标签: vim navigation

刚从textmate转到vim我很好奇。为了能够高效地导航我的项目,我安装了command-t和ack.vim。这些似乎都是vim历史上相对较新的项目。当人们在vim中工作时,传统上做什么来移动项目,他们只是使用文件浏览器还是有一些我不知道的旧学校技巧?

8 个答案:

答案 0 :(得分:9)

我正确设置path,然后使用find进行大多数操作。有时我只依赖标签。标签允许标签完成,但查找不是。

在我的vimrc中:

set path=src/**;c:/work,scripts/**;c:/work

然后

:find foobar.cpp

如果foobar.cpp存在于我当前目录周围的某个src /文件夹下(在c:/ work被命中之后递归查找它),然后检查脚本层次结构,将会调高foobar.cpp。

:tag FooBar

只是跳到我那个类的定义,因为我使用ctags标记我的C源代码,我还编写了一个脚本来为内部DSL生成标记。

答案 1 :(得分:4)

我使用NerdTree,我几乎可以管理所有内容。

答案 2 :(得分:4)

我一般使用的是什么:

  1. 用于打开新文件::e使用制表符完成,或:Ex(在当前文件的目录中打开资源管理器)。

  2. 用于在缓冲区列表(:ls)中的文件之间跳转:taglist插件,或:b及其tab-completion。请注意,对于:b,制表符完成适用于子字符串。例如,如果缓冲区列表中有两个文件:module.h和module.cpp,则可以键入:b cpp,tab将完成module.cpp。非常方便!

  3. 对于制表符完成,我还建议使用必备的wildmenu(:set wildmenu :set wildmode=full

答案 3 :(得分:4)

诚实?我很少按名称打开代码文件。在大多数情况下,我使用带有ctrl-的ctags来浏览文件(跟随文件之间的定义),以及ctrl-t,ctrl-i和ctrl-o。在极少数情况下,我想按名称打开文件,这就是shell / explorer窗口的用途。

答案 4 :(得分:3)

许多人只是在bash命令行或Windows资源管理器中使用普通的文件浏览器,或者根据需要打开文件。对于导航现有的源树,cscope和ctags都非常有用。我发现project plugin对于类似IDE的项目和文件导航非常有用:它往往是我浏览源代码树的主要方式。结合ctags,cscope,command-t和ack,导航通常可以非常快。

答案 5 :(得分:3)

“传统上?”我已经使用:Sex多年了。文件名的那个和tab-completion并没有那么糟糕。即使在目录嵌套8或9深,使用/mo跳转到“模型”目录,然后点击o打开它...等等。

我在一台机器上安装了Command-T,这很不错,但没有什么比netrw

的可靠性更好

答案 6 :(得分:3)

我也只使用基本文件和缓冲区命令来管理我的项目。但是,我发现以下插件也使事情变得更容易:

  • 模糊查找器(使打开的文件更加愉快)
  • NERDTree(已经提到,做了一个很好的目录浏览器视图)
  • Taglist(用于在文件中导航)
  • alternate.vim(对于使用相应文件类型.h和.cpp编写C ++等语言非常有用)
  • MiniBufExplorer(更容易跟踪缓冲区)

另外,简单地重新映射:bn和:bp更容易使切换缓冲区更加舒适。例如:

nmap <C-n> :bn<cr>

nmap <C-p> :bp<cr>

最后,它没有被提及,但它与项目管理类型的东西有关,请务必查看内置的编译编辑内容

  • :help quickfix

我发现很多人第一次来到vim时并没有立即注意到它。

答案 7 :(得分:1)

我明白这可能为时已晚,但我希望这对某人有用。

我们有大约一千个C / C ++代码,php和shell文件的工作项目 脚本,配置和其他东西。

要浏览文件,请使用以下选项。

首先,我使用简单的grep包装器,存储在我的.vimrc中以查找文件中的特定字符串:

function MyGrep( pattern, path, case, whole )
    execute "normal! GoSearch text " . a:pattern . " in " . a:path . " and subdirs, case: " .a:case. " whole: ".a:whole
    "E - extended regexp, l - display filenames only, r - search recursively
    let l:keys = "Elr"
    if a:case == 0
        "case-sensitive
        let l:keys = l:keys . "i"
    endif
    if a:whole != 0
        "whole words only
        let l:keys = l:keys . "w"
    endif
    let l:cmd = "r!grep -" . keys . " -e \"" . a:pattern ."\" "
    let l:cmd2 = a:path . " --exclude=*.ncb --exclude=*.o --exclude=*.d --exclude-dir=.svn --exclude-dir=.d --exclude-dir=rc.d --binary-files=without-match"
    echo l:cmd . l:cmd2
    execute l:cmd . l:cmd2
endfunction

com -nargs=1 GrepHere          call MyGrep( <q-args>, "./", 0, 0)
com -nargs=1 GrepHereCaseWhole call MyGrep( <q-args>, "./", 1, 1)
com -nargs=1 GrepHereCase      call MyGrep( <q-args>, "./", 1, 0)
com -nargs=1 GrepHereWhole     call MyGrep( <q-args>, "./", 0, 1)

在Windows上,我使用vimgrep和changelist以及此命令(也在.vimrc中):

command -nargs=1 VGCodeHere :vimgrep /<args>/j ./**/*.{c,cpp,h,rc} | copen

两个&#39; greppers&#39;取决于当前的工作目录,所以不要忘记正确设置它。 我通常在Vim中打开一个新的未命名选项卡,并使用此搜索命令转储该文件 我感兴趣的名字,搜索结果,记录位置和其他信息。

第二,一个用于Vim的cscope实用程序和插件 - 这是非常方便的浏览文件的方式, 函数,项目中的符号,但是如果你处理C / C ++源代码。

第三次,原生的Vim技巧,例如

  • :e ./**/filename.cpp在文件系统子树中的某处打开filename.cpp。支持&lt; Tab&gt;文件名完成。
  • :tabe %<.h 打开相应的头文件(您可以将.h扩展名更改为您喜欢的任何内容)
  • :Ex 使用内置文件系统浏览器进行导航
  • Ctrl-O,Ctrl-I在Vim跳转列表中前后移动

要从下一次从同一个Vim状态恢复,我使用会话。 在Vim中保存会话 :mksession sessionname.vis ,并使用session启动vim: vim -S sessionname.vis