Category Archives: プログラミング

vim-autocloseの補完対象の追加と削除

前置き

lisp系言語を使っているとカッコの対応をとるのがつらぽよになるので, エディタの支援機能を使うのが一般的(らしい)です.
カッコの色付けにより対応をわかりやすくするのはよく見る(気がする)支援機能ですね. あとは, 左カッコと同時に右カッコが補完される機能が, 賛否両論みたいですが割とメジャーっぽいですね.

さて,僕がよく使うエディタはvimなのですが, vimにも支援機能は当然あります. 僕は色付けにkien/rainbow_parentheses.vimを, カッコの自動補完にTownk/vim-autocloseあたりを使ってます. (ぶっちゃけあまり良く調べずにとりあえず使ってる)

このvim-autoclose, 各種カッコに限らず, 各種クォートも補完してくれるのですが, lispではシングルクォートってシンボルとかquoteに使うし, バッククォートも準クォートとかシンタックスクオートとかに使うんで, 補完されるとぶっちゃけ邪魔です.
他にも, rubyでは|をブロックでよく使うので補完してほしいのですが, こちらは逆に補完してくれません.
filetypeに合わせて, 補完対象を変えてくれたら便利ですよね. と思ってググったところ日本語情報が見つからなかったので, vim-autocloseのドキュメントにあたったところ, 解決策を発見出来たので, 書き残す次第です.

本題

vim-autocloseのドキュメントによると,

という書式で補完対象の追加, 削除が出来るようです. さらに実際の利用例も載っています.

これで, filetypeがrubyだった場合, |も補完対象に含めてくれるようです. 他にも自分のほしい機能を.vimrcに設定してみました.

シングル, バッククォートを外してみました. こんな感じでいろいろ設定するといいと思います. (そんなに複雑な設定をするようなものでもない気がするけど)

では, 良きvimライフを

余談

久々に書いたらやけに丁寧口調になった
こういうのっってqiitaに書いたほうがいいんだろうか

プログラミングClojure 第2版 p236の誤植

タイトルの通りです.

先に結論

ではなくて

試行錯誤の記録

現在の環境ならば

を実行しようとする時点でおそらくうまく行かない. ~/.lein/profiles.cljを作成して, 設定ファイルに

と書いてからやるとうまく行くらしいんだけど, 怒られたのか, それともうまくいったのかよくわからない(多分ダメそう)な感じに

ほかにも, noirを使おうとするプロジェクトのproject.cljのdependenciesに

を追加してlein depsするといろいろ落としてくるけど,

なんかこう言われる. ので:exclusionsのあたりを追記してlein depsすると何も出力しない.
とりあえずインストールできたと仮定して,

を再度実行. すると,

といわれる. 正直良くわからなくなってしまったのでGoogle先生に聞いてみると,

【Lisp】プログラミング言語 Clojure #3【JVM】

191 :デフォルトの名無しさん:2014/02/14(金) 20:03:15.49 .net
プログラミングClojure第二版の10.4の

lein noir new clojurebreaker

って

lein new noir clojurebreaker

の間違いじゃね?

とのことなので, やってみる.

できた.

ほかにも

このclojurebreakerは完全に新しいディレクトを作るべきなのか, それともすでにあるclojurebreakerのディレクトリ内に作るべきなのかとかわからないし, このページの下半分だけすっごく不親切.
どうやら, 今まで使ってきたclojurebreakerプロジェクトとは別に, noirを使ってできたprojectにコード類は移植するってことらしい.

ただ, lein-noir自体が今では開発が終わってしまっていることは本の訳注にもあるし, 実質参考にならないページだと言っていいのかもしれない.

追記

noirのバージョンが, 1.2.0だとlein runで例外を吐く.
lein new noir projectnameしたときにproject.cljに書いてあった1.3.0-beta3でないとダメみたい.

更に追記

どう見てもclojureのバージョンについての警告なのになぜかnoirのバージョンで怒られているものだと勘違いしていた
まあ, だからどうということでもないけど

Clojureのmapのちょっとした気付き

mapってリストを複数受け取れたんだなって

知らなかった

複数のリストの同じ位置の要素に, それぞれ関数を適用した結果のリスト(あやしい日本語)を返していることがわかる

渡したリストの長さが違う場合

短い方に合わせられている

Clojureでx::xsとか[X|Y]みたいなやつ

何したか

F#では, リストをx::xsみたいに先頭とそれ以外に分けれるっぽい
Prologも[X|Y]みたいにできた気がする
Clojureでもできないかと思ってしらべた

どうなるのか

関数fの引数にリストを渡すと, 分配束縛によってxにfirst, xsにrestが入る.

感想

関数の引数としてしか機能しないし, 予期しない制限多そう
ほかにはletつかうとか?

追伸

こっそりClojure始めたので今後書いていきたい