Wie verwalten Sie große Projekte (Hunderte von Dateien) nur mit VIM?
Ich persönlich habe Probleme bei größeren als kleinen Projekten.
- Gibt es eine Möglichkeit, schnell zur Datei zu gehen, vorzugsweise mit Namensvervollständigung?
- Gleiches gilt für 'Zur Klassendefinition gehen', wenn es sich in einer anderen Datei befindet
Ich kenne alle VIM-Grundlagen, daher habe ich keine Probleme damit, Skripte zu schreiben oder Quellcode schnell zu bearbeiten. Aber es wird wirklich chaotisch für mich, wenn ich zwischen Dateien navigieren muss.
NERDTree
Antworten:
VIM bietet hervorragende Unterstützung für Tags . Nachdem Sie eine Tag-Datei für Ihr Projekt erstellt haben, können Sie innerhalb derselben Bearbeitungssitzung zu einer Definition oder Deklaration einer Methode, Klasse usw. springen, einschließlich des Überspringens von Dateien.
Versuchen
Um eine Tag-Datei für C / C ++ zu generieren, gehen Sie zu Ihrer Shell-Eingabeaufforderung (ich gehe davon aus, dass Ihr System * nix / Cygwin ist) und geben Sie ein
oder
quelle
:help cscope
Informationen. In der Einleitung gibt es eine nette Funktionsliste (unter "Es wurde entwickelt, um Fragen wie zu beantworten").Ich mag einfache Lösungen. Meine derzeitige Lieblingsnavigationsmethode ist:
Hinzufügen
~/.vimrc.local
Geben Sie dies dann in den Editor ein, um die Datei an einer beliebigen Stelle im aktuellen Arbeitsverzeichnis (pwd) zu finden.
Sie können die Tab-Vervollständigung für die Dateinamen verwenden, um auch mehrere Auswahlmöglichkeiten zu finden, was diese TextMate-Konvertierung sehr glücklich macht.
quelle
vim .
bevor der Befehl ausgeführt wird: /Ich verwende eine Kombination aus NERDTree (Verzeichnisseitenleiste), FuzzyFinder Textmate (zur Datei gehen wie TextMates CMD + T) und Sitzungen (: h-Sitzungen), um mich bei großen Projekten zu unterstützen.
Ich würde vorschlagen, einige Sitzungen Helfer Plugin zu verwenden. Ich würde erwähnen, was ich benutze, aber ich bin noch nicht zufrieden damit. Nur Google "Vim Sessions".
Wenn Sie FuzzyFinder Textmate zum Laufen bringen, sollten Sie beachten, dass es von einer alten Version des FuzzyFinder-Plugins abhängt, insbesondere von Version 2.16. Alles höher und Sie werden Fehler bekommen. Aber die Mühe lohnt sich auf jeden Fall. Obwohl der Name nicht vollständig ist, ist seine Suche intelligent. Wenn ich danach suche
fro/time/actionsphp
, wird die Dateiapps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php)
aufgerufen (Klammern geben an, was übereinstimmt). Es macht es sehr einfach, Dateien auszuwählen, die nur anhand ihres Ordnernamens eindeutig sind.quelle
Sowie die unschätzbaren ctags und die verschiedenen zugehörigen Befehle. Ich könnte auch nicht ohne das Projekt-Plugin leben , mit dem Sie die mit einem Projekt verknüpften Dateien in einem separaten Bereich speichern können. Ich kann mich nicht erinnern, wie viel von meinem Setup angepasst wurde, aber wenn ich eine Quelldatei namens Debug.c öffnen möchte, drücke ich:
Ich mache dann oft:
Mit dieser relativ kurzen Sequenz kann ich jede Datei und ihren Header in vertikaler Aufteilung öffnen. Da das Projekt-Plugin-Fenster nur eine Textdatei ist, wird die Fertigstellung mithilfe der Suchfunktion von Vim erreicht.
quelle
Ab Vim 7.3 verfügt der
:find
Befehl über eine Tab-Vervollständigung der Dateinamen.Also , wenn Sie Ihre Set -
'path'
Option des gesamtes Projekt enthalten (wahrscheinlich die Verwendung von**
Wildcard - rekursiv Suche Verzeichnisse zu ermöglichen), dann können Sie verwenden , um die:find
,:sfind
,:tabfind
usw. Befehle mit Abschluss auf jede Datei in Ihrem Projekt zu erhalten. Auf diese Weise können Sie auch direkt mitgf
und mit Freunden zu Dateien springen, wenn sich der Dateiname in Ihrem Text befindet, z. B. in einer Include-Direktive.Bei dieser Methode werden keine externen Tools oder Plugins benötigt, um zu bestimmten Dateien zu navigieren. Obwohl es zugegebenermaßen nicht so schnell oder einfach zu bedienen ist und nicht auf die Notwendigkeit eingeht, zu Definitionen zu springen. Für Definitionen verwende ich ctags, wie andere Antworten vorschlagen.
quelle
Wenn Sie ctags verwenden, wie von anderen Postern empfohlen, lesen Sie unbedingt das Taglist- Plugin.
Nehmen Sie sich Zeit, um die Dokumente zu lesen und die Tastenkombinationen zu lernen. Hier sind einige, um Ihnen den Einstieg zu erleichtern (über das TList-Fenster):
quelle
Üppige ctags.
Verwenden Sie Strg-], um zum Tag unter dem Cursor zu springen.
quelle
Ich benutze FindFile . Wenn Sie vim im Stammverzeichnis Ihres Projekts öffnen und
:FC .
das Plugin ausführen, werden alle Dateinamen unter Ihrem cwd zwischengespeichert. Anschließend können Sie:FF
ein Abschlussmenü öffnen und den Namen der gewünschten Datei (oder besser gesagt die ersten Buchstaben) eingeben.quelle
FC .
in Ihr Stammverzeichnis ein und:FF
geben Sie den gewünschten Dateinamen ein. Fertig. Ich versuche immer noch herauszufinden, wie man in neuen Tabs startet.:FC .
Dateien in diesem Verzeichnis zwischenspeichern müssen.:FT
oder:FindTabNew
gist.github.com/1104884Öffnen
vim
aus dem Stammverzeichnis Ihrer Quelldatei und Erweitern derpath
Option, um alle Unterverzeichnisse darin einzuschließen.Zum Beispiel
set path+=/usr/include/c++/**
für C ++ - Header undset path+=**
für Ihr Quellverzeichnis.Dies eröffnet dann eine Vielzahl von folgenden Möglichkeiten.
1) Öffnen der Datei nach Namen oder Teilen davon
Sie können die automatische Vervollständigung und Platzhaltererweiterung
:find
zuverlässig verwenden. Wenn Sie den Namen eingeben, wird der Name gesucht. Dies funktioniert sprachunabhängig. Ich bin sicher, es wird Ihnen gefallen.2) Navigieren zu Dateien unter cusror:
Wenn Sie einen Dateipfad wie möchten
#include "project/path/classA.h
.Ctrl- 6- um nach
gf
oder zur letzten Cursorposition zurückzukehrengF
3) API-Suche und Navigation zum API-Speicherort
[i
oder[I
kann verwendet werden, um Ihre Funktionssignatur für Wörter unter dem Cursor nachzuschlagen, ohne Ihren Arbeitsbereich zu verlassen.[<Tab>
tatsächlich zur Erklärung gehen. Verwenden Sie Ctrl- 6, um zum letzten Ort zurückzukehren.Ohne zu erweitern
path
, können Sie mit dem Navigieren durch Dateien per:Ex
Befehl beginnen und Ihre Datei navigieren und öffnen. Ich bevorzugeNerdTree
dies jedoch.quelle
Obwohl ich irgendwie hoffe, dass jemand eine bessere Lösung aufzeigt, damit ich etwas lernen kann, war NERDTree gut für mich, um zu bestimmten Dateien mit Namensvervollständigung zu gelangen, solange ich den Baum erweitert habe. Der Befehl, wenn ich zu einer Datei gelangen muss, lautet wie folgt:
, d / foo.pyo (wobei foo.py ein Dateiname ist)
, d, um den Baum zu öffnen, / um in den Suchmodus zu wechseln, den Namen (oder den Teilnamen oder den regulären Ausdruck oder was auch immer) der Datei und dann o, um ihn zu öffnen.
Natürlich müssen Sie möglicherweise einige Male 'n' drücken, wenn Sie nicht genug Dateinamen eingegeben haben oder Duplikate vorhanden sind.
Ich gebe zu, es fühlt sich wie ein Hack an, NERDTree so zu verwenden, obwohl es inzwischen so weit in mein Muskelgedächtnis eingedrungen ist, dass ich nicht einmal darüber nachdenke.
Natürlich verwende ich auch ctags, aber diese sind nur nützlich, wenn Sie eine Funktion in der Nähe des Cursors haben und zu ihrer Definition in einer anderen Datei oder so etwas gelangen müssen. Oft sage ich "OK, ich muss jetzt an Feature x arbeiten" und muss zu einer anderen Datei navigieren, ohne dass Referenzen in der Nähe vorhanden sind, bei denen ctags wirklich helfen würden.
quelle
Ich benutze zwei meiner Plugins:
<c-w><m-down>
standardmäßig angeschlossene Tag-Auswahl . Vielleicht möchten Sie stattdessen das bekannte Taglist-Plugin überprüfen.Beide benötigen meine viml-Bibliothek lh-vim-lib.
quelle
Versuchen Sie SourceCodeObedinece . Dieses Projekt habe ich für das C ++ 1Gb-Quelldateiprojekt entwickelt.
Ich benutze es zusammen mit 0scan .
Diese beiden Plugins sind Wrapper für die beliebtesten Vim-Browsing-Tools: ctags und cscope .
quelle