Найближчий еквівалент ("найближчий", не "точний") до ST2's Ctrl+ P- це плагін, який називається, готуйся ... CtrlP . Є й інші подібні плагіни, такі як Command-T або FuzzyFinder .
Я використовую CtrlP і мені це подобається, але я від щирого серця підтримую ваше рішення перейти на "плагін". Це не найпростіший шлях, але він окупиться з часом.
Відкриття файлів
Найбільш основний спосіб відкрити файл - це :e /path/to/filename
. На щастя, ви отримуєте доповнення табуляції та підстановку: класичну *
та спеціальну **
, яка означає "будь-який підкаталог".
Поєднавши все це, ви можете зробити:
:e **/*foo<Tab>
вибрати з усіх файлів, що містять foo
їх ім’я під робочим каталогом, або:
:e **/*foo/*bar<Tab>
вибирати з усіх файлів, що містять bar
їх ім’я, під будь-яким підкаталогом, що містить foo
його ім’я, в будь-якому місці робочого каталогу.
Звичайно, це працює для :tabe[dit]
, :sp[lit]
і :vs[plit]
, теж.
Ці команди обмежені одним файлом. Використовуйте :next
для відкриття декількох файлів:
:next **/*.js
і погляньте :help arglist
.
Стрибки між буферами
:b[uffer]
є основною командою перемикання буфера:
:b4 " switch to buffer number 4
:bn " switch to next buffer in the buffer list
:bp " switch to previous buffer in the buffer list
:bf " switch to first buffer in the buffer list
:bl " switch to last buffer in the buffer list
:b foo<Tab> " switch by buffer name with tab-completion
:b# " switch to the alternate file
Зауважте, що багато з цих команд та їхні родичі приймають рахунок.
У :ls
команді покаже вам список завантажених буферів. Однак це трохи "особливо": буферам присвоюється число, коли вони створюються, щоб у вас був список, схожий на 1 2 5
видалення буферів. Це трохи незручно, так, і це робить перемикання на буфер за його номером занадто клопітким. Воліють перемикання шляхом часткового імені, :b foo<Tab>
або на велосипеді, :bn :bp
.
У будь-якому випадку, тут прохолодне відображення, яке перелічує всі завантажені буфери та заповнює підказку для вас, чекаючи, коли ви введете номер буфера і натисніть <enter>
:
nnoremap gb :ls<CR>:b<Space>
За допомогою цього відображення перехід на інший буфер простий як:
gb
(quickly scanning the list)
3<CR>
або:
gb
(quickly scanning the list)
foo<tab><CR>
Ідея походить від цього зображення, взятого з колекції Bairui з інфографіки Vim :
Vim також має <C-^>
(або <C-6>
на деяких клавіатурах) - звичайний еквівалент режиму :b#
- для переходу між поточним буфером і попереднім. Використовуйте його, якщо ви часто чергуєте два буфери.
Прочитайте все про буфери в :help buffers
.
Перейдіть до декларації
У файлі можна використовувати gd
або gD
.
У рамках проекту функцією "тегів" Vim є ваш друг, але вам знадобиться зовнішній індексатор коду, наприклад, ctags або cscope. Найбільш основні команди - це :tag foo
і <C-]>
з курсором на ім'я методу. Обидва інструменти добре інтегровані в Vim: см :help tags
, :help ctags
і :help cscope
.
Для чого це варто, я широко використовую навігацію по тегах для переміщення в рамках проекту (здебільшого використовуючи CtrlP :CtrlPTag
та :CtrlPBufTag
команди, але також вбудовані), і мій улюблений "загальний" спосіб перемикання буфера - за назвою.
Розгортання конфігурації
Багато користувачів Vim поставити їх конфігурації під управлінням версіями , що робить його дуже швидко і легко встановити свій власний конфіг на новій машині. Подумай над цим.
EDIT
Кілька місяців тому мені довелося працювати на віддаленій машині зі застарілим Vim. Я міг би встановити належну Vim і клонував власну улюблену конфігурацію, але на цей раз я вирішив подорожувати світлом, щоб "загострити пилу". Я швидко побудував мінімалізм .vimrc
і переглянув пару напівзабутих рідних рис. Після цього концерту я вирішив, що CtrlP не такий необхідний, і позбувся його: рідні функції та власні відображення не такі сексуальні, але вони виконують роботу без особливих залежностей.
Жонглювання файлами
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:find
це справді чудова команда, як тільки ви set path
правильно. З моїми налаштуваннями, ,ffoo<Tab>
всі файли, що містяться foo
в поточному каталозі, знайдуть рекурсивно. Це швидко, інтуїтивно та легко. Звичайно, я отримую користь від того самого завершення та макетів, що :edit
і у друзів.
Щоб зробити процес ще швидшим, наступні відображення дозволяють мені пропускати цілі частини проекту та знаходити файли рекурсивно під каталогом поточного файлу:
nnoremap <leader>F :find <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>S :sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>V :vert sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>T :tabfind <C-R>=expand('%:h').'/*'<CR>
УВАГА! path
Варіант надзвичайно потужний. .,**
Наведене вище значення - працює для мене, але мови, якими я користуюся, не мають стандартної бібліотеки. Правильне значення повністю залежить від ваших потреб.
Жонглювання буферами
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
Відображення відображає список доступних буферів у «дикому меню» з порожнім підказкою, що дозволяє мені переходити по меню <Tab>
або вводити кілька літер і <Tab>
знову звужувати список. Як і у випадку з відображенням файлів, наведеним вище, процес швидкий і майже не має тертя.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Ці відображення говорять самі за себе.
Жонглювання тегами
nnoremap <leader>j :tjump /
Це картографування використовує пошук по регулярному вираженню замість пошуку цілим словом, щоб я міг ,jba<Tab>
знайти тег foobarbaz()
.
Так, нечітка відповідність викликає звикання, але ви можете бути настільки ж продуктивними без цього. І за частку вартості.
БІЛЬШЕ редагування
Кілька додаткових порад / рекомендацій ...
Варіанти Wildmenu
"Wildmenu", включений за допомогою set wildmenu
, полегшує навігацію по файлам / буферам . Її поведінка регулюється низкою варіантів, які варто вивчити:
wildmode
повідомляє Vim, як ти хочеш, щоб "wildmenu" поводився:
set wildmode=list:full
wildignore
фільтрує всю суть:
set wildignore=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=tags
set wildignore+=*.tar.*
wildignorecase
дозволяє шукати foo
та знаходити Foo
:
set wildignorecase
Файлові позначки
augroup VIMRC
autocmd!
autocmd BufLeave *.css normal! mC
autocmd BufLeave *.html normal! mH
autocmd BufLeave *.js normal! mJ
autocmd BufLeave *.php normal! mP
augroup END
Нещодавно я знайшов цей дорогоцінний камінь у чужому ~/.vimrc
. Він створює позначку файлу в точному положенні курсора кожного разу, коли ви залишаєте буфер, щоб, де б ви не 'J
переходили , перейшов до останнього буфера JavaScript, який ви редагували. Дивовижно.