VimでAppleScriptを書くための必要最低限の設定
AppleScriptとはMac OS用のスクリプト言語です。これを編集するには標準でAppleScript Editorが入っていますが、やっぱりVimでやりたいのでそのための設定について。
まずsyntaxがたくさんであるvimですが、AppleScript用のsyntaxは用意されていません。ここからAppleScriptのsyntaxを入手できます。これを~/.vim/syntax/にでも置いて、.vimrcに
autocmd bufnewfile,bufread *.scpt,*.applescript :setl filetype=applescript
とすればsyntaxが有効になります。また、AppleScriptでは1行で書かなければいけないのを複数行に分けたい場合、行末に¬を入力します(否定の記号ですね。なんでこんな仕様に…)。この記号はOption+lで入力できますが、AppleScript EditorではOption+Enterで入力&改行までするので、それに倣って、.vimrcに
autocmd FileType applescript :inoremap <buffer> <S-CR> ¬<CR>
とすればShift+Enterで同等のことができます。また、quiuckrun.vim用の設定として、
let g:quickrun_config = {} let g:quickrun_config.applescript = {'command' : 'osascript' , 'output' : '_'}
としておけばquickrunで実行できます。ただし、guiのアプリケーション(プロンプト出すやつ)は実行できません(後述)。あと、自分はコメントをトグルするためのプラグインとしてEnhancedCommentifyを使っていますが、それもapplescriptには対応していないので、編集します。EnhancedCOmmentify.vimの700行目あたりから延々と言語別のコメントが設定してありますが、適当に最後らへんに
elseif fileType == 'applescript' let b:ECcommentOpen = '--' let b:ECcommentClose = '' endif
とでも追加しておけばいいと思います。
以下、AppleScriptについてのメモ。
AppleScript Editorで保存するとき、次の4つの形式が選べます。
・アプリケーション
・スクリプトバンドル
・スクリプト
・テキスト
テキストはそのままテキストです。
スクリプトは、コンパイルしたコードと元のテキストを両方保持します。こうすることで実行可能かつ編集可能となります。ダブルクリップでAppleScript Editorが起動します。
スクリプトバンドルは、スクリプトをバンドル化したものです。
アプリケーションはスクリプトをバンドル形式で保存して、アプレット/ドロップレットと言われるものになります。Finderからドラッグして実行したり、ドラッグ&ドロップで何か実行できます。
で、スクリプトの拡張子が.scpt,スクリプトバンドルの拡張子(というか末尾)が.scptd,アプリケーションの拡張子(というか末尾)が.appです。(ということはvimで編集するファイル名が*.scptなのはおかしいのかな?)
AppleScriptは、AppleScript Editorから実行することができます。または、AppleScriptの環境設定で、メニューバーにスクリプトメニューを表示することもでき、そこからも実行することができます。
Terminalからも実行することができます。実行にはosascript,コンパイルにはosacompileを使います。osacompileの使いかたは次のとおりです。
osacompile [-o <name>] hoge.scpt
ここで、osacompileは-oオプションで指定された名前にもとづいてコンパイルする形式を決定します。前述の拡張しにしたがって、
・.scptならスクリプト
・.scptdならスクリプトバンドル
・.appならアプリケーション
となります。-oオプションを指定しなければa.scptが生成されます。
osascriptはそのまま、
osascript hoge.scpt
みたいになります。別にコンパイルしてなくて、テキスト状態のものでも実行できます。ただし、osascriptではプロンプトを表示させるようなアプリケーションそのままだと実行できません。解決方法としては、
on run {sourcefile} tell application "AppleScript Runner" do script sourcefile end tell end run
というスクリプトをrun.scptみたいに作成しておいて、
osascript run.scpt /Users/mfumi/hoge.scpt
とすれば実行できます。引数は絶対パスです(参考:MacScripter / osascript & AppleScript Runner: User interaction on the command line)。
ということで、quickrunでこれを使いたい場合には、
let g:quickrun_config.applescript = {'command' : 'osascript /Users/mfumi/run.scpt'}
みたいにすればできます。
とりあえずさらっと解説サイトみてるけどなんかすごい。こういう言語初めて。