首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VIM FuzzyFinder用于搜索特定文件

VIM FuzzyFinder用于搜索特定文件
EN

Stack Overflow用户
提问于 2014-09-27 03:10:34
回答 2查看 144关注 0票数 0

我是VIM公司的新手,用它作为IDE。我试图弄清楚如何在我的“项目”中以一种简单的方式打开文件。

在我的.vimrc文件中有这样的配置:

代码语言:javascript
复制
colorscheme Tomorrow-Night
" nocompatible has to be the first of all ( use the real vimpower )
set nocompatible

" backup rules
set backup " enable backup files (.txt~)
set undofile " enable persistent undo

silent execute '!mkdir -p $HOME/.vim/tmp/backup'
set backupdir=$HOME/.vim/tmp/backup " where to store backup
silent execute '!mkdir -p $HOME/.vim/tmp/swap'
set directory=$HOME/.vim/tmp/swap " where to store swap
silent execute '!mkdir -p $HOME/.vim/tmp/views'
set viewdir=$HOME/.vim/tmp/views " where to store view
silent execute '!mkdir -p $HOME/.vim/tmp/undo'
set undodir=$HOME/.vim/tmp/undo " where to store undo 

" syntax
syntax on " enable syntax highlighting
" filetype
filetype on " enable filetype detection
filetype plugin on " enable filetype plugins
filetype indent on " enable filetype indentation

" tabstop settings
set tabstop=4 " a tab found in a file will be represented with 4 columns
set softtabstop=4 " when in insert mode <tab> is pressed move 4 columns
set shiftwidth=4 " indentation is 4 columns

" show linenumbers
set number

" Documentation configuration
let g:pdv_cfg_Author = 'Abraham Cruz <abrahamsustaita@gmail.com>'

" Autocompletition
" Complete options (disable preview scratch window)
set completeopt = menu,menuone,longest
" Limit popup menu height
set pumheight = 15

" SuperTab option for context aware completion
let g:SuperTabDefaultCompletionType = "context"
let g:SuperTabNoCompleteAfter = ['^', ',', '\s']        
let g:SuperTabMappingForward = '<c-space>'
let g:SuperTabMappingBackward = '<s-c-space>'

" Disable auto popup, use <Tab> to autocomplete
" let g:clang_complete_auto = 0
" Show clang errors in the quickfix window
let g:clang_complete_copen = 1

" TagBar Lint
let g:tagbar_phpctags_memory_limit = '512M'

" Upload on save if the project is configured to do so
autocmd BufWritePost * :call SyncUploadFile()

" Open each buffer in its own tab
:au BufAdd,BufNewFile * nested tab sball

因此,每个新缓冲区都在一个新选项卡中打开。

我知道如果我知道:

代码语言:javascript
复制
:e libra*/Core/Sess*/Ob*

例如,它将打开文件library/Core/Session/Object.php,但问题是,如果我犯了一个错误,它将打开一个名为libra*/Core/Sess*/Ob*的新缓冲区,而不是打开该文件(假设该文件不存在)。而且,我不喜欢每次都写/,所以最好这样做:

代码语言:javascript
复制
:e libr*Cor*Sess*Obj*.php

但是它将打开一个名为(libr*Cor*Sess*Obj*.php)的新缓冲区,而不是打开文件.

我也知道我能做到:

代码语言:javascript
复制
:fin libra(press tab here) 

它会自动完成..。但这里的问题是,它将显示(在本例中) :find libexslt/,并且我肯定知道文件夹不在我所在的文件夹中。实际上,这里有一个文件夹的截图:

所以正如你所看到的,我在那里没有脂肪.所以我不知道这些信息是从哪来的.

有什么容易打开文件的方法吗?在本例中,我知道文件是Session/Object.php,所以我可以这样做:

代码语言:javascript
复制
:fin *Sessi*Obj*php

?此外,我知道该文件包含在声明中:

代码语言:javascript
复制
<?php
class Core_Session_Object

或者,另一个例子,

代码语言:javascript
复制
<?php
namespace Core\Session;
class Object 

我可以做这样的事:

代码语言:javascript
复制
:vimgrep /class*Core_Session_Object/ *.php
:vimgrep /name*Core*Sess*Obj/ *.php
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-27 09:56:09

您可以为:edit:find使用选项卡完成,但是默认机制并不是非常适合用户使用。“通配符”是一个非常好的特性,它使整个过程更加容易。使其具有以下功能:

代码语言:javascript
复制
:set wildmenu

并查看文档的以下部分:

代码语言:javascript
复制
:help wildmenu
:help wildmode
:help wildignore
:help wildignorecase

**通配符允许您通过子目录递归,以便您可以:

代码语言:javascript
复制
:e **/obj*ph<Tab>

:find的行为取决于path选项的值,如果不编写C,该选项的默认值并不十分有用。

将其设置为这个更有用的泛型值,以便通过子目录递归:

代码语言:javascript
复制
:set path=.,**

使用上面的设置,您应该能够使用以下内容打开您的文件:

代码语言:javascript
复制
:e **/obj*ph<Tab>

或者:

代码语言:javascript
复制
:find obj*ph<Tab>

请注意,无论是否使用巧妙的命令/映射,打开文件以访问方法或其他符号都不是很有效。跳标签是一种更有效的方法。不过,你需要一个符号“数据库”,通常是在搜索之前装上箱子。

请参阅这些文件的以下部分:

代码语言:javascript
复制
:help tags
:help ctags
:help cscope

以及轻量级变体的:h include-search

使用:vimgrep:grep也可以满足您的需要,但我建议您看看更快的确认ag

下面是您的vimrc的清理版本,并添加了相关选项:

代码语言:javascript
复制
filetype plugin indent on
syntax on

colorscheme Tomorrow-Night

set wildmenu

set path=./**

set backup
set undofile

silent execute '!mkdir -p $HOME/.vim/tmp/backup'
set backupdir=$HOME/.vim/tmp/backup " where to store backup
silent execute '!mkdir -p $HOME/.vim/tmp/swap'
set directory=$HOME/.vim/tmp/swap " where to store swap
silent execute '!mkdir -p $HOME/.vim/tmp/views'
set viewdir=$HOME/.vim/tmp/views " where to store view
silent execute '!mkdir -p $HOME/.vim/tmp/undo'
set undodir=$HOME/.vim/tmp/undo " where to store undo

set tabstop=4
set softtabstop=4
set shiftwidth=4

set number

set completeopt = menu,menuone,longest
set pumheight = 15

augroup VIMRC
    autocmd!
    autocmd BufWritePost * :call SyncUploadFile()
    autocmd BufAdd,BufNewFile * nested tab sball
augroup END

let g:pdv_cfg_Author = 'Abraham Cruz <abrahamsustaita@gmail.com>'

let g:SuperTabDefaultCompletionType = "context"
let g:SuperTabNoCompleteAfter = ['^', ',', '\s']
let g:SuperTabMappingForward = '<c-space>'
let g:SuperTabMappingBackward = '<s-c-space>'

let g:clang_complete_copen = 1

let g:tagbar_phpctags_memory_limit = '512M'
票数 2
EN

Stack Overflow用户

发布于 2014-09-29 14:18:39

学习用于导航文件的纯Vim方法总是很好的,这使得romainl的答案非常好。

还有几个插件提供了模糊查找功能.

  1. Ctrl-p插件
  2. 命令t插件

尽管如此,我安装Ctrl已经很长时间了,但是我很少使用它,因为我只是不需要它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26070909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档