Vim

Vim 腳本檢查執行平台

  • April 5, 2019
" Get running OS
let os = ""
if has("win32")
 let os="win"
else
 if has("unix")
   let s:uname = system("uname")
   if s:uname == "Darwin"
     let os="mac"
   else
     let os="unix"
   endif
 endif
endif

" Brackets expanding
let preBracket="`"
if os=="mac"
 let preBracket="$"
endif

exe 'vnoremap' . preBracket . '1 <esc>`>a)<esc>`<i(<esc>'
exe 'vnoremap' . preBracket . '2 <esc>`>a]<esc>`<i[<esc>'
exe 'vnoremap' . preBracket . '3 <esc>`>a}<esc>`<i{<esc>'
exe 'vnoremap' . preBracket . '$ <esc>`>a"<esc>`<i"<esc>'
exe 'vnoremap' . preBracket . 'q <esc>`>a''<esc>`<i''<esc>'
exe 'vnoremap' . preBracket . 'e <esc>`>a"<esc>`<i"<esc>'
" Map auto complete of (, ", ', [
exe 'inoremap ' . preBracket . '1 ()<esc>i'
exe 'inoremap ' . preBracket . '2 []<esc>i'
exe 'inoremap ' . preBracket . '3 {}<esc>i'
exe 'inoremap ' . preBracket . '4 {<esc>o}<esc>O'
exe 'inoremap ' . preBracket . 'q ''''<esc>i'
exe 'inoremap ' . preBracket . 'e ""<esc>i'

作為上面的vimscript,我想將快捷鍵映射到鍵擴展括號取決於vim的平台。實際上,我的 macbook 使用不同的佈局,但我喜歡在鍵盤中輕鬆使用 ``` 字元,所以我映射到 $ ,它在 mac pro 鍵盤(da 佈局)上保持在同一個位置。

但似乎該腳本在 linux 上執行良好,但在 mac 上不起作用。我錯過了什麼或者我需要添加一些東西來使這個腳本在 Mac OSX 上工作?

我設法回答了我自己的問題,為了比較 vimscript 中的字元串,我們應該使用=~而不是==. 反面是!~

所以編輯這一行if s:uname == "Darwin"if s:uname =~ "Darwin"使這個小腳本工作。

我將其重寫為函式:

function! GetRunningOS()
 if has("win32")
   return "win"
 endif
 if has("unix")
   if system('uname')=~'Darwin'
     return "mac"
   else
     return "linux"
   endif
 endif
endfunction
let os=GetRunningOS()

如果有人對我感興趣.vimrc,請檢查我的dotFiles

Linux、OS X、FreeBSD、UNIX 和特定於發行版 (Debian) 的檢測。

" OS Platform Detection
let g:platform = 0
let g:distro = 0
" more distros to detect:
"https://www.novell.com/coolsolutions/feature/11251.htm://www.novell.com/coolsolutions/feature/11251.html 
let g:uname = substitute(system("uname"), '\n\+$', '', '')
if filereadable("/etc/debian_version")
   let g:platform="Linux"
   let g:distro="Debian"
elseif has('mac')
   let g:platform="Darwin"
   let g:distro="OS X"
elseif g:uname == "FreeBSD"
   let g:platform="FreeBSD"
elseif has('unix')
   let g:platform="UNIX"
elseif has('win32') || has('win64') "win32 also matches on win64 so redundant
   let g:platform="Windows"
elseif has('win32unix')
   let g:platform="Cygwin"
else
   let g:platform="Unknown"
endif

引用自:https://unix.stackexchange.com/questions/40047