Ich habe einige Projekte, die zum Ausführen, Erstellen und Testen unterschiedliche Befehle benötigen. Daher habe ich in jedes der Projektverzeichnisse eine .vimrc-Datei eingefügt, die Zuordnungen zu einigen F-Tasten definiert. In den Vim-Hilfedateien heißt es:
‚exrc‘ ‚ex‘ Boolesch (Standard: aus) allgemein {nicht in Vi} Ermöglicht das Lesen von .vimrc, .exrc und .gvimrc im aktuellen Verzeichnis.
Ich habe diese Option also aktiviert, aber wenn ich :cd
in ein Verzeichnis gehe, wird die .vimrc-Datei nicht geladen. Wenn ich schreibe, wird :so .\.vimrc
sie problemlos geladen. Warum wird sie nicht automatisch geladen?
Ich verwende gVim 7.3 x64 für Windows.
Antwort1
Wenn 'exrc' gesetzt ist, wird das aktuelle Verzeichnis nach einer Datei mit dem Namen durchsucht _vimrc
, .vimrc
oder_exrc
am Anfang. Dies wird nicht jedes Mal durchgeführt, wenn Sie :cd
in ein neues Verzeichnis wechseln. Siehe
:help .vimrc
Antwort2
Meiner Meinung nach ist dies die beste Variante:
if getcwd() =~ '^\(/my/safe/dir1/\|/my/safe/dir2/\)'
set secure exrc
endif
Quelle aus:http://vim.wikia.com/wiki/Open_vimrc_file aber feste Syntax
Antwort3
In vim Version 8.1^ gibt es ein Autocmd-Ereignis namensVerzeichnis geändertdie Sie zur projektspezifischen Bewertung verwenden können .vimrc
. Hier erfahren Sie mehr Details dazu, wann dieses Ereignis ausgelöst wird:
DirChanged = Working directory has changed in response to the |:cd| or |:lcd| commands.
Arbeitsbeispiel
Ich bin kein Experte für Vim-Skripte, habe aber die folgende Funktion erstellt, die meine projektspezifische .vimrc
Datei lädt, sobald ich cd
in den Projektordner komme. Fügen Sie diese Funktion in Ihre Hauptdatei ein ~/.vimrc
.
if !exists("*LoadProjectVimrc")
function! LoadProjectVimrc()
let vimrcFile = findfile(".vimrc", ".;")
if !empty(vimrcFile)
execute ":so" l:vimrcFile
echom l:vimrcFile
endif
endfunction
endif
autocmd DirChanged * :call LoadProjectVimrc()
Antwort4
Nur zur Info: Letztendlich habe ich für jedes meiner Projekte eine Verknüpfung erstellt und eine projektspezifische Konfigurationsdatei als Sitzungsdatei geladen, indem ich verwendet habe -S session.vim
.