Vim配置文件检测操作系统的方法(Win,Unix,Mac)

Vim, Vimwiki


spf13-vim 中有一个更好的版本 请查看这个project的代码

突发心血更新自己的VIMRC文件, 发现在mac下需要新的检测系统的方法,虽然理论上说mac是*nix, 不过在配置上还是有一点点差异.

dotvimrc

我的dotvimrc也是学大多数人放在github上, 同时我还是用了vundle, 这样也不需要托管太多文件, 一个配置文件就行了. 早期的dotvimrc配置参考了vgod的, 不过那应该还是许多年前的事情的, 那个时候vgod还没有使用pathogen, 奇怪的是我在他的repo里也找不到他多年前的vimrc文件了, nevermind. 为什么要区分系统了, 目的是让配置文件更加的pervasive, 比如我在不同电脑下的vimwiki目录放置在不同地方, 总所周知win下和unix下, 需要一些配置来凭证vim的差异, 等等.

vgod的方法

function! MySys()
	if has("win32")
    	return "win32"
	elseif has("unix")
    	return "unix"
endfunction

多年看,照抄了vgod的这个函数, 这样做是有效的, 在我win和linux双修的年代, 一直陪伴着我, 不过近期我购入了一台MBA, 在参考了一些人的配置文件之后就想当然的添加了

function! MySys()
	if has("win32")
    	return "win32"
	elseif has("unix")
    	return "unix"
    elseif has("mac")
    	return "mac"
endfunction

结果却不是这样的.

hotoo的方法

if has("win32") || has("win32unix")
    let g:OS#name = "win"
	let g:OS#win = 1
	let g:OS#mac = 0
	let g:OS#unix = 0
elseif has("mac")
	let g:OS#name = "mac"
	let g:OS#mac = 1
	let g:OS#win = 0
	let g:OS#unix = 0
elseif has("unix")
	let g:OS#name = "unix"
	let g:OS#unix = 1
	let g:OS#win = 0
	let g:OS#mac = 0
endif
if has("gui_running")
	let g:OS#gui = 1
else
	let g:OS#gui = 0
endif

在macvim里用 echo has("unix")echo has("mac") 分别显示的是 1 和 0. 根据别人提示 h feature-list 里找到这么几行

mac                     Macintosh version of Vim.
macunix                 Macintosh version of Vim, using Unix files (OS-X).
win32unix               Win32 version of Vim, using Unix files (Cygwin)
unix                    Unix version of Vim. 看来这个是取决于编译时候的选项咯??

Solution

最后Stackoverflow给出了一个使用系统命令uname的方法, 在has(unix)返回1 的情况下细分Linux和Darwin, 这个问题算是解决了.

if has("unix")
	let s:uname = system("uname")
    if s:uname == "Darwin\n"
    	" Do Mac stuff here
    endif
endif

Reference