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 foo
w swojej nazwie w katalogu roboczym lub:
:e **/*foo/*bar<Tab>
aby wybrać spośród wszystkich plików zawierających bar
ich nazwę w dowolnym podkatalogu zawierającym foo
jego 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 :next
do 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 :ls
polecenie 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 5
po 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ć gd
lub 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 foo
i <C-]>
z kursorem na nazwie metody. Oba narzędzia są dobrze zintegrowane Vima: patrz :help tags
, :help ctags
i :help cscope
.
Z tego co warto, intensywnie korzystam z nawigacji po tagach do poruszania się w projekcie (głównie używając CtrlP :CtrlPTag
i :CtrlPBufTag
poleceń, 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 .vimrc
i 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 *
:find
jest naprawdę świetnym poleceniem, gdy tylko będziesz set path
poprawnie. Z moimi ustawieniami, ,ffoo<Tab>
znajdzie foo
rekursywnie 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 :edit
przyjaciół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 path
opcja 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.*
wildignorecase
umożliwia wyszukiwanie foo
i 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ś, 'J
przeskakuje do ostatniego edytowanego buforu JavaScript. Niesamowite.