VIM Search — FuzzyFinder для поиска определенного файла

Я новичок в VIM, использующий его как IDE. Я пытаюсь понять, как легко открыть файлы в моем «проекте».

У меня есть эти конфигурации в моем файле .vimrc:

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 <[email protected]>'

" 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

Таким образом, каждый новый буфер открывается в новой вкладке.

Я знаю, если я делаю:

:e libra*/Core/Sess*/Ob*

например, он откроет файл library/Core/Session/Object.php Но проблема в том, что если я сделаю одну ошибку, вместо того, чтобы открыть файл, он откроет новый буфер с именем libra*/Core/Sess*/Ob* (предположим, что файл не существует). Кроме того, я не люблю писать каждый раз, когда все / так будет лучше просто сделать

:e libr*Cor*Sess*Obj*.php

Но это откроет новый буфер с этим именем (libr*Cor*Sess*Obj*.php) вместо открытия файла …

Я также узнал, что я могу сделать:

:fin libra(press tab here)

И это будет автозаполнение … но проблема здесь это покажет (для этого примера) :find libexslt/ и я точно знаю, что папка не в папке я. На самом деле, вот скриншот папок, которые у меня есть:

Папки на рабочей папке

Итак, как вы можете видеть, у меня там нет libexslt … поэтому я не знаю, откуда он получает эту информацию …

Есть ли способ легко открыть файл? В этом примере я знаю, что файл Session / Object.php, поэтому я мог бы сделать что-то вроде:

:fin *Sessi*Obj*php

? Кроме того, я знаю, что файл имеет внутри объявления:

<?php
class Core_Session_Object

Или другой пример,

<?php
namespace Core\Session;
class Object

Могу ли я сделать что-то вроде:

:vimgrep /class*Core_Session_Object/ *.php
:vimgrep /name*Core*Sess*Obj/ *.php

?

0

Решение

Вы можете использовать табуляцию для :edit а также :find но механизм по умолчанию не очень удобен для пользователя. «Wildmenu» — очень приятная особенность, которая делает весь процесс много Полегче. Включить его с помощью:

:set wildmenu

и взгляните на следующие разделы документации:

:help wildmenu
:help wildmode
:help wildignore
:help wildignorecase

** подстановочный знак позволяет вам проходить через подкаталоги, так что вы можете сделать:

:e **/obj*ph<Tab>

Поведение :find зависит от стоимости path опция, чье значение по умолчанию не очень полезно, если вы не пишете C.

Задайте для этого гораздо более полезного общего значения, которое будет использоваться в подкаталогах:

:set path=.,**

С настройками выше, вы сможете открыть ваш файл с:

:e **/obj*ph<Tab>

или же:

:find obj*ph<Tab>

Обратите внимание, что открытие файла для доступа к методу или другому символу не очень эффективно, используете ли вы умные команды / отображения или нет. Тег-прыжки гораздо эффективнее метод. Для этого вам понадобится символ «база данных», который обычно создается перед поиском.

Смотрите эти разделы документации:

:help tags
:help ctags
:help cscope

А также :h include-search для облегченного варианта.

С помощью :vimgrep или же :grep может также удовлетворить ваши потребности, но я бы посоветовал вам взглянуть на быстрее извед а также аг.


Вот очищенная версия вашего vimrc с соответствующими добавленными опциями:

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 <[email protected]>'

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

Другие решения

Всегда полезно изучать чистые методы Vim для навигации по файлам, что делает ответ romainl действительно хорошим.

Есть также пара плагинов, которые обеспечивают функцию нечеткого поиска.

  1. Ctrl-p плагин
  2. Плагин Command-t

Тем не менее, у меня давно установлен Ctrl-p, но я редко им пользуюсь, потому что он мне просто не нужен.

0

По вопросам рекламы [email protected]