L'equivalente più vicino ("più vicino", non "esatto") a Ctrl+ di ST2 Pè un plugin chiamato, preparati… CtrlP . Esistono altri plugin simili come Command-T o FuzzyFinder .
Uso CtrlP e lo adoro, ma sostengo con tutto il cuore la tua decisione di andare "senza plugin". Non è il modo più semplice per procedere, ma a lungo termine ripagherà.
Apertura di file
Il modo più semplice per aprire un file è :e /path/to/filename. Per fortuna, ottieni il completamento con tabulazione e caratteri jolly: il classico *e uno speciale **, che sta per "qualsiasi sottodirectory".
Combinando tutto ciò, puoi fare:
:e **/*foo<Tab>
scegliere tra tutti i file che contengono foonel loro nome nella directory di lavoro oppure:
:e **/*foo/*bar<Tab>
per scegliere tra tutti i file che contengono barnel loro nome in qualsiasi sottodirectory contenente foonel suo nome, ovunque sotto la directory di lavoro.
Naturalmente, che lavora per :tabe[dit], :sp[lit]e :vs[plit], anche.
Tuttavia, questi comandi sono limitati a un file. Utilizzare :nextper aprire più file:
:next **/*.js
e dai un'occhiata :help arglist.
Saltando tra i respingenti
:b[uffer] è il comando di commutazione del buffer di base:
: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
Nota che molti di questi comandi e dei loro parenti accettano un conteggio.
Il :lscomando mostra un elenco di buffer caricati. È un po '"speciale", però: ai buffer viene assegnato un numero quando vengono creati in modo da poter avere un elenco che assomiglia 1 2 5se si eliminano i buffer. Questo è un po 'imbarazzante, sì, e questo rende il passaggio a un buffer in base al suo numero un po' troppo problematico. Preferisci il passaggio per nome parziale :b foo<Tab>o in bicicletta :bn :bp.
Ad ogni modo, ecco una bella mappatura che elenca tutti i buffer caricati e popola il prompt per te, in attesa che tu digiti il numero di un buffer e premi <enter>:
nnoremap gb :ls<CR>:b<Space>
Con questa mappatura, passare a un altro buffer è semplice come:
gb
(quickly scanning the list)
3<CR>
o:
gb
(quickly scanning the list)
foo<tab><CR>
L'idea nasce da questa immagine tratta dalla raccolta di infografiche di Vim di Bairui :

Vim ha anche <C-^>(o <C-6>su alcune tastiere), l'equivalente in modalità normale di, :b#per passare dal buffer corrente a quello precedente. Usalo se alterni spesso tra due buffer.
Leggi tutto sui buffer in :help buffers.
Vai alla dichiarazione
All'interno di un file, puoi usare gdo gD.
All'interno di un progetto, la funzione "tag" di Vim è tua amica, ma avrai bisogno di un indicizzatore di codice esterno come ctags o cscope. I comandi di base sono :tag fooe <C-]>con il cursore sul nome di un metodo. Entrambi gli strumenti sono ben integrati in Vim: vedono :help tags, :help ctagse :help cscope.
Per quel che vale, utilizzo ampiamente la navigazione per tag per muovermi all'interno di un progetto (usando principalmente i comandi :CtrlPTage i :CtrlPBufTagcomandi di CtrlP , ma anche quelli incorporati ) e il mio metodo di cambio buffer "generico" preferito è per nome.
Distribuzione della tua configurazione
Molti utenti di Vim mettono la propria configurazione sotto il controllo della versione, il che rende molto semplice e veloce l'installazione della propria configurazione su una nuova macchina. Pensaci.
MODIFICARE
Alcuni mesi fa, ho dovuto lavorare su una macchina remota con un Vim obsoleto. Avrei potuto installare un Vim adeguato e clonare la mia amata configurazione ma ho deciso di viaggiare leggero, questa volta, per "affilare la sega". Ho rapidamente creato un minimalista .vimrce ho rivisitato un paio di funzionalità native semidimenticate. Dopo quel concerto, ho deciso che CtrlP non era così necessario e me ne sono sbarazzato: le funzionalità native e le mappature personalizzate non sono così sexy ma fanno il lavoro senza molte dipendenze.
Giocoleria con i file
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:findè davvero un ottimo comando non appena lo fai set pathcorrettamente. Con le mie impostazioni, ,ffoo<Tab>troverò tutti i file che contengono foosotto la directory corrente, in modo ricorsivo. È veloce, intuitivo e leggero. Ovviamente traggo vantaggio dallo stesso completamento e dagli stessi caratteri jolly di :edite amici.
Per rendere il processo ancora più veloce, le seguenti mappature mi consentono di saltare intere parti del progetto e di trovare i file in modo ricorsivo nella directory del file corrente:
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>
AVVERTIMENTO! L' pathopzione è estremamente potente. Il valore sopra .,**- - funziona per me ma le lingue che uso non hanno una libreria standard. Il valore corretto dipende interamente dalle tue esigenze.
Giocoleria con i respingenti
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
Le mappature sopra elencano i buffer disponibili nel "wildmenu" con un prompt vuoto, permettendomi di navigare nel menu <Tab>o di digitare alcune lettere e di <Tab>nuovo di restringere l'elenco. Come con le mappature dei file sopra, il processo è veloce e quasi senza attriti.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Quelle mappature parlano da sole.
Giocoleria con i tag
nnoremap <leader>j :tjump /
Questa mappatura utilizza la ricerca regex invece della ricerca di parole intere, quindi posso ,jba<Tab>trovare tag foobarbaz().
Sì, la corrispondenza sfocata crea dipendenza, ma senza di essa puoi essere altrettanto produttivo. E per una frazione del costo.
PIÙ MODIFICA
Un paio di suggerimenti / trucchi aggiuntivi ...
Opzioni del menu selvaggio
Il "wildmenu", abilitato con set wildmenu, semplifica la navigazione tra file / buffer. Il suo comportamento è governato da una serie di opzioni che vale la pena indagare:
wildmode dice a Vim come vuoi che si comporti il "wildmenu":
set wildmode=list:full
wildignore filtra tutto il cruft:
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.*
wildignorecaseti permette di cercare fooe trovare Foo:
set wildignorecase
Contrassegni di file
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
Di recente ho trovato questo gioiello in qualcun altro ~/.vimrc. Crea un contrassegno di file nella posizione esatta del cursore ogni volta che lasci un buffer in modo che, ovunque tu sia, 'Jsalti all'ultimo buffer JavaScript che hai modificato. Eccezionale.