macOS 에서 한/영 전환을 Shift-Space 로 변환하고 싶을 땐, 몇가지 방법이 있지만, ~/Library/Preferences/com.apple.symbolichotkeys.plist
를 살짝 바꿔주는 방법이 제일 편하다.
그런데, macOS 의 plist 는, 평범한 텍스트파일인 경우도 있지만, 이진파일인 경우도 있다. 이진 plist 를 편집하려면, 당연히 일반 편집기로는 안되고 전용도구를 써야 한다.
- xcode : Apple 에서 제공하고, 무료이지만, 무려 10GB 정도나 자리를 차지한다.
- TextWrangler : 개발 중지되었고, BBEdit 가 계승했다. 다만, 무료는 아니다.
- PlistEdit Pro : 역시나 무료가 아님.
- Xplist : 이게 괜찮아 보이네! 오픈 소스!
이런 와중에, 혹시나 Vim 으로 Plist 편집이 가능하지 않을까하는 생각이 들었고, 즉각 검색에 나섰다.
어허.. 왜 없겠나. 다소 오래되긴 했지만 vim-plist 라는 게 있었다. (찾아보면 더 있을 지도 모르겠으나, 그냥 눈에 띄는 걸로 골라 잡았다.)
설치를 위해선 vim-pathogen 이란게 또 필요하다.
다 합하면 이렇다.
# Pathogen 설치 $ mkdir -p ~/.vim/autoload ~/.vim/bundle $ curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim # ~/.vimrc 에 다음 내용 추가 execute pathogen#infect() syntax on filetype plugin indent on # vim-plist 설치 $ git clone git://github.com/darfink/vim-plist.git ~/.vim/bundle/vim-plist
끝. 자세한 사용법은 모르겠고, 그냥 내가 대충 쓰기엔 전혀 불편함이 없다.
별 문제가 없겠거니.. 했는데, 사용한지 얼마되지 않아 문제가 발생했다.
이미 있는 plist 를 불러오고 고치는데는 문제가 없다. 그 plist 가 텍스트(xml) 형식이든, 이진형식이든.
다만, 새 plist(당연히 텍스트 형식)를 만들 경우, 오류가 발생한다.
예를 들어, Info.plist 를 만든다고 했을 때.. vim Info.plist
후에 내용을 작성하고 저장하면, 이런 오류가 발생한다.
Error detected while processing function plist#Write: line 7: E121: Undefined variable: b:plist_original_format E15: Invalid expression: !len(g:plist_save_format) ? b:plist_original_format : g:plist_save_format line 12: E121: Undefined variable: save_format E15: Invalid expression: "silent '[,']write !plutil -convert " . s:mapping[save_format] . ' - -o ' . shellescape(fil ename, 1) line 23: E121: Undefined variable: save_format E116: Invalid arguments for function plist#DisplayInfo
개발자 Github 에 보면, 이런 문제 해결을 위하여 ‘ToDo’ 항목을 만들어 놓기는 했으나.. 4년 전이 마지막 흔적임을 보면, 해결될 가능성은 요원한 듯 하다.
대신 이 문제를 돌아갈 수 있는 방법을 찾았다.
다만.. Vim 문법에 익숙하질 못해서, 뜻하는 바를 정확하겐 알지 못하겠다.
어쨌든, ~/.vimrc 에 해당 내용을 넣어놓으면, 새로 plist 를 만들어도 오류가 발생하진 않는다.
function! s:ConvertBinaryPlist() silent! execute '%d' call plist#Read(1) call plist#ReadPost() set fileencoding=utf-8 autocmd! BufWriteCmd,FileWriteCmdautocmd BufWriteCmd,FileWriteCmd \ call plist#Write() endfunction autocmd BufRead * \ if getline(1) =~# '^bplist' | \ call s:ConvertBinaryPlist() | \ endif autocmd BufNewFile *.plist \ if !get(b:, 'plist_original_format') | \ let b:plist_original_format = 'xml' | \ endif
또는, .vimrc 를 수정하지 않고, 이렇게 할 수도 있다. vim aaa.plist 등으로 파일을 만들지 말고, 확장자 plist 를 주지 않고 파일을 만든다. 즉, vim aaa 등으로 만든 후 일단 작업을 한 뒤에, 나중에 파일명을 바꾸면 되긴 된다.
vim aaa.plist # 이렇게 생성하고 저장하면 오류가 발생한다. vim aaa # 이렇게 만들고, 저장한 뒤, 나중에 aaa.plist 로 바꾼다.
뭘 택하든.. 어차피 자주 쓸 기능은 아니므로.. (과연 그럴까…?)