Come posso fare leggere .vimrc da un file esterno?


24

Vorrei modificare il mio .vimrcper leggere il valore di una variabile da un file esterno. Come posso fare questo?

In particolare, un amico e io condividiamo un repository git con i nostri .vimfile, ma ci sono alcune piccole differenze in ciò che vogliamo nelle nostre configurazioni. Quindi la maggior parte del file è comune, ma usiamo le istruzioni if ​​per determinare se caricare sezioni specifiche dell'utente, come questo:

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

Dopo aver verificato il nostro controllo .vimrcfuori controllo comune , ognuno di noi deve modificare l' let whoamiassegnazione in modo che la nostra propria sezione venga caricata. Invece, vorrei mantenere un file separato, che può essere diverso per ognuno di noi e dal quale vim caricherà quel valore variabile.

Forse un altro punto di vista è: Vim leggerà automaticamente tutti i file nella mia .vimdirectory? In tal caso, ciascuno di noi potrebbe inserire un link simbolico chiamato username.vim e collegarlo a un file esterno che sarebbe diverso per ognuno di noi.

Risposte:


35

nel tuo file .vimrc principale:

source otherVimScriptFilePath.vim

quindi inserisci la tua istruzione variabile in quel file:

" otherVimScriptFilePath.vim
let whoami = "user1"

2
Cordiali saluti - Nella mia situazione, è stato utile fare let whoami = ""subito prima della sourceriga, in modo che se non riesce a caricare il file esterno, la variabile esiste e ricevo il messaggio di errore che avevamo impostato in precedenza per la variabile non impostata.
Nathan Long,

2
@GorillaSandwich: lo uso per trovare il mio vimrc sul mio computer Windows poiché Windows non ha collegamenti simbolici. Ho una cartella SVN che contiene questo e tutti gli altri miei file dot. Quindi ho solo un _vimrc che genera quello vero nella cartella svn.
Robert S Ciaccio,

@GorillaSandwich: vedi la mia risposta per la silent! sourceparte
Akira il

6

Utilizzando un tentativo / cattura

Da quando ho posto questa domanda, ho trovato un altro caso d'uso per caricare un file esterno: modifiche specifiche della macchina.

Dal momento che potrei aver bisogno o meno di apportare modifiche su una determinata macchina, sto usando a try/catchper caricare il file esterno; se non esiste un file del genere, lo lascio fallire silenziosamente.

" 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 

5

Per rispondere all'ultima domanda, i file in ~/.vimnon vengono caricati automaticamente, ma tutti i file in lo ~/.vim/pluginsono.


2
e alcuni altri posti sotto ~ / .vim ( after, autoload)
Akira il

4

Puoi fare in modo che il tuo ~ / .vimrc carichi un altro file usando il :sourcecomando. Ad esempio, ognuno potrebbe inserire i tuoi comandi univoci in ~ / .myvimrc e caricare quei comandi con

source ~/.myvimrc

Oppure, come stavi pensando, potresti inserire il tuo nome in quel file in questo modo:

let user = "user1"

e poi inseriscilo nel tuo ~ / .vimrc:

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

Invece di mettere i tuoi nomi in file, tuttavia, potresti usare $ USER come suggerito akira o impostare userusando whoami, in questo modo:

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

La funzione substitute () è necessaria perché l'output di system () di solito ha un '\ n' virato alla fine.


whoaminon funziona su Windows
Akira il

@akira: vero, ma GorillaSandwich sta usando Unix, non Windows. $ USER non funziona con Windows, almeno non con Windows XP.
garyjohn il

sto solo dicendo, su Windows è $ USERNAME. il punto principale è: whoamigenera un nuovo processo, quando apri il tuo editor dovrebbe essere veloce e non (inutile) fare di nuovo lavoro più volte.
Akira,

2

il nome dell'utente che ha effettuato l'accesso è disponibile nella variabile di ambiente $ USER. puoi accedere facilmente a quella variabile:

:echo $USER

quindi, basta usare

execute "silent! source vimrc." . $USER

nel tuo vimrc e inserisci le impostazioni specifiche dell'utente

vimrc.joe

o qualunque sia il tuo nome utente


0

Non sono sicuro di come sia il tuo vimrc, quindi questo potrebbe non essere fattibile, ma se ci sono parti di grandi dimensioni che tu e il tuo amico condividete, potreste voler dividerli in plugin separati. È possibile aggiungere file alla ~/.vim/plugindirectory per caricarli all'avvio. (Sono caricati in ordine alfabetico - usare :scriptnamesper controllare.)

In questo modo puoi avere un vimrc completamente unico, ma tutte le tue configurazioni comuni sono in plugin. Se li rompi logicamente, allora sarà facile condividere anche con gli altri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.