Es ist ein Programmier Projekt arbeite ich an , wo alle anderen eine tabsize von 4 verwendet, so dass ich es am einfachsten finden set tabstop=4
in meinem ~/.vimrc
. Ich würde es jedoch vorziehen, nicht jede Datei, die ich bearbeite, zu beeinflussen - nur die für dieses Projekt - sagen wir, jede Datei in einem bestimmten Verzeichnis (und seinen Unterverzeichnissen).
Gibt es eine Möglichkeit, Variablen basierend auf dem Verzeichnispräfix der Datei einfach bedingt festzulegen?
Antworten:
Zentrale Konfiguration
Wenn es in Ordnung ist, die lokalen Ausnahmen zentral zu konfigurieren, können Sie solche autocmds in Folgendes einfügen
~/.vimrc
:Wenn Sie andererseits die spezifische Konfiguration im Projekt speichern möchten (und diese nicht über Modelines in alle Dateien einbetten möchten ), haben Sie die folgenden zwei Optionen:
Lokale Konfiguration mit integrierter Funktionalität
Wenn Sie Vim immer über das Projektstammverzeichnis starten, wird das eingebaute
ermöglicht das Lesen einer
.vimrc
Datei aus dem aktuellen Verzeichnis. Sie können die:set ts=4 sw=4
Befehle dort platzieren.Lokale Konfiguration über Plugin
Andernfalls benötigen Sie die Hilfe eines Plugins. es gibt mehrere auf vim.org; Ich kann das localrc-Plugin empfehlen , das sogar die Konfiguration lokaler Dateitypen ermöglicht.
Beachten Sie, dass das Lesen der Konfiguration aus dem Dateisystem Auswirkungen auf die Sicherheit hat. Sie möchten vielleicht
:set secure
.quelle
autocmd
nicht funktionierenden Methode stößt, vergewissern Sie sich, dass Sie keine Symlinks in Ihrem Pfad haben. Ich musste den vollständigen Pfad ohne Symlinks angeben, bevor dies für mich funktionieren würde (unter OS X 10.9).Sie können vim so konfigurieren, dass weitere Befehle mit dem
source
Befehl (so) gelesen werden . Fügen Sie dies zu Ihrem hinzu~/.vimrc
- es durchsucht das aktuelle Verzeichnis und wenn die .vimrc_proj-Datei nicht gefunden wird, sucht es im übergeordneten Verzeichnis nach .vimrc_proj.Fügen Sie dann benutzerdefinierte Befehle in
.vimrc_proj
Konfigurationsdateien hinzu, die Ihren Projekten entsprechen.quelle
Sie können ein Plugin für Vim verwenden, um das Problem allgemeiner zu lösen, indem Sie versuchen, den Einzug zu erkennen.
Das Plugin der Wahl ist für mich DetectIndent . Es dauerte einige Zeit, bis ich alle Forks des Plugins getestet hatte, um eines zu finden, das meinen Anforderungen entspricht. Das Original war sehr nah dran, aber nicht ganz so, dass ich meine eigene Gabel gemacht habe .
Für das Debuggen ist es sehr hilfreich,
:set verbose=1
das Plugin erneut mit auszuführen:DetectIndent
quelle
Eine mögliche Lösung, die noch nicht erwähnt wurde, besteht darin, eine Ebene höher zu gehen und projektspezifische Shell-Skripte zu implementieren, um Ihre vim-Umgebung zu starten.
Dadurch können vim-spezifische Einstellungen mithilfe der
-S
Befehlszeilenoption übergeben werden. Dies bietet den Vorteil, dass auch andere Aspekte der Umgebung konfiguriert werden können, z. B. die Terminal- oder Cscope-Einstellungen.Angenommen, ich habe ein C ++ - Projekt mit dem Namen
foo
, für das ich die vim-Einstellungen der Datei laden möchte~/.vim/projects/foo.vim
. Ich möchte auch einen cscope-Index einrichten und ein Terminalfenster starten, wenn der Befehl über ein Schnellstart-Tool oder eine Desktop-Verknüpfung aufgerufen wird. Um meine Umgebung zu öffnen, habe ich das folgende Skript mit dem Namenvim-foo
:quelle