Comment faire lire .vimrc à partir d'un fichier externe?

24

Je voudrais modifier mon .vimrcpour lire la valeur d'une variable d'un fichier externe. Comment puis-je faire ceci?

Plus précisément, un ami et moi partageons un dépôt git avec nos .vimfichiers, mais il y a quelques petites différences dans ce que nous voulons dans nos configurations. Donc, la plupart du fichier est commun, mais nous utilisons des instructions if pour déterminer s'il faut charger des sections spécifiques à l'utilisateur, comme ceci:

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

Après avoir vérifié notre contrôle .vimrchors source commun , nous devons chacun changer l' let whoamiaffectation afin que notre propre section soit chargée. Au lieu de cela, j'aimerais garder un fichier séparé, qui peut être différent pour chacun de nous, et à partir duquel vim chargera cette valeur de variable.

Peut-être qu'un autre angle à ce sujet est le suivant: Vim lira-t-il automatiquement tous les fichiers de mon .vimrépertoire? Si c'est le cas, nous pourrions chacun y placer un lien symbolique appelé username.vim, et le lier à un fichier externe qui serait différent pour chacun de nous.

Nathan Long
la source

Réponses:

35

dans votre fichier .vimrc principal:

source otherVimScriptFilePath.vim

puis mettez simplement votre déclaration de variable dans ce fichier:

" otherVimScriptFilePath.vim
let whoami = "user1"
Robert S Ciaccio
la source
2
FYI - Dans ma situation, il était utile de faire let whoami = ""juste avant la sourceligne, de sorte que si elle ne parvient pas à charger le fichier externe, la variable existe et j'obtiens le message d'erreur que nous avions configuré précédemment pour la variable non définie.
Nathan Long
2
@GorillaSandwich: Je l'utilise pour me procurer mon vimrc sur ma machine Windows car Windows n'a pas de liens symboliques. J'ai un dossier SVN qui contient ceci et tous mes autres fichiers dot. J'ai donc juste un _vimrc qui source le vrai dans le dossier svn.
Robert S Ciaccio
@GorillaSandwich: voir ma réponse pour la silent! sourcepartie
akira
6

Utiliser un try / catch

Depuis que j'ai posé cette question, j'ai trouvé un autre cas d'utilisation pour charger un fichier externe: des ajustements spécifiques à la machine.

Étant donné que je peux ou non avoir besoin de faire des ajustements sur une machine donnée, j'utilise a try/catchpour charger le fichier externe; s'il n'y a pas un tel fichier, je le laisse échouer en silence.

" 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
la source
5

Pour répondre à la dernière question, les fichiers dans ~/.vimne sont pas chargés automatiquement, mais tous les fichiers dans le ~/.vim/pluginsont.

Heptite
la source
2
et quelques autres endroits en dessous ~ / .vim ( after, autoload)
akira
4

Vous pouvez demander à votre ~ / .vimrc de charger un autre fichier à l'aide de la :sourcecommande. Par exemple, vous pouvez placer chacune vos commandes uniques dans ~ / .myvimrc et charger ces commandes avec

source ~/.myvimrc

Ou, comme vous le pensiez, vous pouvez chacun mettre votre nom dans ce fichier comme ceci:

let user = "user1"

puis mettez ceci dans votre ~ / .vimrc:

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

Plutôt que de mettre vos noms dans des fichiers, vous pouvez utiliser $ USER comme l'a suggéré Akira, ou définir en userutilisant whoami, comme ceci:

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

La fonction substitute () est nécessaire car la sortie de system () a généralement un '\ n' cloué à la fin.

garyjohn
la source
whoamine fonctionne pas sur les fenêtres
akira
@akira: C'est vrai, mais GorillaSandwich utilise Unix, pas Windows. $ USER ne fonctionne pas non plus avec Windows, du moins pas avec Windows XP.
garyjohn
juste en disant, sur windows son $ USERNAME. Le point principal est: whoamiengendre un nouveau processus, lorsque vous ouvrez votre éditeur, il devrait être rapide et ne pas (inutile) recommencer plusieurs fois.
akira
2

le nom de l'utilisateur connecté est disponible dans la variable d'environnement $ USER. vous pouvez accéder facilement à cette variable:

:echo $USER

alors, utilisez simplement

execute "silent! source vimrc." . $USER

dans votre vimrc et mettez vos paramètres spécifiques à l'utilisateur dans

vimrc.joe

ou quel que soit votre nom de connexion

akira
la source
0

Je ne sais pas à quoi ressemble votre vimrc, donc cela peut ne pas être possible, mais s'il y a de grandes parties que vous et votre ami partagez, vous voudrez peut-être les diviser en plugins séparés. Vous pouvez ajouter des fichiers au ~/.vim/pluginrépertoire pour les charger au démarrage. (Ils sont chargés par ordre alphabétique - utilisez :scriptnamespour vérifier.)

De cette façon, vous pouvez chacun avoir un vimrc qui est complètement unique, mais toutes vos configurations courantes sont dans des plugins. Si vous les décomposez logiquement, cela facilite également le partage avec les autres.

idbrii
la source