Pregunta ¿Cómo hacer que la configuración de VIM dependa de la computadora en .vimrc?


Comparto mi archivo de configuración VIM entre varias computadoras. Sin embargo, quiero que algunas configuraciones sean específicas para ciertas computadoras.

Por ejemplo, los tamaños de fuente en la computadora portátil de alta resolución deberían ser diferentes al escritorio de baja resolución. Y más importante aún, quiero que gVIM en Windows se comporte más Windows y MacVim en OSX para comportarse más maccy y gVIM en Linux para comportarse como siempre. (Eso podría ser un sentimiento extraño, pero estoy muy acostumbrado a cambiar los modos mentales cuando cambio los sistemas operativos)

¿Hay alguna manera de hacer algunas configuraciones en el .vimrc ¿depende de la máquina o del sistema operativo?


41


origen




Respuestas:


Detección de sistema operativo en .vimrc:

if has('win32')
    ......
elseif has('mac')
    ......
elseif has('unix')
    ......
endif

39



También es útil: has('gui_running') si necesita diferenciar entre el modo tty y el modo GUI. - Chris Johnsen
La función has () prueba la presencia de las características de Vim. No hay una función 'linux'. El argumento correcto es 'unix'. Además, el argumento apropiado para OS-X es 'macunix'. También hay una función 'mac', pero no sé si has('mac') es cierto para todos los Mac o solo para Mac pre-OS-X. Ver :help feature-list para la lista completa. - garyjohn
Sí, has('unix'). Mi error. - Casual Coder
Una respuesta muy tardía, pero sí, tiene ('mac') activadores en OSX para mí. - Diablo-D3
He probado vim 1) que viene con OS X, y 2) que instalé a través del Prefijo Gentoo (algo similar a Homebrew), y 3) que proviene de MacVim. Solo el que proviene de MacVim devolverá correctamente el verdadero has("mac"). Creo que usaron algunos parches que realmente hacen que funcione la prueba de características. Si confías en has("mac")prueba, realiza alguna prueba para asegurarte de que sea compatible con tu vim. - yegle


Para probar una máquina en particular, puede probar el resultado de la hostname mando. Por ejemplo,

let hostname = substitute(system('hostname'), '\n', '', '')
if hostname == "tigger"
   ...
elseif hostname == "pooh"
   ...
endif

También podría probar el valor de las variables de entorno disponibles:

if $HOSTNAME == "tigger"
   ...
elseif $HOSTNAME == "pooh"
   ...
endif

los $DISPLAY variable también puede ser útil.


25



hostname () hará esto, por ejemplo: if hostname () == 'tigger' ..., sin tener que realizar la llamada al sistema. - tvon
El resultado para system('hostname') estaba machine.mycompany.com\n, así que tuve que cambiar el comando sustituto por substitute(system('hostname'), '\.\_.*$', '', ''). - JPaget


Tengo este fragmento en mi vimrc:

let s:host_vimrc = $HOME . '/.' . hostname() . '.vimrc'                                                                                                                               
if filereadable(s:host_vimrc)                                                                                                                                                        
  execute 'source ' . s:host_vimrc                                                                                                                                                   
endif

Esto simplemente se ejecuta source $HOME/.$HOSTNAME.vimrc si existiera. he usado hostname() y concatenación, también podrías usar el más sucinto expand('$HOME/.$HOSTNAME.vimrc') si sabes eso $HOSTNAME siempre está configurado.


8





La respuesta anterior sobre la detección del sistema operativo no detecta OS X en MacVim para mí (y tampoco lo hace el uso de has("macunix") como la documentación sugiere que debería).

Esto es lo que uso para distinguir entre Windows y OS X:

if has("win32")
  "Windows options here
else
  if has("unix")
    let s:uname = system("uname")
    if s:uname == "Darwin\n"
      "Mac options here
    endif
  endif
endif

Tenga en cuenta que has("win32") funcionó para mí, incluso en 64 bit Vim en Windows de 64 bits.

También podría usar pruebas similares de uname dentro de if has("unix") bloquear para distinguir otros sabores de Unix. Solo corre uname o uname -a desde la línea de comandos para ver lo que necesita comparar s:uname with. Ver también :h matchstr() si necesita comparar solo una parte de la salida de uname.


7





Con muchas máquinas, enumerando todos los nombres de host en .vimrc puede volverse tedioso, podría ser más fácil distinguir entre diferentes sabores de Unix:

" set font when running on Solaris
if (match(system('uname -s'), 'SunOS') >= 0)  
   set guifont=*   " fixes "E665: Cannot start GUI, no valid font found"
endif

2



Lamentablemente, esto se rompe en las máquinas de Windows. - oligofren


Podrías poner las cosas específicas del SO en un .gvimrc personalizado para cada máquina, y usar un .vimrc común en todas ellas. Ambos archivos se leen cuando se inicia GVim, solo se lee .vimrc cuando se inicia el Vim que no es GUi.


1





En cuanto a la separación entre Linux y Windows, simplemente puede poner diferentes configuraciones en .vimrc y _vimrcen consecuencia


1