¿Cómo puedo hacer que .vimrc se lea desde un archivo externo?

24

Me gustaría modificar mi .vimrcpara leer el valor de una variable de un archivo externo. ¿Cómo puedo hacer esto?

Específicamente, un amigo y yo compartimos un repositorio git con nuestros .vimarchivos, pero hay algunas pequeñas diferencias en lo que queremos en nuestras configuraciones. Por lo tanto, la mayor parte del archivo es común, pero usamos sentencias if para determinar si se cargan secciones específicas del usuario, como esta:

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

Después de verificar nuestro control común .vimrcfuera de la fuente, cada uno tiene que cambiar la let whoamiasignación para que se cargue nuestra propia sección. En cambio, me gustaría mantener un archivo separado, que puede ser diferente para cada uno de nosotros, y desde el cual vim cargará ese valor variable.

Quizás otro ángulo sobre esto es: ¿leerá vim automáticamente todos los archivos en mi .vimdirectorio? Si es así, podríamos poner un enlace simbólico llamado username.vim, y vincularlo a un archivo externo que sería diferente para cada uno de nosotros.

Nathan Long
fuente

Respuestas:

35

en su archivo .vimrc principal:

source otherVimScriptFilePath.vim

entonces solo ponga su declaración variable en ese archivo:

" otherVimScriptFilePath.vim
let whoami = "user1"
Robert S Ciaccio
fuente
2
FYI: en mi situación, fue útil hacerlo let whoami = ""justo antes de la sourcelínea, de modo que si no puede cargar el archivo externo, la variable existe y recibo el mensaje de error que habíamos configurado previamente para la variable que no se está configurando.
Nathan Long
2
@GorillaSandwich: uso esto para obtener mi vimrc en mi máquina Windows, ya que Windows no tiene enlaces simbólicos. Tengo una carpeta SVN que contiene este y todos mis otros archivos de puntos. Así que solo tengo un _vimrc que obtiene el real en la carpeta svn.
Robert S Ciaccio
@GorillaSandwich: vea mi respuesta para la silent! sourceparte
akira el
6

Usando un try / catch

Desde que hice esta pregunta, se me ocurrió otro caso de uso para cargar un archivo externo: ajustes específicos de la máquina.

Como puedo o no necesitar hacer ajustes en una máquina determinada, estoy usando a try/catchpara cargar el archivo externo; Si no hay tal archivo, dejo que falle en silencio.

" 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
fuente
5

Para responder a la última pregunta, los archivos ~/.vimno se cargan automáticamente, pero todos los archivos sí ~/.vim/plugin.

Heptita
fuente
2
y algunos otros lugares debajo de ~ / .vim ( after, autoload)
akira
4

Puede hacer que su ~ / .vimrc cargue otro archivo usando el :sourcecomando. Por ejemplo, cada uno podría poner sus comandos únicos en ~ / .myvimrc y cargar esos comandos con

source ~/.myvimrc

O, como estaba pensando, cada uno podría poner su nombre en ese archivo así:

let user = "user1"

y luego pon esto en tu ~ / .vimrc:

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

Sin embargo, en lugar de poner sus nombres en archivos, puede usar $ USER como sugirió akira, o configurar userusando whoami, de esta manera:

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

La función sustituto () es necesaria porque la salida del sistema () generalmente tiene un '\ n' agregado al final.

garyjohn
fuente
whoamino funciona en windows
akira
@akira: Cierto, pero GorillaSandwich está utilizando Unix, no Windows. $ USER tampoco funciona con Windows, al menos no con Windows XP.
garyjohn
solo digo, en windows es $ USERNAME. El punto principal es: whoamigenera un nuevo proceso, cuando abre su editor, debe ser rápido y no (inútil) hacer el trabajo varias veces nuevamente.
akira
2

El nombre del usuario conectado está disponible en la variable de entorno $ USER. puedes acceder a esa variable fácilmente:

:echo $USER

entonces, solo usa

execute "silent! source vimrc." . $USER

en su vimrc y ponga su configuración específica de usuario en

vimrc.joe

o cualquiera que sea su nombre de usuario

akira
fuente
0

No estoy seguro de cómo se ve su vimrc, por lo que esto puede no ser factible, pero si hay partes grandes que usted y su amigo comparten, es posible que desee dividirlos en complementos separados. Puede agregar archivos al ~/.vim/plugindirectorio para cargarlos en el inicio. (Se cargan en orden alfabético; úselos :scriptnamespara verificar).

De esa manera, cada uno puede tener un vimrc que es completamente único, pero todas sus configuraciones comunes están en complementos. Si los separa lógicamente, también facilita compartir con otros.

idbrii
fuente