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