Home > Tags > Vim

Vim

clojure+vimclojureのインストール

結構時間かかった。今日(正確には昨日)の夕方からずっといじってた。まとめるとそんな時間かかるようなものでもないんだけどね。clojureよりvimclojureで色々手間取った。ちなみにプログラミング Clojureのサンプルを動かすだけなら、サンプルコードの中にClojureの実行環境(REPL)が含まれてるので以下の設定をやる必要はなし。

clojureのインストール

ソースはgithubから落としてくる。masterでもいいんだけど、clojure-contribの方がmasterだとうまくbuildできなかったので1.1.0を使うことにした。

$ git clone git://github.com/richhickey/clojure.git
$ cd clojure
$ git co -b 1.1.0 1.1.0
$ ant

clojure-contribのインストール

プログラミング Clojureではcontribのライブラリを結構使うみたいなのでこちらもインストール。

$ git clone git://github.com/rechhickey/clojure-contrib.git
$ cd clojure-contrib
$ git co -b 1.1.0 1.1.0
$ ant -Dclojure.jar=/github/clojure/clojure.jar

REPLの起動

$ java -cp /github/clojure/clojure.jar:/github/clojure/clojure-contrib.jar clojure.main

これで無事REPLが起動すればOK。contribが使えるか気になる人は試しにuseなどしてみるといい。エラーがでずにnilが返ってくればOK。

user=> (use 'clojure.contrib.str-utils)
nil

起動コマンド

いつもjava -cpとかやるのは面倒なので起動コマンドを使う。

$ mkdir ~/.clojure
$ ln -s /github/clojure/clojure.jar ~/.clojure
$ ln -s /github/clojure-contrib/clojure-contrib.jar ~/.clojure
$ export CLOJURE_EXT=~/.clojure
$ alias clj=/github/clojure-contrib/launchers/bash/clj-env-dir

clojure-contribに起動用のスクリプトがあるのでそれを使う。CLOJURE_EXTにjarのあるディレクトリを指定する必要があるため、適当なディレクトリを作り、そこにjarを入れておく。あとは適当にaliasはるか、実行パスのあるところにファイルを置けばよい。

vimclojureのインストール

vimclojureもリポジトリから落としてくる。tip(masterとかtrunkと同義)だとBuildツールがantじゃなくてgradleになってるけど、うまくbuild出来なかったので2.1.2を使う。

$ hg clone http://bitbucket.org/kotarak/vimclojure/
$ cd vimclojure
$ hg co -r v2.1.2

/path/to/vimclojureにlocal.propertiesというファイルを作る。

clojure.jar = /home/user/.clojure/clojure.jar
clojure-contrib = /home/user/.clojure/clojure-contrib.jar
nailgun-client = ng
vimdir = /home/user/.vim

そしてbuild。

$ cd /path/to/vimclojure
$ ant
$ ant install

antでbuild、ant installでvimdirにpluginとかがインストールされる。vimrcを設定すれば、この時点でsyntax-highlightとかOmni補完とかは使えるようになっているはず。

VimでREPL

vimでREPLなどの機能を使うためにはng-serverを立ち上げる必要がある。CLASSPATHにjarが設定されていないといけないみたいなので設定する。

$ export CLASSPATH=$CLOJURE_EXT/clojure.jar:$CLOJURE_EXT/clojure-contrib.jar:/path/to/vimclojure.jar
$ sh bin/ng-server
NGServer started on 127.0.0.1, port 2113.

そして、vimrcの修正。syntax highlightの設定なども含む。

" vimclojure
let clj_highlight_builtins = 1
let clj_highlight_contrib = 1
let clj_paren_rainbow = 1
let clj_want_gorilla = 1
let vimclojure#NailgunClient = "/path/to/vimclojure/ng"

適当なclojureのファイルを開く。使い方は:help clojure.vimを見ればよい。とりあえず、REPLの起動は<LocalLeader>sr
vimclojure

これで一通り設定完了。結構時間がかかったけど、大体詰まるところはCLASSPATHまわりだったのでもしうまく動かなかったらまずそこを確認した方がいいかも。

良いclojure + vimライフを。

参考:
Kotka : Projects : Clojure : VimClojure
Clojure Programming/Getting Started – Wikibooks, collection of open-content textbooks

Vim Hacks Projectはじめました

Lingrでのkanaさんの発言がきっかけでVim Hacks Projectをはじめることにしました。

Vim Hacks Projectとは

Foobar Hacksが出版されている昨今、是非Vim Hacksを出そうではないか! という訳で、手始めに有志を募って各々のVim Hacksをvim-users.jpにて認め、頃合いを見計らって企画を持ちかけよう! という計画。

とりあえず僕も参加します。僕の記事は29日0時に公開予定です。現在5人のローテーションで1hack/2dayで書き連ねていく予定です。

書き手はまだ募集中なので「我こそは!」という人がいれば是非参加を!

Vim-users.jp – Vim Hacks Project

Vim勉強会 in MTLで話してきました

Vim勉強会 in MTL : ATND
当日のLingrのログ写真録画

録画はあまり質に期待しないでとのこと(見てない)

便利なVimスクリプトやTips紹介 id:iandeth

タイトル通り便利なTipsの紹介。個人的には今回の勉強会に参加してくれた人達を見ると、これぐらいの内容が丁度よかったのかなーって思う。おれのはちょっと調子に乗りすぎたw

Vim捌きを上達させる、たったひとつの冴えたやり方至高のエディタには、至高のキーボード id:ursm

Vim勉強会なのにVimの話を一切しないという荒技。4万円ぐらいのキーボードの営業してました。フットペダル欲しいです。

Vim Script DE OOP id:ukstudio

とりあえず資料

完全に参加者置いてけぼりの発表内容でした。まぁネタだからいいんです。Vim ScriptでOOPはネタです。

Vim Scriptは名前空間とスクリプトローカルなスコープとかがあるのである程度規模が大きくてもなんとかなるので、無理矢理OOPする必要ないです。

if_rubyもOOPできるというよりはVim Scriptヨクワカラナイヨーな人が気軽にスクリプト書きたい時にちょこちょこっと使うってのが多いんじゃないですかね。if_rubyのプラグインってほとんどみないいし。ujihisaのmixi.vimだっけ、そこらへんの連投スクリプトぐらい。

今回のはどっちかというと僕個人がおれおれOOPというかそゆのをVim Scriptで作るのが楽しかったという理由だけでこの内容をチョイスしました。 ちなみにVim Scriptはスコープや可変長引数の文法がパッと見わかりづらいですけど、慣れればそんな難しい言語ではないですよ。一度挑戦してみるといいと思います。

懇親会

懇親会ではピザを食べながら適当に談笑しつつ、Rails.vimやオススメのプラグイン教えてと言われたので適当にプロジェクタ使って話してました。以下プラグインのリスト。

Rails.vim

VimでRails開発するなら必須です。最初はとりあえず:Rcontroller, :Rmodel, :Rviewとgf、:Rpartialあたり使っておけばいいんじゃないでしょうか。

Align.vim

整形したいコードをヴィジュアルモードなどで選択して,t=とかやると=でキレイに並べてくれます。コードの整形にこだわりのある人へ。

:[Range]Align=>とかやると複数の文字(この例だと=>)で整形できます。これはid:ursmさんに教えてもらいました。

smartchr.vim

id:haltさんの記事を読むといいと思います。

smartchrというvim pluginが簡単便利で目ウロコ – /halt/Snapshot

fuzzyfinder.vim

バッファで開いてるファイルとか最近使ったファイルとかを開くのに便利です。コマンド呼び出すのは面倒なので適当にマッピングして使いましょう。

nmap fb :FuzzyFinderBuffer
nmap ff :FuzzyFinderFile
nmap fm :FuzzyFinderMruFile

これtaku-oさんの指摘で気づきましたけど、fがもろに被ってますね。よい子は他のキーにマッピングしましょう。

neocomplecache.vim

autocomplpop.vim的な補完プラグインです。詳細はとりあえずリンク先を見ればいいと思います。

vim-users.jpのlingrに作者がいるので興味がある人、物申したい人は来たらいいんじゃないでしょうか。

永和システムマネジメント及びMTLの皆様に感謝

今回はちょっとしたことがきっかけで勉強会を行うことになったわけですが、永和システムマネジメントの角谷さん、MTLの石橋さん、小林さん他、このような場を提供して頂きありがとうございました!

また、ATNDを見る限り50人弱の人に参加して頂いたようなのですが、お忙しいところありがとうございました。

またどこか別の機会がありましたらよろしくお願いします。

追記: 永和システムマネジメントを永和マネージメントシステムと誤表記していました。ごめんなさい。

覚えとくと便利かもしれないVimのTips

適当に思い付いたものを書いてみる。

CTRL-X CTRL-L

行単位での補完。まぁ該当の行でyyしてpして貼り付けでもいいかもしれないけど、移動するの面倒な場合もあるし。

以下、自分のvimrcで「n CTRL-X CTRL-L」した例。

ちなみに俺がこれを一番使うときはRSpecのdescribeの行を補完する時かな。こんな感じ。

describe "hogehoge" do
end

desCTRL-X CTRL-L
↓
describe "hogehoge" do

んで、hでちょこちょこっと”の中に移動してdi”で”の中を削除する感じ。

di”

こっそり上で登場してるけど”で囲まれた文字列をd(削除)する。da”だと”も含めて削除。ちなみにこれはテキストオブジェクトっていうVim7からの機能で他にも色々パターンがあって、個人的にVimの機能の中でも特別気に入っている。ちゃんと説明すると長いのでいくつか例だけ示す。

di”
“の中を削除
da”
“も含めて削除
yi”
“の中をコピー
ya”
“も含めてコピー
di(
()の中を削除
da(
()も含めて削除
di{
{}の中を削除
da{
{}も含めて削除

gf

カーソル以下のファイル名を開いてくれる。requireやinclude、ファイルをオープンしたりする処理のところで便利。

require "hoge"

hogeのところでgfするとhoge.rbを開く。

CTRL-AとCTRL-X

VimM#3でamachangが感動してた気がする。カーソル以下の数字をインクリメントとデクリメントしてくれる。ちゃんと1000とかも1001や999にしてくれるよ。マクロで多用するかも。

guuとgUUと~

guuはカーソル行の文字を全部小文字に、gUUは全部大文字に。~はカーソル以下の文字を小文字なら大文字に、大文字なら小文字に。

書いといてなんだけどあまり使った記憶ないな、これ。

:!

:!を使うと外部コマンドを叩くことができる。単体だと結果を返すだけなので頭に.(ドット)を付けて結果を挿入したりする。単体で使うときはlsの結果を見るときが多いかも。一々screenのウィンドウを移動しなくて済む。なんか段々書くのが面倒になってきたので例で示す。

追記: kanaさんより指摘がありました。挿入はr!〜ですね。

> 単体だと結果を返すだけなので頭に.(ドット)を付けて結果を挿入したりする。
嘘。:{range}!{cmd}はフィルタリング。結果的にそうなるケースはあるけれど意味は違う。本当に挿入するなら:r!{cmd} (:read !{cmd})。

:!ls ~
ls ~の結果が表示される
:.!date
date結果が挿入される
:%!sort
今開いてるファイルをsortした結果に書き変わる
:%!grep hoge
hogeが含む行だけに書き変わる
:!ruby -c %
今開いてるファイルをrubyの構文チェックに通す。PHPとかでも似たようなことができる

第1回vimrc読書会が開催されるそうです。

第1回vimrc読書会開催のお知らせ

だそうです。おもしろそうだなー、参加したいなーとか思ってたら

肴rc
id:ukstudioのvimrc

おれのだ!

当日はtwitterの関西忘年会の二次会真っ最中な気がするけど、イーモバイルで繋げられそうだったら繋げよう。

VimM#3を開催してきました

本日、VimM#3を東京大学秋葉原キャンパスにて開催してきました。協力頂いた、星さん、笹田さんありがとうございました。また、参加頂いたみなさん、本当にありがとうございました。グダグダな部分もありましたが、無事終えることができました。

以下、簡単な感想。

Vimで効率的なテキスト編集 – ukstudio

自分の発表。相変わらず準備不足・・・とりあえず資料。

VimM#3
View SlideShare presentation or Upload your own. (tags: vim)

なるべく、チュートリアルに載っていなくて初心者が知らなそうなものをいくつか選んだつもりだったけど、ちょっと微妙だったかも。

マクロ – taku-o

名無しのvim使いのtaku-oさんによるマクロの説明。

実はマクロとか全然使ったことがなかったので参考になりました。なんとなくマクロは避けてた、と言うよりは無理に触れようとしてなかったんだけど仕組み自体は簡単そうなのでちょっと使っていこうかなと。とりあえずこう言うのは無理にでも書かないと感覚が掴めなさそうなのでちょっと頑張る。

俺の.vimrcを見ろ!PHP使いの為の設定プラグイン – halt

PHPerであるhaltさんによる発表。

「武士にとっての刀」というフレーズがおれの発表と丸被りで焦ったw autocomplpop.vimの紹介も実は簡単にしようかなと思っていたのだけど、こちらは省いたおかげで被らずに済んだ・・・

PHPのマニュアルをVimのヘルプにコンバートはいいアイディアだなと思った。確かにマニュアルを見るときはプログラミングを書いてるときなので、その方が手間は少なそう。

operator. the true power of Vim – kana

kanaさんによる発表。

Vimの習熟度によってLv0〜Lv7を定義。ちなみにおれはLv3でした。ビジュアルモードを使わなくなってやっとLv4らしい。あとテキストオブジェクトやばい。ライフチェンジン>グとは聞いていたけど、なかなか馴染めなくて後回しにしてたせいで結局身についてない・・・

とりあえず、ap、ipから覚えることにした。ちなみにLv7は1年じっくりVimを使えば辿りつけるらしい。

第2部 Q&Aセッション

Lingrだかどっかでkanaさんがボソっと言ったことにより企画したセッション。会場の人に質問してもらって、会場の人に答えてもらう。

正直、始めるまでは「質問なかったらどうしよう」とビクビクしたけど、正直グダグダなところはありつつも結構盛り上がったようなので良かったのかなと。もうちょっとうまく仕切れたらよかったのだけれど。あとマイクとかはあった方が良かったのかもしれない。

それともったいないなぁと終わったあとに思ったのは、質問内容とそれに対する回答を記録してなかったこと。前で仕切りながらやるのは厳しいので誰かにお願いしとけばよかったのかも。

謝辞

何はともあれ、なんとか無事に終えることができました。多数のご参加とご協力ありがとうございました!

「地味に便利なVim設定」をもうちょい地味に便利にする

地味に便利なVim設定 – ナレッジエース

いくつかもうちょい便利にできるよーってところがあったので書いてみる。

スペース + wで保存

別に¥¥で保存でもいいと思うけど、ちょっと指が遠い気がする。ので僕はスペース + wで保存してる。同じ要領でquitも。

nnoremap w :write
nnoremap q :quit

jとkでカーソルキーを中心に保ってスクロール

わざわざスペースを使わなくてもできる。gj、gkにしておくと表示行で上下に移動できるので折り返しの行があるときとかに便利。

nnoremap j gjzz
nnoremap k gkzz

ちなみに僕のvimrcはgithubに公開してあるのでよかったら参考にどうぞ。そんな大したものでもないですが。

.vimrc at master from ukstudio’s config – GitHub

VimM#3開催のお知らせ

11月の22日(土)の14時からVimM#3を開催します。

今回のテーマは「脱初心者」ということでなるべくなら初心者の方に来てもらいたいなと思っています。なんかメンバーみると結構「おまえ初心者じゃないだろう!」て人がいるので、負けずに初心者の方もいっぱい来てください。

スピーカーもまだ募集しているので応募お待ちしております。

今回の会場もささださんとほしさんにご協力頂きました。二回連続にわたりありがとうございます。

VimM#3

VimM#2でRails.vimについて話してきました

VimM#2

とりあえず資料。正直、これだけ見てもさっぱりな資料だとは思いますがw

Rails.Vim
View SlideShare presentation or Upload your own. (tags: 勉強会 rails)

Vimの人達の集りでRails.vimというRails使う人限定のプラグインの話はどうなんだろーとか思っていたけど、結構Rails使ってる人いたみたいでよかった。

発表内容自体はかなりgdgdというか、伝えたいことをうまく伝えられなかったなーと言った感じ。やっぱり事前に練習しとくべき。あとは慣れかなー。しばらくは積極的に発表する側で頑張りたい。

それと、RSpecの具体的な対応についてはrails.vimのファイル切り替えをRSpecに対応させる(仮)を参照。

それにしても、エディタ1つで4時間(懇親会含めるともっとある)発表があって、それに40人集まるってのもすごい話だ。

あと、VimMのMはみみのMらしいです。VimM#2はmickey24がうさみみをつけて主催するそうです。期待。

rails.vimのファイル切り替えをRSpecに対応させる(仮)

rails.vimをインストールすると、RcontrollerとかRmodelコマンドでRSpecファイルからControllerやModelファイルに切り替えることができるんだけど、その逆ができないので対応させた。仮なのはVimスクリプトをちゃんと書けなくてコピペのごまかしだから。

書きかえるファイルは~/.vim/autoload/rails.vim。一応行数も書いたけどもしかしたらズレてるかもしれないので参考程度に。あと、バージョンは2.0使ってる。

まずは、:Rspec、:Rspeccontroller、:Rspecmodelを呼び出せるようにする。

1777   call s:addfilecmds("integrationtest")
1778   call s:addfilecmds("spec")
1779   call s:addfilecmds("speccontroller")
1780   call s:addfilecmds("specmodel")
1781   call s:addfilecmds("stylesheet")

なんでわざわざ3つあるのかと言うと、「:Rspec hoge」ってやった時にControllerのスペックなのか、Modelのスペックなのか判断する方法がわからなかったから。だからとりあえず「:Rspec」とやったときは、今開いているファイルに対応するスペックファイルを開き、個別に指定して開きたいときは「:Rspeccontroller hoge」もしくは「:Rspecmodel hoge」で明示的にControllerかModelかを指定するようにした。

次に「:Rspeccontroller [tab]」や「:Rspecmodel [tab]」としたときに、スペック名を補完できるようにfunctionを追加する。

1941 function! s:speccontrollerList(A,L,P)
1942   return s:autocamelize(s:relglob("spec/controllers/",s:recurse,"_controller_spec.rb"),a:A)
1943 endfunction
1944
1945 function! s:specmodelList(A,L,P)
1946   return s:autocamelize(s:relglob("spec/models/",s:recurse,"_spec.rb"),a:A)
1947 endfunction

最後に実際にファイルを開く部分。2331、2334、2340、2345の”spec”、”speccontroller”、”specmodel”が最初に設定したaddfilecmdsの引数と対応するっぽい。なのでfunction名はなんでもいいと思うけど、とりあえず他のに合わせた。

specEditは「:Rspec」に対応していて、開いたファイルがControllerかModelかで開くスペックファイルもかわる。speccontrollerEditとspecmodelEditはControllerかModelどちらか決まったものしか開かない。

2328 function! s:specEdit(bang,cmd,...)
2329   if s:model() != ''
2330     let f = s:model()
2331     return s:EditSimpleRb(a:bang,a:cmd,"spec",f,"spec/models/","_spec.rb")
2332   else
2333     let f = s:controller()
2334     return s:EditSimpleRb(a:bang,a:cmd,"spec",f,"spec/controllers/","_controller_spec.rb")
2335   endif
2336 endfunction
2337
2338 function! s:speccontrollerEdit(bang,cmd,...)
2339   let f = s:controller()
2340   return s:EditSimpleRb(a:bang,a:cmd,"speccontroller",f,"spec/controllers/","_controller_spec.rb")
2341 endfunction
2342
2343 function! s:specmodelEdit(bang,cmd,...)
2344   let f = s:model()
2345   return s:EditSimpleRb(a:bang,a:cmd,"specmodel",f,"spec/models/","_spec.rb")
2346 endfunction

とりあえず、現状の設定で簡易的にRSpecに対応させることができる。「:Rspec」の存在が気持ち悪いのであれば、それは消して開いているファイルがControllerかModelか自分で判断して「:Rspeccontroller」か「:Rspecmodel」を使いわければいいと思う。「:Rspec [tab]」でエラーが出るし個人的には気持ちわるいんだけど、対応させたスペックを開くことの方がおおいし、その時は短いコマンドの方が都合がいいのでここらへんは妥協。今回Viewには対応させていないけれど、同じ要領でできるはず。

rails.vimを少しよんだだけだし、実際の動作もまともに検証してないので変な動作したらごめんなさい。まぁ致命的な問題は起きないだろうけど。正式にrails.vimがRSpecに対応してくれるといいんだけどね。

Home > Tags > Vim

Feeds
Meta
Others

Return to page top