Wie bringe ich Vim dazu, die .vimrc-Konfiguration automatisch aus dem aktuellen Verzeichnis zu laden?

Wie bringe ich Vim dazu, die .vimrc-Konfiguration automatisch aus dem aktuellen Verzeichnis zu laden?

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 :cdin ein Verzeichnis gehe, wird die .vimrc-Datei nicht geladen. Wenn ich schreibe, wird :so .\.vimrcsie 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, .vimrcoder_exrc am Anfang. Dies wird nicht jedes Mal durchgeführt, wenn Sie :cdin 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 .vimrcDatei lädt, sobald ich cdin 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.

verwandte Informationen