刚从textmate转到vim我很好奇。为了能够高效地导航我的项目,我安装了command-t和ack.vim。这些似乎都是vim历史上相对较新的项目。当人们在vim中工作时,传统上做什么来移动项目,他们只是使用文件浏览器还是有一些我不知道的旧学校技巧?
答案 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)
我一般使用的是什么:
用于打开新文件::e
使用制表符完成,或:Ex
(在当前文件的目录中打开资源管理器)。
用于在缓冲区列表(:ls
)中的文件之间跳转:taglist插件,或:b
及其tab-completion。请注意,对于:b
,制表符完成适用于子字符串。例如,如果缓冲区列表中有两个文件:module.h和module.cpp,则可以键入:b cpp
,tab将完成module.cpp。非常方便!
对于制表符完成,我还建议使用必备的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)
我也只使用基本文件和缓冲区命令来管理我的项目。但是,我发现以下插件也使事情变得更容易:
另外,简单地重新映射:bn和:bp更容易使切换缓冲区更加舒适。例如:
nmap <C-n> :bn<cr>
nmap <C-p> :bp<cr>
最后,它没有被提及,但它与项目管理类型的东西有关,请务必查看内置的编译编辑内容
我发现很多人第一次来到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
使用内置文件系统浏览器进行导航要从下一次从同一个Vim状态恢复,我使用会话。
在Vim中保存会话
:mksession sessionname.vis
,并使用session启动vim:
vim -S sessionname.vis