Najbliższym odpowiednikiem („najbliższym”, a nie „dokładnym”) Ctrl+ ST2 Pjest wtyczka o nazwie, przygotuj się… CtrlP . Istnieją inne podobne wtyczki, takie jak Command-T lub FuzzyFinder .
Używam CtrlP i uwielbiam to, ale z całego serca popieram Twoją decyzję o przejściu na „brak wtyczek”. Nie jest to najłatwiejsza droga, ale na dłuższą metę się opłaci.
Otwieranie plików
Najbardziej podstawowym sposobem otwarcia pliku jest :e /path/to/filename. Na szczęście otrzymujesz uzupełnianie tabulatorów i symbole wieloznaczne: klasyczne *i specjalne **, co oznacza „dowolny podkatalog”.
Łącząc to wszystko, możesz:
:e **/*foo<Tab>
wybrać spośród wszystkich plików zawierających foow swojej nazwie w katalogu roboczym lub:
:e **/*foo/*bar<Tab>
aby wybrać spośród wszystkich plików zawierających barich nazwę w dowolnym podkatalogu zawierającym foojego nazwę, w dowolnym miejscu w katalogu roboczym.
Oczywiście, że pracuje dla :tabe[dit], :sp[lit]a :vs[plit]także.
Te polecenia są jednak ograniczone do jednego pliku. Służy :nextdo otwierania wielu plików:
:next **/*.js
i spójrz na :help arglist.
Skakanie między zderzakami
:b[uffer] jest podstawowym poleceniem przełączania bufora:
: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
Zauważ, że wiele z tych poleceń i ich krewnych akceptuje liczbę.
Na :lspolecenie pokazuje listę załadowanych bufory. Jest to jednak trochę „specjalne”: bufory mają przypisany numer podczas ich tworzenia, więc możesz mieć listę, która wygląda jak 1 2 5po usunięciu buforów. Jest to trochę niezręczne, tak, i to sprawia, że przełączanie się na bufor według jego numeru jest nieco zbyt kłopotliwe. Wolę przełączania przez częściowe nazwy, :b foo<Tab>lub na rowerze, :bn :bp.
W każdym razie, tutaj jest fajne mapowanie, które wyświetla wszystkie załadowane bufory i wypełnia monit, czekając, aż wpiszesz numer bufora i naciśnij <enter>:
nnoremap gb :ls<CR>:b<Space>
Dzięki temu mapowaniu przejście do innego bufora jest tak proste, jak:
gb
(quickly scanning the list)
3<CR>
lub:
gb
(quickly scanning the list)
foo<tab><CR>
Pomysł pochodzi z tego obrazu zaczerpniętego z kolekcji infografik Vima Bairui :

Vim ma również <C-^>(lub <C-6>na niektórych klawiaturach) - odpowiednik trybu normalnego :b#- przeskakiwanie między bieżącym a poprzednim buforem. Użyj go, jeśli często przełączasz się między dwoma buforami.
Przeczytaj wszystko o buforach w :help buffers.
Przejdź do deklaracji
W pliku możesz użyć gdlub gD.
W projekcie funkcja „tagów” Vima jest twoim przyjacielem, ale będziesz potrzebować zewnętrznego indeksatora kodu, takiego jak ctags lub cscope. Najbardziej podstawowe polecenia to :tag fooi <C-]>z kursorem na nazwie metody. Oba narzędzia są dobrze zintegrowane Vima: patrz :help tags, :help ctagsi :help cscope.
Z tego co warto, intensywnie korzystam z nawigacji po tagach do poruszania się w projekcie (głównie używając CtrlP :CtrlPTagi :CtrlPBufTagpoleceń, ale też wbudowanych), a moją ulubioną „ogólną” metodą przełączania buforów jest nazwa.
Wdrażam plik config
Wielu użytkowników Vima poddaje swoją konfigurację kontroli wersji, co sprawia, że instalacja własnej konfiguracji na nowej maszynie jest bardzo szybka i łatwa. Pomyśl o tym.
EDYTOWAĆ
Kilka miesięcy temu musiałem pracować na zdalnym komputerze z przestarzałym Vimem. Mogłem zainstalować odpowiedniego Vima i sklonować swoją ukochaną konfigurację, ale tym razem zdecydowałem się podróżować lekko, aby „wyostrzyć piłę”. Szybko zbudowałem minimalistyczny .vimrci ponownie odwiedziłem kilka na wpół zapomnianych natywnych funkcji. Po tym koncercie zdecydowałem, że CtrlP nie jest tak konieczne i pozbyłem się go: natywne funkcje i niestandardowe mapowania nie są tak atrakcyjne, ale wykonują zadanie bez większych zależności.
Żonglowanie plikami
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:findjest naprawdę świetnym poleceniem, gdy tylko będziesz set pathpoprawnie. Z moimi ustawieniami, ,ffoo<Tab>znajdzie foorekursywnie wszystkie pliki zawierające w bieżącym katalogu. Jest szybki, intuicyjny i lekki. Oczywiście korzystam z tego samego ukończenia i symboli wieloznacznych, co z :editprzyjaciółmi.
Aby proces był jeszcze szybszy, poniższe mapowania pozwalają mi na pominięcie całej części projektu i rekurencyjne wyszukiwanie plików w katalogu bieżącego pliku:
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>
OSTRZEŻENIE! Ta pathopcja jest niezwykle potężna. Powyższa wartość - - .,**działa dla mnie, ale języki, których używam, nie mają standardowej biblioteki. Prawidłowa wartość zależy wyłącznie od Twoich potrzeb.
Żonglowanie buforami
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
Powyższe mapowania zawierają listę dostępnych buforów w „dzikim menu” z pustym znakiem zachęty, co pozwala mi albo poruszać się po menu, <Tab>albo wpisać kilka liter i <Tab>ponownie zawęzić listę. Podobnie jak w przypadku powyższych mapowań plików, proces jest szybki i prawie bezproblemowy.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Te odwzorowania mówią same za siebie.
Żonglerka tagami
nnoremap <leader>j :tjump /
To odwzorowanie wykorzystuje wyszukiwanie regex zamiast wyszukiwania całych słów, więc mogę ,jba<Tab>znaleźć tag foobarbaz().
Tak, dopasowywanie rozmyte uzależnia, ale bez niego możesz być równie produktywny. I za ułamek ceny.
WIĘCEJ EDYTUJ
Kilka dodatkowych porad / wskazówek…
Opcje Wildmenu
„Dzikie menu”, włączone za pomocą set wildmenu, ułatwia nawigację po plikach / buforach . Jego zachowanie zależy od kilku opcji, które warto zbadać:
wildmode mówi Vimowi, jak chcesz, aby zachowywało się "wildmenu":
set wildmode=list:full
wildignore odfiltrowuje wszystkie 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.*
wildignorecaseumożliwia wyszukiwanie fooi znajdowanie Foo:
set wildignorecase
Ślady pilników
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
Niedawno znalazłem ten klejnot u kogoś innego ~/.vimrc. Tworzy znacznik pliku w dokładnym położeniu kursora za każdym razem, gdy opuszczasz bufor, dzięki czemu, gdziekolwiek jesteś, 'Jprzeskakuje do ostatniego edytowanego buforu JavaScript. Niesamowite.