Я новичок в 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
?
Вы можете использовать табуляцию для :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'
Всегда полезно изучать чистые методы Vim для навигации по файлам, что делает ответ romainl действительно хорошим.
Есть также пара плагинов, которые обеспечивают функцию нечеткого поиска.
Тем не менее, у меня давно установлен Ctrl-p, но я редко им пользуюсь, потому что он мне просто не нужен.