¿Puedo recuperar el sistema operativo actual (Windows, Linux, OS X, ...) usando Vimscript puro (sin Python o Perl)?
Quiero habilitar diferentes configuraciones en mi .vimrc (sincronizado) para los diferentes tipos de sistemas operativos que estoy usando.
Respuestas:
La mejor manera es usarlo
has()
, con esta función puede verificar las características de Vim; Características específicas del sistema operativo de:help feature-list
:Y algunos sistemas más antiguos (semi-obsoletos):
Ejemplo:
Una forma alternativa con más flexibilidad es llamar al externo
uname
, esto también le permite obtener el número de versión y tal:Tenga en cuenta que
uname
no está presente en la mayoría de los sistemas Windows.En general, es mejor usar la detección de funciones , en lugar de la detección del sistema operativo . Por ejemplo, mediante el uso de una de las funciones en
has()
o comprobando si existe alguna ruta. La publicación 200_success ' ofrece una buena visión general de eso, así que no repetiré el mismo contenido aquí.fuente
:h feature-list
has()
suena como una buena idea hasta que lo pruebe en Mac OS X: por defecto/usr/bin/vim
,has('unix')
es verdadero pero amboshas('macunix')
yhas('mac')
son falsos , mientras que, en la descarga normal de MacVim, los tres son verdaderos si usa la GUI o la TUI.Entonces, la mejor solución es una combinación de
has('winXX')
Windows yuname
en sistemas similares a Unix. Tenga en cuenta que la salida deuname
termina con una nueva línea, por lo que debe limpiarse antes de su uso.Aquí está el código que he estado usando durante un tiempo, actualizado para
win64
:Después de eso, puede usar la
g:os
variable en cualquier parte de suvimrc
:fuente
has('unix')
es exacto. Sinhas('macunix')
embargo, es extraño que sea falso. Esto casi suena como un error?has('macunix')
parece depender de loMACOS_X_UNIX
que se establece siuname
estáDarwin
en elconfigure
guión ...has ("win32")
parece funcionar para mí, incluso en Vim de 64 bits.has('unix')
También es cierto en Windows Git Bash, por lo que no es muy útil para distinguir unix real de emulado.Las variables de entorno serían útiles.
Para detectar
tmux
, puede verificarif !empty($TMUX)
oif $TERM == 'screen'
.También puede deducir el sistema operativo a partir de variables de entorno como
$MACHTYPE
( que está configurado por Bash ) o$PATH
.Para detectar si está instalada una función como TFS, puede usar la
executable()
función.fuente
$MACHTYPE
. Tendrás que hacer algo comolet machtype=system('echo -n $MACHTYPE')
primero.Como otros ya han indicado, una detección confiable puede ser complicada. Mejor no reinventar la rueda, así que me gustaría mencionar la biblioteca vim-misc , que proporciona
xolox#misc#os#is_mac()
yxolox#misc#os#is_win()
funciona.fuente
Lo intenté
has('unix')
, pero no lo encontré útil, ya que todos mis Linux, Mac y Windows Git Bash volvierontrue
por él.Me pareció
uname
adecuado, ya que distingue entre Linux, Mac, Windows, sin demasiada granularidad.fuente