Jak zarządzasz dużymi projektami (setkami plików) używając tylko VIM?
Osobiście zaczynam mieć problemy w każdym większym niż mały projekt.
- czy jest jakiś sposób, aby szybko „przejść do pliku”, najlepiej z uzupełnieniem nazwy?
- to samo z „przejdź do definicji klasy”, gdy znajduje się w innym pliku
Znam wszystkie podstawy VIM, więc nie mam problemu z używaniem go do pisania skryptów lub szybkiej edycji kodu źródłowego. Ale robi mi się naprawdę bałagan, gdy muszę nawigować między plikami.
NERDTree
Odpowiedzi:
VIM ma doskonałą obsługę tagów . Po utworzeniu pliku tagów dla swojego projektu możesz przejść do definicji lub deklaracji metody, klasy itp., W tym przeskakiwać między plikami, a wszystko to w ramach tej samej sesji edycji.
Próbować
Aby wygenerować plik tagów dla C / C ++, przejdź do zachęty powłoki (zakładam, że twój system to * nix / Cygwin) i wpisz
lub
źródło
:help cscope
aby uzyskać informacje. We wstępie znajduje się fajna lista funkcji (pod nagłówkiem „Ma odpowiadać na takie pytania”).Lubię proste rozwiązania, obecnie moim ulubionym sposobem nawigacji jest:
Dodać do
~/.vimrc.local
Następnie wpisz to w edytorze, aby znaleźć plik w dowolnym miejscu w bieżącym katalogu roboczym (pwd)
Możesz użyć uzupełniania tabulatorami w nazwach plików, aby znaleźć wiele opcji, dzięki czemu ta konwersja TextMate jest bardzo szczęśliwa.
źródło
vim .
przed wykonaniem polecenia: /Używam kombinacji NERDTree (pasek boczny katalogu), FuzzyFinder Textmate (przejdź do pliku, jak CMD + T TextMate) i sesji (: sesje h), aby pomóc mi w radzeniu sobie z dużymi projektami.
Sugerowałbym użycie wtyczki pomocniczej dla niektórych sesji. Wspomniałbym, czego używam, ale jeszcze nie jestem z tego zadowolony. Tylko Google „sesje vimowe”.
Jedną rzeczą, na którą należy zwrócić uwagę przy uruchamianiu FuzzyFinder Textmate, jest to, że zależy to od starej wersji wtyczki FuzzyFinder, w szczególności v2.16. Cokolwiek wyższego, a otrzymasz błędy. Ale zdecydowanie warto. Chociaż nie ma uzupełniania nazw, jego wyszukiwanie jest inteligentne, więc jeśli
fro/time/actionsphp
go wyszukam, wyświetli plikapps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php)
(nawiasy wskazują, do czego pasuje). Ułatwia to wybieranie plików, które są unikalne tylko na podstawie nazwy folderu.źródło
Jak również bezcenne znaczniki CT i różne związane z nimi polecenia. Nie mogłem też żyć bez wtyczki projektu , która pozwala na umieszczenie interesujących Cię plików związanych z projektem w osobnym panelu. Nie pamiętam, jaka część mojej konfiguracji jest dostosowana, ale jeśli chcę otworzyć plik źródłowy o nazwie Debug.c, trafiłem:
Często wtedy robię:
Dzięki tej stosunkowo krótkiej sekwencji mogę otworzyć dowolny plik i jego nagłówek w podziale pionowym. Ponieważ okno wtyczki projektu jest tylko plikiem tekstowym, zakończenie jest osiągane przy użyciu możliwości wyszukiwania Vima.
źródło
Począwszy od Vim 7.3,
:find
polecenie uzupełnia nazwy plików za pomocą tabulacji.Więc jeśli można ustawić
'path'
opcję, aby zawierał całego projektu (prawdopodobnie za pomocą**
wieloznacznych, aby umożliwić rekurencyjnie przeszukaj podkatalogi), a następnie można użyć:find
,:sfind
,:tabfind
, itd. Polecenia z zakończeniem dostać się do każdego pliku w projekcie. Pozwala to również na przeskakiwanie do plików bezpośrednio zgf
przyjaciółmi, jeśli nazwa pliku znajduje się w tekście, na przykład w dyrektywie include.Dzięki tej metodzie do nawigacji do określonych plików nie są potrzebne żadne zewnętrzne narzędzia ani wtyczki. Chociaż, co prawda, może nie być tak szybki lub łatwy w użyciu i nie rozwiązuje potrzeby przeskakiwania do definicji. Do definicji używam ctagów, jak sugerują inne odpowiedzi.
źródło
Jeśli używasz ctagów zgodnie z zaleceniami innych plakatów, spójrz na wtyczkę taglist .
Poświęć trochę czasu na przeczytanie dokumentacji i nauczenie się skrótów klawiszowych. Oto kilka na początek (z okna TList):
źródło
Bujne ctagi.
Użyj Ctrl-], aby przeskoczyć do znacznika pod kursorem.
źródło
Używam FindFile . Jeśli otworzysz Vima w katalogu głównym projektu i uruchomisz
:FC .
wtyczkę, będzie ona buforowała wszystkie nazwy plików pod twoim cwd. Następnie możesz:FF
otworzyć menu uzupełniania i wpisać nazwę żądanego pliku (a raczej kilka pierwszych liter).źródło
FC .
w katalogu głównym, a następnie:FF
wprowadź, zacznij wpisywać żądaną nazwę pliku i gotowe. Ciągle próbuję wymyślić, jak uruchomić w nowych kartach…:FC .
aby buforować pliki w tym katalogu.:FT
lub:FindTabNew
gist.github.com/1104884Otwieranie
vim
z katalogu głównego pliku źródłowego i rozszerzaniepath
opcji, aby uwzględnić w nim wszystkie podkatalogi.Na przykład
set path+=/usr/include/c++/**
dla nagłówków C ++ iset path+=**
katalogu źródłowego.To otwiera mnóstwo możliwości.
1) Otwieranie pliku według nazwy lub jej części
Możesz
:find
niezawodnie korzystać z automatycznego uzupełniania i rozszerzania symboli wieloznacznych . Wpisujesz nazwę, a ona zlokalizuje nazwę. To działa agnostyk językowy, jestem pewien, że ci się spodoba.2) Nawigacja do plików znajdujących się pod cusror:
jeśli chcesz przejść do ścieżki pliku, takiej jak
#include "project/path/classA.h
.Ctrl- 6- powrót do ostatniej pozycji kursora po
gf
lubgF
3) Wyszukiwanie API i nawigacja do lokalizacji API
[i
lub[I
może być używany do wyszukiwania podpisu funkcji pod kątem słowa pod kursorem bez opuszczania obszaru roboczego.[<Tab>
faktycznie przejść do deklaracji. Użyj Ctrl-, 6aby wrócić do ostatniej lokacji.Bez rozszerzania
path
możesz rozpocząć nawigację po plikach za pomocą:Ex
poleceń oraz nawigować i otwierać plik. Wolę jednakNerdTree
od tego.źródło
Chociaż mam nadzieję, że ktoś wskaże lepsze rozwiązanie, abym mógł się czegoś nauczyć, NERDTree był dla mnie dobry, jeśli chodzi o dotarcie do określonych plików z uzupełnianiem nazw, o ile mam rozwinięte drzewo. Polecenie, gdy muszę dostać się do pliku, to coś takiego:
, d / foo.pyo (gdzie foo.py to nazwa pliku)
, d, aby otworzyć drzewo, / aby wejść w tryb wyszukiwania, nazwę (lub częściową nazwę, regex, lub cokolwiek) pliku, a następnie o, aby otworzyć.
Oczywiście może być konieczne kilkakrotne naciśnięcie klawisza „n”, jeśli nie wpisałeś wystarczającej ilości nazwy pliku lub są duplikaty.
Przyznaję, że przy użyciu NERDTree w ten sposób czuję się trochę jak włamanie, chociaż dotarło to już do mojej pamięci mięśniowej, że nawet o tym nie myślę.
Oczywiście używam też ctagów, ale są one przydatne tylko wtedy, gdy masz funkcję w pobliżu kursora i potrzebujesz dostać się do jej definicji w innym pliku lub czymś podobnym. Wiele razy mówię „OK, muszę teraz popracować nad funkcją x” i muszę przejść do innego pliku bez żadnych odniesień w pobliżu, w których ctagi naprawdę by pomogły.
źródło
Używam dwóch moich wtyczek:
<c-w><m-down>
domyślnie podłączony selektor znaczników . Możesz zamiast tego sprawdzić znaną wtyczkę taglist.Oba wymagają mojej biblioteki viml lh-vim-lib.
źródło
Wypróbuj SourceCodeObedinece . Ten został opracowany do obsługi projektu plików źródłowych C ++ 1Gb.
Używam go w połączeniu z 0scan .
Te dwie wtyczki są opakowaniami wokół najpopularniejszych narzędzi przeglądania Vima: ctags i cscope .
źródło