Jak mogę odczytać .vimrc z zewnętrznego pliku?

24

Chciałbym zmodyfikować mój, .vimrcaby odczytał wartość zmiennej z zewnętrznego pliku. W jaki sposób mogę to zrobić?

W szczególności mój przyjaciel i ja dzielimy się repozytorium git z naszymi .vimplikami, ale istnieje kilka małych różnic w tym, czego chcemy w naszych konfiguracjach. Więc większość pliku jest wspólna, ale używamy instrukcji if, aby ustalić, czy załadować sekcje specyficzne dla użytkownika, takie jak to:

let whoami = "user2"
if whoami == "user1"
...

Po sprawdzeniu naszego wspólnego .vimrcbraku kontroli źródła, każdy z nas musi zmienić let whoamiprzypisanie, aby załadować własną sekcję. Zamiast tego chciałbym zachować osobny plik, który może być inny dla każdego z nas i z którego vim załaduje tę wartość zmiennej.

Być może pod innym kątem jest to: czy vim automatycznie odczyta wszystkie pliki w moim .vimkatalogu? Jeśli tak, moglibyśmy umieścić tam dowiązanie symboliczne o nazwie username.vim i połączyć je z plikiem zewnętrznym, który byłby inny dla każdego z nas.

Nathan Long
źródło

Odpowiedzi:

35

w głównym pliku .vimrc:

source otherVimScriptFilePath.vim

następnie po prostu wstaw zmienną do tego pliku:

" otherVimScriptFilePath.vim
let whoami = "user1"
Robert S. Ciaccio
źródło
2
FYI - W mojej sytuacji pomocne było zrobienie tego let whoami = ""tuż przed sourcelinią, aby jeśli nie załadował zewnętrznego pliku, zmienna istnieje i pojawia się komunikat o błędzie, który ustawiliśmy wcześniej dla zmiennej, która nie jest ustawiana.
Nathan Long
2
@GorillaSandwich: Używam tego do źródła mojego vimrc na moim komputerze z systemem Windows, ponieważ Windows nie ma dowiązań symbolicznych. Mam folder SVN, który zawiera ten i wszystkie inne moje pliki kropek. Więc mam po prostu _vimrc, który pobiera prawdziwy plik w folderze svn.
Robert S Ciaccio,
@GorillaSandwich: zobacz moją odpowiedź na tę silent! sourceczęść
akira
6

Używanie try / catch

Od czasu zadania tego pytania wymyśliłem inny przypadek użycia do ładowania zewnętrznego pliku: poprawki specyficzne dla maszyny.

Ponieważ mogę lub nie muszę wprowadzać poprawek na danym komputerze, używam try/catchdo załadowania zewnętrznego pliku; jeśli nie ma takiego pliku, pozwalam mu po cichu zawieść.

" If there are any machine-specific tweaks for Vim, load them from the following file.
try 
  source ~/.vimrc_machine_specific
catch
  " No such file? No problem; just ignore it.
endtry 
Nathan Long
źródło
5

Aby odpowiedzieć na ostatnie pytanie, pliki w ~/.vimnie są automatycznie ładowane, ale wszystkie pliki ~/.vim/pluginsą.

Heptyt
źródło
2
i kilka innych miejsc pod ~ / .vim ( after, autoload)
akira
4

Możesz sprawić, aby ~ / .vimrc załadował inny plik za pomocą :sourcepolecenia. Na przykład, możesz umieścić swoje unikalne polecenia w ~ / .myvimrc i załadować je

source ~/.myvimrc

Lub, tak jak myślałeś, możesz umieścić swoje imię w tym pliku w następujący sposób:

let user = "user1"

a następnie umieść to w swoim ~ / .vimrc:

source ~/.myvimrc
if user == "user1"
    " do this
elseif user == "user2"
    " do that
else
    echo "Invalid user"
endif

Zamiast wstawiać swoje imiona w plikach, możesz użyć $ USER zgodnie z sugestią akiry lub ustawić userza pomocą whoami:

let user = substitute(system('whoami'), '\n', '', '')

Funkcja substitute () jest potrzebna, ponieważ na wyjściu system () zwykle znajduje się końcówka „\ n”.

garyjohn
źródło
whoaminie działa w
systemie
@akira: To prawda, ale GorillaSandwich używa Uniksa, a nie Windows. $ USER również nie działa z Windows, przynajmniej Windows XP.
garyjohn
tylko mówiąc, w systemie Windows jego $ USERNAME. mainpoint brzmi: whoamispawnuje nowy proces, kiedy otworzysz swój edytor, powinien on być szybki i nie (bezużyteczny) wykonywać pracę kilka razy.
akira,
2

nazwa zalogowanego użytkownika jest dostępna w zmiennej środowiskowej $ USER. możesz łatwo uzyskać dostęp do tej zmiennej:

:echo $USER

więc po prostu użyj

execute "silent! source vimrc." . $USER

w vimrc i wprowadź ustawienia specyficzne dla użytkownika

vimrc.joe

lub jakąkolwiek nazwę użytkownika

akira
źródło
0

Nie jestem pewien, jak wygląda twój vimrc, więc może nie być to wykonalne, ale jeśli są duże części, które ty i twój przyjaciel udostępniacie, możesz podzielić je na osobne wtyczki. Możesz dodać pliki do ~/.vim/pluginkatalogu, aby były ładowane podczas uruchamiania. (Są ładowane w kolejności alfabetycznej - użyj, :scriptnamesaby sprawdzić).

W ten sposób każdy może mieć vimrc, który jest całkowicie unikalny, ale wszystkie wspólne konfiguracje znajdują się we wtyczkach. Jeśli podzielisz je logicznie, ułatwi to dzielenie się nimi także z innymi.

idbrii
źródło