실행 중인 플랫폼을 확인하는 Vim 스크립트

실행 중인 플랫폼을 확인하는 Vim 스크립트
" 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의 플랫폼에 따라 단축키를 키 확장 괄호에 매핑하고 싶습니다. 사실 제 맥북은 다른 레이아웃을 사용하고 있는데 키보드에서 ``` 문자를 사용하는 편리함이 좋아서 맥 프로 키보드에서 같은 위치에 있는 $(da 레이아웃)에 매핑했습니다.

그러나 스크립트는 Linux에서는 잘 작동하지만 Mac에서는 작동하지 않는 것 같습니다. Mac OSX에서 이 스크립트를 실행하려면 뭔가 빠졌거나 뭔가를 추가해야 합니까?

답변1

나는 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내 글을 확인해 보세요.파일 클릭

답변2

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

관련 정보