如何在VIM中将项目添加到项目(如Sublime Text)?

时间:2015-08-19 21:45:03

标签: vim sublimetext3 sublimetext vim-plugin ctrlp

我刚刚从Sublime Text切换到GVIM(在Windows上)。我仍然在争论是否应该继续ST或完全转向VIM。我迫切需要(或错过)的一个功能是

  1. Ctrl+P转到我想要的文件列表中的任何文件。
  2. Ctrl+Shift+f查找(并替换)这些文件夹列表中的任何文本。
  3. 我在Sublime Text 3中使用Add Folders to Project功能添加了多个文件夹。这真的很有帮助。现在,我知道VIM的CtrlP插件可以做类似的事情,但我无法弄清楚如何让它搜索我想要的文件夹,而不是当前文件的根目录。

    我在vimrc文件中设置路径时玩了一下但没有取得多大成功。

    你能帮忙吗?如果这是一个重复的问题,请原谅。

    感谢。

4 个答案:

答案 0 :(得分:2)

AFAIK,ctrlp插件只在一个目录(及其后代)中搜索。使用Unix功能:创建一个目录,其中包含您感兴趣的项目外目录的链接。这样,与项目外目录的关联不仅仅是编辑知道的内容,而是实际项目中记录的内容。

搜索和替换是一个有点棘手的事情。您希望使用您感兴趣的所有文件,然后通过所有文件重复替换命令。例如,如果您要搜索foo并在此处及其下的所有C文件中替换为bar

:args **/*.c
:argdo %s/foo/bar/g

答案 1 :(得分:1)

  1. Ctrl+P转到我的文件夹列表中的任何文件。

    :find命令可用于"查找" 'path'选项中指定的目录中的文件:

    set path+=/some/arbitrary/path
    set path+=/another/one
    
    :find *foo
    

    我发现这两个映射非常方便:

    nnoremap <key> :find *                                    " search in every directory
                                                              " in 'path'
    nnoremap <key> :find <C-R>=expand('%:p:h').'/**/*'<CR>    " start from the directory
                                                              " of the current file
    
  2. Ctrl+Shift+f查找(并替换)这些文件夹列表中的任何文字。

    amadan上面说的是什么。

答案 2 :(得分:0)

好开关!所以你发现了CtrlP。它内置了大量文档。使用:h ctrlp查看解释各种选项的完整vimdoc。它将解释工作目录的一些重要设置,这对于获得良好的体验非常重要。以我使用的一些设置为例:

" The one you really care about...
" Set root to CWD. Another good option is 'r' for VCS mode.
" You should start vim in the root of your project tree
let g:ctrlp_working_path_mode = 0
" You _can_ switch dirs
let g:ctrlp_extensions = ['dir']

" Avoid big/unimportant project areas
set wildignore+=*/node_modules/*,*/build/*,*/components/*,*/_public/*,*/tmp/*,*/vendor/*

" Cache -- get used to pressing F5 on tree changes/additions
let g:ctrlp_use_caching = 1
let g:ctrlp_clear_cache_on_exit = 0

" Somewhat self-explanatory
let g:ctrlp_show_hidden = 1
let g:ctrlp_switch_buffer = 2
let g:ctrlp_max_depth = 6
let g:ctrlp_max_height = 50

" Open *h*orizontally and *j*ump to first win.
let g:ctrlp_open_multiple_files = 'hj'
" Use <C-d> to toggle
"let g:ctrlp_by_filename = 1

要进一步控制在工作树之外查找文件的位置,请咨询g:ctrlp_user_command。有a Windows example使用dir。您可以使用它,但需要使用您想要的额外路径。

您可能还想添加NerdTree,这是对CtrlP的一个很好的补充。它让人想起ST的侧边栏。使用其?获取帮助。它有一个菜单,可以让你快速添加文件和目录,也许就像你想要“添加文件夹到项目”。

要进行搜索和替换,请查看ag.vim。我将其映射到<leader>g(意为“grep”)。

那些提到的是我的一些最爱,但你应该探索Vim插件的世界,以决定哪些其他值得采用。我建议你在新的时候一次尝试一个,而不是一个有时不透明的“发行版”。 Vundle / Pathogen(选择一项)可以让插件管理更轻松。

答案 3 :(得分:-1)

<强>尤里卡... !!!!!

在不知疲倦地寻找好几天(和不眠之夜)之后,我找到了答案(请继续阅读)。

首先是一些愚蠢的

我非常渴望不放弃Vim。但这个问题只是从内部吞噬我,并且在我的工作流程中具有破坏性。我在Windows中有很多项目文件夹,我希望vim搜索。 Ctrl + p由于某种原因从未真正起作用。我有一些放弃Vim的不太好的想法。然后我发现了这个!

我的回答

这与我的预期略有不同。但答案是Everything(由VoidTools提供)。它允许从任何地方进行搜索,并以几分之一秒的速度给出结果。它是迄今为止Windows中最好的文件名搜索工具。它支持Regex。 (虽然它不是文本搜索工具)。它有一个名为

的命令行界面
  

es.exe

使用Vim的FindEverything.vim插件(FindEverything),我不仅可以搜索我的项目文件夹,还可以搜索任何地方。它将结果返回到vim缓冲区。

谢谢你们的帮助。我知道并非所有人都同意这个解决方案。但在Windows上,我发现这是迄今为止最好的解决方案!希望它对其他人有用,为什么在同一条船上!