3

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

  1. Ctrl+P转到我想要在我的文件夹列表中的任何文件。
  2. Ctrl+Shift+f在这些文件夹列表中查找(并替换)任何文本。

我使用Add Folders to ProjectSublime Text 3 中的功能添加了许多文件夹。这真的很有帮助。现在,我知道CtrlPVIM 插件可以做类似的事情,但我不知道如何让它搜索我想要的文件夹,而不是当前文件的根目录。

我在我的 vimrc 文件中设置了路径,但没有取得多大成功。

你能帮忙吗?如果是重复的问题,请见谅。

谢谢。

4

4 回答 4

2

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

搜索和替换有点棘手。您想处理所有感兴趣的文件,然后对所有文件重复替换命令。例如,如果你想在这里和下面的所有 C 文件上进行搜索foo和替换,bar

:args **/*.c
:argdo %s/foo/bar/g
于 2015-08-20T02:08:28.367 回答
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。

于 2015-08-20T04:12:25.490 回答
0

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

" 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. 有一个使用dir. 您会使用它,但要使用所需的额外路径。

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

对于搜索和替换,请查看ag.vim。我将它映射到<leader>g(意思是“grep”)。

上面提到的是我最喜欢的一些,但你应该探索 Vim 插件的世界来决定哪些其他插件值得采用。我建议您在新手时一次尝试一个,而不是有时不透明的“分发”。使插件管理更容易的工具是Vundle / Pathogen(选择一个)。

于 2015-08-20T02:02:14.380 回答
-1

尤里卡……!!!!!!

在不知疲倦地搜索了几天(以及不眠之夜)之后,我找到了答案(请继续阅读)。

首先是一些愚蠢的想法

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

我的答案

这与我的预期有些不同。但答案是一切(由 VoidTools 提供)。它允许从任何地方搜索并在几分之一秒内给出结果。它是迄今为止 Windows 中最好的文件名搜索工具。它支持正则表达式。(虽然它不是文本搜索工具)。它有一个命令行界面,称为

es.exe

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

谢谢大家的帮助。我知道不是每个人都可能同意这个解决方案。但在 Windows 上,我发现这是迄今为止最好的解决方案!希望对其他人有用,为什么在同一条船上!!!

于 2015-09-01T14:59:42.783 回答