昨日、記事書いたばっかりですが QuickFixとの連携もできるような設定ができたので、紹介です。
augroup MyObjcAutoCmd
autocmd!
autocmd FileType objc setlocal makeprg=xcodebuild -activetarget -activeconfiguration \| grep -e "^/.*" \| sort -u
autocmd FileType objc nnoremap <buffer> <C-9> :call XcodeBuildCheck()<CR>
autocmd FileType objc inoremap <buffer> <C-9> <C-o>:call XcodeBuildCheck()<CR>
function! XcodeBuildCheck() "{{{
let proj_dir = substitute(b:cocoa_proj, '(.*)/.*' , '1', '')
let current_dir = getcwd()
execute ":lcd " . escape(expand(proj_dir), " #\")
make
execute ":lcd " . escape(expand(current_dir), " #\")
endfunction
augroup END
b:cocoa_projを取得するために前回の記事の下の方の設定をもってくるか、cocoa.vimをいれるかのどちらかが必要です。
Xcodeでつくったクラスファイルを編集中にcontrol+9をすると自動でxcodeprojファイルのあるディレクトリにカレントディレクトリを移して、makeしてくれます。またmakeが終わった時点でカレントディレクトリをもとの場所に戻してくれる処理もいれてあります。

またエラー箇所をQuickfixで見られるようになっています。grepでエラー箇所を探したあとに sort -u でエラー箇所の重複の削除をしています。もしかしたら副作用があるかもしれないです。

前回の記事が嘘のような使い心地ですよ〜>< 最初からこうすればよかったと。
みなさん、ぜひぜひ設定してくださいっ!!
ちなみにVimでMacアプリケーション開発してる人、iPhoneアプリ開発してる人ってどれぐらいいるんでしょうか?
Vimにcocoa.vimを導入してからすっかりXcodeはビルド用になってます。
Vim + cocoa.vimで少し不満だったのが、エラーをみたいときにいちいちXcodeとVimとをいったりきたりしないといけないというところ。わがままなのかもしれないですが、どうせならVimだけでさくっと確認したいなぁ〜と。
そんなわけでからXcodeを使わずに文法チェック(というかビルドしてるという。。。)するための設定をしてみました。
autocmd FileType objc nnoremap <buffer> <C-9> :call XcodeBuildCheck()<CR>
autocmd FileType objc inoremap <buffer> <C-9> <C-o>:call XcodeBuildCheck()<CR>
function! XcodeBuildCheck() "{{{
let proj_dir = substitute(b:cocoa_proj, '\(.*\)\/.*' , '\1', '')
let proj_file = substitute(b:cocoa_proj, '\(.*\)\/\(.*\)', '\2', '')
let current_dir = getcwd()
execute ":lcd " . escape(expand(proj_dir), " #\\")
let error_message = system( 'xcodebuild -project ' . escape(expand(proj_file), " #\\") .' -activetarget -activeconfiguration')
echo error_message
execute ":lcd " . escape(expand(current_dir), " #\\")
endfunction
上のコードを.vimrcに追加するとXcodeプロジェクトに含まれているファイルを編集しているときにControl+9を押すとシステムのxcodebuildというコマンドを呼び出してビルドをしてくれて、ビルド結果が表示されるようになります。Xcodeをいちいち立ち上げしなくてもビルドできるので楽ちんです♪
やりたかったけど、できなかったこと
- error_messageを整形するなりして表示されるメッセージを綺麗にしたかった。
- QuickFixのウィンドウに表示して、エラー行にすぐに飛べるようにしたかった。
1つ目の「メッセージの整形」は、substitute()をつかって抽出できるかな?と試してみたのですが、うまくいかず。2つ目の「QuickFixウィンドウを使う」はできるのかどうかもわからない。そんな状態になってます。VimScriptってよくわからないんですよね。。。。そんなわけでだれか作ってくれないかなぁ〜なんて思ってしまいます。
Objective-CでVimを動かせないかな。。。。
ともあれ、Xcodeを使わずにVimだけでビルドができる & 文法エラーもチェックできるので、ぜひぜひ試してみてください。
というわけで、たかともでした。
ちなみにb:cocoa_projが取得できればcocoa.vimはいらないです。こんな感じ。
if exists('b:cocoa_proj')
finish
endif
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h'), '*.xcodeproj'))
" Search a few levels up to see if we can find the project file
if empty(b:cocoa_proj)
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h:h'), '*.xcodeproj'))
if empty(b:cocoa_proj)
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h:h:h'), '*.xcodeproj'))
if empty(b:cocoa_proj)
let b:cocoa_proj = fnameescape(globpath(expand('<afile>:p:h:h:h:h'), '*.xcodeproj'))
endif
endif
endif
autocmd FileType objc setlocal makeprg=xcodebuild\ -activetarget\ -activeconfiguration
をしておいて、ビルドするときに:lcdでxcodeprojがあるディレクトリにいって:makeする方法を見つけて、泣きそうです。
まぁ、いちいち:lcdしなくてもいい利点はあるものの、やってしまった感が。。。。
Leopardになったころからだか、出てくるようになった「ファイルを開いてもいいですか?」のアラート

ファイルを開くたびに聞かれると、作業のリズムがくずれてしまいます。
このアラートを表示させないようにするための設定が見つかったのでメモ。
~/Library/Preferencesにcom.apple.DownloadAssessment.plistという名前のファイルをつくる。内容は以下。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LSRiskCategorySafe</key>
<dict>
<key>LSRiskCategoryContentTypes</key>
<array>
<string>public.html</string>
<string>public.xml</string>
<string>public.php-script</string>
</array>
<key>LSRiskCategoryExtensions</key>
<array>
<string>xhtml</string>
</array>
</dict>
</dict>
</plist>
このとき別のファイル形式も追加したい場合は<array></array>の間に、<string>ファイルの拡張子</stinrg>の形式で追加していくことができます。またファイルの拡張子以外にもUTI(Uniform Type Identifiers)という指定方法もできます。上記のpublic.htmlとかはその1種類。詳しくはmac Uniform Type Identifiersでも検索してみてください。
さようなら、アラート。
こんにちは、快適な生活♪
みなさんも設定してみてくださいね。
でわでわ、たかともでした。
Vimでファイルを自動補完する際のス設定を変更しました
今回の設定だとファイルが存在すればファイルを自動で保存、ファイルが存在しなければ自動で保存しないようになります。そのため新規にファイルを作った場合だと初回だけ自分でファイルの保存をしないといけないわけですが、テストのためにちょっとしたファイルを作る→勝手に保存される→あとでファイルを消す。そんなこと状況を回避するために設定を変更しています。
と、書いたもののものすごい短い設定になってます。
" 何も操作をしていないと判定される時間
set updatetime=500
set updatecount=500
" 操作がとまったら自動で保存する
autocmd! CursorHold * if filereadable(expand("%"))!=0 | update
autocmd! CursorHoldI * if filereadable(expand("%"))!=0 | update
自動保存、さいこうです〜〜〜♪
でわでわ、たかともでした。
追記
上の設定だとQFixGrepのプレビューウィンドウが開かなくなるという自体になりました。いや、さっきまではちゃんとプレビューウィンドウも開いていたんですけど、急にQFixGrepが見つからないよ〜とエラーが出たと思ったら、プレビューウィンドウが開かなくなったという不思議ちゃん。
if以降を関数として定義→CursorHoldイベントで呼び出すと直りました。
以下、コード。autocmd!の部分を変更してください
" 操作がとまったら自動で保存する
autocmd! CursorHold * call g:my_auto_save()
autocmd! CursorHoldI * call g:my_auto_save()
function! g:my_auto_save()
if filereadable("%")!=0
update
endif
return
endfunction
でもなんで関数を定義して呼び出したら、プレビューウィンドウが開くようになったんだろう。。。
EmacsでもVimでも少しでも作業がとまると自動で保存してくれるのが、ものすごい便利だったりします。副作用がないわけではないのですが、ファイルの管理はバージョン管理のSubversionとかGitとかに任せてしまっているので、実に快適に作業できちゃうんですよね。
というわけで、EmacsとVim。両方の自動保存するための設定を紹介したいと思います
Vim編
以下の設定をVimの設定ファイルに追加
" 何も操作をしていないと判定される時間
set updatetime=500
set updatecount=500
" バッファの切り替えなどのときにファイルを自動で保存する。
set autowriteall
"set autowrite
" 操作がとまったときにファイルが更新されていれば自動で保存する
autocmd! CursorHold *.* update
autocmd! CursorHoldI *.* update
" ついでに操作がとまったら保存されるのでSwapファイルもバックアップファイルもいらない。
" バックアップファイルを作らない
set nobackup
" swapファイルを作らない
set noswapfile
autocmd! CursolHold *.* updateをautocmd! CursorHold * updateに変更すると無名バッファで編集ができなくなるので、こんな表記に。。。。無名バッファを表すときってどうやって表現したらいいのかわからなかったので、こんな表現になっています。
注意:BufWritePostにコマンドを割り当てていたりすると副作用があるかもしれないです。
Emacs編
こちらのサイトからauto-save-buffers.elをダウンロード。以下のコードをEmacsの設定ファイルに追加してあげる。
(require 'auto-save-buffers)
(run-with-idle-timer 0.5 t 'auto-save-buffers)
「たかともは保存を忘れたようだ。」
いちばんの副作用は、ほかのアプリケーションを使ってるときにまで保存するのを忘れたするようになってしまったことです。
みなさん、気をつけてつかってみてくださいね。
でわでわ、たかともでした。