83's

Top > Tags > vim

vim

タイトル一覧を表示 | 本文を表示

vim 7.1 May 14, 2007 18:55

ベータがとれたのデターーーー!

バグフィックスとランタイムファイルのアップデートが中心で、 驚くような特徴はない、とのこと。らんたいむふぁいる?

そう言えばGetLatestVimScriptsは間に合ったのかな……。間に合ったみたい。

飯食ったら入れてみよう。

vimからRSpec on Rails May 06, 2007 03:28

少しずつRSpec on Railsに移行していこうとしてるんだけど、 Test::Unitと違ってrails.vimのサポートがなくて簡単に走らせることができないので moroさんのRSpec用のマクロをベースに ごにょごにょ。

function! Rspec ()
  let rails_spec_pat = '\<spec/\(models\|controllers\|views\|helpers\)/.*_spec\.rb$'
  if expand('%:p') =~ rails_spec_pat
    exe '!rake spec SPEC="'.expand('%:p').'" RSPECOPTS="-fs -c -l '.line('.').'"'
  else
    :!spec -fs -c %
  endif
endfunction

au BufRead,BufNewFile *_spec.rb :command! Rspec :call Rspec()

*_spec.rb開いて:Rspecで実行できる。

違いは

  • rake specを使う
  • 現在のカーソルの行を--lineオプションに使う

--lineオプションのおかげで、実行したいit(specify)の中にカーソル持ってくれば そこだけ実行してくれる。 itの外だとそこのdescribe(context)を実行……するといいんだけど、 カーソルとdescribe行の間にitがある場合、カーソルに1番近い itのみが実行される。まあこれはRSpecの仕様、ということで。

--exampleオプションを使えたら一番いいけど、vimスクリプト書かないとどうしようもないので ひとまずこれでガマン。

それから、spec/spec.optsからオプション読めたらいいんだけど、これもオレには無理。 とりあえず今はRSPECOPTSに書き込む。

一息ついたらvimスクリプト勉強しようと思う。 rails.vimの人がなんとかしてくれたらそれが一番最高ですが。

まだRSpec全然触れてないんだけど、個人的な感想としては describe/itの2段階で括れることと、それらの引数のところで説明が書けるのが好きだな、 コメントより目立つし。 あとTest::Unitのtest_xxxみたいに妙な英語を書く必要もないし……。

shouldなんとかはどうでもいいというか、むしろ慣れるまでキモいんだけど。 あ、Test::Unitではtest_helper.rbに繰り出せば良かったメソッドって、 RSpecではどこにどう書いたらいいんだろう……。

そういえば知らないうちにcontext/specifyからdescribe/itになったみたいだけど、 日本語の場合はちょっと微妙だな……。itなんて動詞ですらない。

パッチを送ってみた May 02, 2007 23:38

GetLatestVimScriptsのバージョン23がなんかおかしい気がしたので 今朝のとあわせてパッチを送ってみた。

英語のメール書くのに時間がかかりまくった。

なんかこの人vimballとかいろいろ作っててすごい人っぽい。余計に緊張するぜ。 数時間適当にいじっただけなのにパッチなんか送りつけて良かったんだろうか…… しかもvimスクリプト全然わからないよ。 (((( ;゚Д゚)))ガクガクブルブル

オレが間違ってるだけとか言う恥ずかしい結果になりませんように……。

vimスクリプトの自動更新 May 02, 2007 04:41

GetLatestVimScriptsが便利そう。 vim7には標準で付いてきてるみたい。

vimのexモードで

GetLatestVimScripts

または

GLVS

とやると、インストールしてあるスクリプトのうち GetLatestVimScriptsに対応しているやつの最新版を http://vim.sourceforge.net/から ダウンロードして更新してくれる。

らしいんだけど、ちょっとはまったので作業メモを残しておきます。

各vimスクリプトのバージョンを~/.vim/GetLatest/GetLatestVimScripts.datに保持する ことになるんだけど、自動で作ってくれなかったので

% mkdir ~/.vim/GetLatest
% cat > ~/.vim/GetLatest/GetLatestVimScripts.dat
ScriptID SourceID Filename
--------------------------

とした。-------の行が大事。

あとはGLVSすればいいんだけど、zipで配布されているrails.vimが更新されないと思ったら オレの/usr/share/vim/vim70/plugin/getscript.vim (vesrion 20)の269行目が

exe "silent !unzip -o".fname

となっていた。-oの後には空白が必要だろうから

exe "silent !unzip -o ".fname

に変更。vimを起動し直してGLVSしたら新しくなった。

で、version 20はvimballには対応してない気がするのでversion 23にしたら、 rails.vimの扱いがなんかおかしい(今ここ)。うーん。

rails.vimでRgenerateでsvk add November 26, 2006 05:19

rails.vimでは:Rgenerate model Bookとかやると./script/generate model Bookが走る上に .svnがあると-cオプションをつけてくれるのでsubversionにファイルを追加してくれて 激しく便利なんだけど、これがsvkだとそうはいかないのでrails.vimをちと変えるよ!

1062     let file = ""
1063   endif
1064   if !s:rubyexe("script/generate ".target.(s:usesubversion()?' -c':' -S').str) && file != ""
1065     exe "edit ".s:ra()."/".file
1066   endif

3項演算子らしきものがあるのでそこに-Sを追加。 オレオレscript/generateとの併用でsvk addしてくれます。

これ、.svnがないと無条件でsvk使おうとするんだけど、 svnもsvkも使わないのが許されるのは確か小学生までなんで大丈夫だろうきっと。 vimスクリプトには突撃したくないのでとりあえずいいよオレはこれで。 あーでもちょっとRailsった場合はウザいかも。

ちょっと元気になってきた。オレはいつ寝たらいいんだろう。 とりあえずベッドに横たわってみる。

rails.vimのいい加減な翻訳 September 02, 2006 12:51

バイト先でTextMate触ってみて、Ruby, Railsに特化しててショートカットとかいろいろ便利だなぁと思いつつも、カーソルの移動とか基本的な編集のところで発狂しそうになるので、vimをTextMate並にRailsフレンドリーにするしかないと思った。

てことで、前にインストールしたもののシンタックスハイライトしか使っていなかったrails.vimを本格的に使うため、ヘルプをものすごい勢いで訳した。 自分用なのでかなりいい加減な文で、しかもTOEIC400点台なのでクソな訳が混じってます。それから、なんちゃってvimerなので全然理解していないところも多々。 でもまあせっかくなので公開しておきます。 いろんな直しは後でやる。 それにしてもひどい訳だ……。ハズカシス(つД`)

イントロダクション

TextMateはRuby on Railsアプリケーションの開発にとって最新の流行かもしれないが、 Vimはいつも流行っている。このプラグインは、Ruby on Railsの開発に以下の特徴を提供する。

  1. Railsアプリケーションのファイルを含むバッファを自動的に発見し、それらのバッファ(のみ)に設定を適用する。その上、あなたは自分自身の設定を適用するためにautocommandを使うことが出来る。
  2. わずらわしくない。Railsアプリケーションのファイルにだけ影響し、一般的なRubyスクリプトには手を付けないままだ。プラグインが有効になっているときでさえ、プラグインはもしその特徴をあなたが使っていないならば、あなたのやり方に干渉しない。(もしそうではない状況を見付けたら、rails-plugin-authorにコンタクトを)
  3. Railsアプリケーションで仕事をするための妥当な設定を提供する。Rakeは'makeprg'(そしてそれはいつもあなたのRakefileがどこにあるのかを知っている)、'shiftwidth'は2、そして'path'はあなたのアプリケーションのディレクトリの適切なコレクションを含んでいる。
  4. Railsのディレクトリ構造への簡単なナビゲーション。gfは文脈を考慮し、partial, fixtureなど多くについて知っている。ファイル間の簡単なジャンプとして:A(alternate)と:R(relate)という2つのコマンドがあり、このジャンプにはモデルとマイグレーション、テンプレートとヘルパー、コントローラと機能テストのような近いものを含む。より発展的な使い方は、:Rmodel, :Rview, :Rcontrollerと、いくつかほかのコマンドが提供されている。
  5. 拡張された文法ハイライト。has_and_belongs_to_manyからdistance_of_time_in_wordsまでがここにある。Vim 7のユーザには、'completefunc'がi_CTRL-X_CTRL-Uでのsyntax based completionが使えるようになる。これは長いメソッド名のようなものを入力するのを容易にする。
  6. script/*へのインタフェース。一般的に、script/aboutを呼び出すために":Rscript about"を使う。多くのコマンドは追加的な特徴と一緒にラッパーを持っている。":Rgenerate controller Blog"はblogコントローラを生成し、app/controllers/blog_controller.rbを編集する。
  7. 部分的な抽出。:Rpartisal {file}は、望んだ範囲(理想的には、ビジュアルラインモードで選択されている)をrender :partial => '{file}'で置き換える。これは、自動的にあなたの内容と一緒に作成される。@{file}インスタンス変数は、{file}ローカル変数によって置き換えられる。
  8. ほかのプラグインとの統合。:Rprojectは新しいproject.vimプロジェクトを作成する。:Rdbextはdbext.vimのためにdatabase.ymlからデータベースの設定をロードする(そしてデフォルトでは多くの状況でこれが起こる)。Creamのユーザはいくつかの追加的なマッピングを得られ、すべてのGUIユーザはメニューを得る。

インストールと使い方

もしzipファイルを持っているなら、それをvimfiles(Windows)か~/.vim(その他)に取り出す。 すると、あなたは以下のファイルを持っているはずだ。

plugin/rails.vim
doc/rails.txt

ドキュメンテーションを可能にするに当たって、説明書としてadd-local-helpを見よ。 nutshellでは、

:helptags ~/.vim/doc

あなたがRailsアプリケーションのファイルを編集したいときはいつでも、このプラグインは 自動的に有効になる。これはさまざまなオプションをセットし、いくつかのバッファ特有の コマンドを定義する。

もしあなたが始めようと急いでいるなら、最小限の量として、このファイルの見出しとコマンド をスキミングして何が提供されているか良いアイデアを得ることを勧める。もし1つだけ読むなら、 それはナビゲーションのセクションであることを確認せよ。

一般的なコマンド

別の方法で宣言されていなければ、すべてのコマンドはバッファローカルである。これは、あなたがRailsアプリケーションのファイルを実際に編集しなければならないことを意味する。

:Rails {directory}

グローバルだけのコマンド。{directory}に新しいRailsアプリケーションを作成し、READMEをロードする。

:Rake {target}

('makeprg'がrakeの状態で):make {target}を呼んだ場合と同じ。しかしながら、いくつかの文脈では、 もし{target}が省略された場合、:Rakeは何か賢明なことを採用する(マイグレーションでのdb:migrateや、現在のテストのような)。

:Rcd [{directory}]

/path/to/railsapp/{directory}へ:cdする。

:Rlcd [{directory}]

/path/to/railsapp/{directory}へ:lcdする。

:Rdoc

Rails APIをブラウズする。APIは現在のRailsアプリケーションのdoc/apiか、 もし動いているならgem_serverか、http://api.rubyonrails.org/のどれかである。 :OpenURLが定義されている必要がある(:OpenURLを見よ)

:Rdoc!

適切な:helptagsを呼び、:help railsを実行する。

:Redit {file}

{file}を編集する。アプリケーションルートからの相対パス。

:Rlog [{logfile}]

ウィンドウを分割し、{logfile}($RAILS_ENVか、デフォルトではdevelopment)をオープンする。 ハイライトのために使われている制御文字は削除される。 もし:Tailコマンド(これはtailminusf.vimにより提供される)を持っているなら、それが使われる。 そうでないなら、ファイルは変更されてもリロードされない。 Vimに変更をチェックさせるよう指示するにはchecktimeを使う。 Gはファイルの最後にジャンプすることより優先してそれをするようにマップされていて、 qはウィンドウを閉じることにマップされている。 もしロードの遅延が長すぎるなら、:Rake log:clearをするのがいいかもしれない。

:Rinvert

マイグレーションの中でだけ有効な実験的なコマンド。self.upメソッドをself.downメソッドに書き直す。 もしself.upが空なら、その処理は逆になる。より複雑な命令では苦しいが、create_table、add_column、などのような 単純な呼び出しにはかなりうまくいく。

:Rpreview [{path}]

http://localhost:3000/と与えられた{path}からURLを作成する。もし{path}が省略されると、 賢明なデフォルトが使われる(現在のコントローラ、テンプレートを考慮するが、ルーティングには配慮しない)。 そんなに便利ではないデフォルトは、netrwにそれをダウンロードすることを許しながらvim自身を使ってこのURLを編集する。 より便利なのは、:OpenURLコマンドを定義することだ。これを代わりに使うことができる。(:OpenURLを見よ)

:Rpreview! [{path}]

:Rpreviewと同じである。:OpenURLが使われないことをのぞいては。

:Rtags

現在のアプリケーションルートでctags -Rを呼ぶ。ctagsがインストールされている必要がある。

:OpenURL {url}

これはプラグインによって提供されたコマンドではなくむしろユーザによって提供され、 ほかのプラグインの特徴によって利用される。このコマンドは、提供された{url}をwebブラウザで開くよう 定義されているべきだ。Macでのコマンドの例をあげる。

:command -bar -nargs=1 OpenURL :!open <args>

Windowsで動かすためには以下のようにする。

:command -bar -nargs=1 OpenURL :!start cmd /cstart /b <args>

Debian系のディストリビューションでは、以下が好まれる方法だ。

:command -bar -nargs=1 OpenURL :!sensible-browser <args>

もしhas("mac_gui")、has("wind32_gui")、またはexecutable("sensible-browser")がtrueならば、 上の関連するコマンドは自動的に定義される。 そうでないなら、あなたはあなた自身で提供しなければならない(とにかくこれは推奨)。

ナビゲーション

ナビゲーションはこのプラグインの本当の力が発揮される所だ。 以下の特徴の効果的な使用は、Railsのファイル構造を渡り歩くのを大いに簡単にする。

'path'は全てのベストな場所を含むよう更新されている。

:find blog_controller
:find book_test

gfコマンドは普通カーソルの下にあるファイルを編集するものであるが、 文脈を考慮するようにマップしなおされている。 CTRL-W_f(新しいウィンドウを開く)とCTRL-W_gf(新しいタブで開く)もまたマップしなおされている。

gfの使用例と、それらが何を開くか。(*はカーソルのポジションを表す)

Pos*t.find(:first)
app/models/post.rb

has_many :c*omments
app/models/comment.rb

link_to "Home", :controller => :bl*og
app/controllers/blog_controller.rb

<%= render :partial => 'sh*ared/sidebar' %>
app/views/shared/_sidebar.rhtml

<%= stylesheet_link_tag :scaf*fold %>
public/stylesheets/scaffold.css

class BlogController < Applica*tionController
app/controllers/application.rb

class ApplicationController < ActionCont*roller::Base
.../action_controller/base.rb

fixtures :pos*ts
test/fixtures/posts.yml

layout :pri*nt
app/views/layouts/print.rhtml

(In the Blog controller)
def li*st
app/views/blog/list.rhtml

2つのコマンド:Aと:Rが、以下に定義した「もうひとつ」と「関連する」ファイルへの素早い ジャンプに使われる。

:A, :AE, :AS, :AV, :AT

これらのコマンドはMichael Sharpeのa.vimを真似るために選ばれた。 簡単に言うと、それらは同じウィンドウ(:A, :AE)、新しいスプリットウィンドウ(:AS)、新しい 垂直スプリットウィンドウ(:AV)、または新しいタブ(:AT)で「もうひとつの」ファイルを編集する。 :Aへの実験的なマッピングは[fである。

:R, :RE, :RS, :RV, :RT

これらは上にあげた:Aとその仲間と同様であるが、「もうひとつの」ファイルよりも「関連する」ファイルへ ジャンプする。:Rへの実験的なマッピングは]fである。

「もうひとつの」ファイルとは、例外はあるがもっともよくあるのはテストファイルである。 「関連する」ファイルは異なり、ファイル中の現在の位置に時々依存する。 例えば、コントローラを編集しているとき、「関連する」ファイルとは現在編集している メソッドのテンプレートである。

これらのコマンドを学習するもっとも簡単な方法は体験することだ。 以下は「もうひとつの」ファイルと「関連する」ファイルのいくつかの例である。

現在のファイル 「もうひとつの」ファイル 「関連する」ファイル
モデル ユニットテスト 関連するマイグレーション
コントローラ(のメソッドの中) 機能テスト テンプレート(ビュー)
テンプレート(ビュー) ヘルパー コントローラ(メソッドに飛ぶ)
マイグレーション 前のマイグレーション 次のマイグレーション
config/routes.rb config/database.yml config/environment.rb

「もうひとつの」ファイル、「関連する」ファイル、カーソルの下のファイル のためのさらなる考えられた文脈の提案は歓迎だ。 それらはリリースからリリースへ巧妙に手を加えられる。

もっと一般的でないケースでは、より意図的なコマンドが提供されている。 以下のそれぞれは、オプションの引数(tabで補完)をとるが、Railsの慣習に従う 納得のいく推測がデフォルトになる。例えば、app/models/employee.rbを編集しているときは、 :Rcontrollerはデフォルトでapp/controller/employees_controller.rbになるだろう。 コントローラとモデルのオプションは、理想的にはrails-modelinesからのセットであるが、 modelに関連するファイルから、コントローラに関連するファイル(Rset controller=hiringや 逆(Rset model=employee)へのマッピングにオーバーライドすることができる。 :Rsetを見よ。

::Rmodel, :Rview, :Rcontroller, :Rmigration, :Robserver, :Rlayout, :Rhelper, :Rapi, :Rfixtures, :Runittest, :Rfunctionaltest, :Rintegrationtest

これらのコマンドのそれぞれは、スプリット、垂直スプリット、新しいタブで開く、への変形を持っている。:Rmodelには、それらの変形は:RSmodel, :RVmodel, :RTmodelとなる。また:Rmodelの同義として:REmodelもある。(将来のバージョンでは:Rmodelのふるまいのカスタマイズが出来るかもしれない)

最後に、上の全てとの結合で便利となる、あるVimの特徴CTRL-^がある。 このキーストロークは、前のファイルを編集し、上のコマンドのどれかから戻るのに助けになる。

スクリプトラッパー

以下のコマンドは、Railsアプリケーションのスクリプト・ディレクトリの中のスクリプト周りのラッパーである。 ほとんどはスクリプトを呼ぶことを越えた特徴を余分に持っている。 限定されているがtabでの補完もサポートされている。

:Rscript {script} {options}

ruby script/{script} {options}を呼ぶ。

:Rbreakpointer {options}, :Rconsole {options}

適切なスクリプトを呼ぶ。Windowsでは、これらは!startでバックグラウンドで実行される。 ターミナルでは、もしGNU Screenが動いていてg:rails_gnu_screenがセットされているなら、 それが使われる。

:Rrunner {code}

script/runnerで{code}を実行する。codeがひとつの引数として渡される:Rscript runner {code}とは 異なっている。また、system()が:!の代わりに使われる。これはいまいましい"Press ENTER"プロンプト を取り除くのを助ける。

:Rp {code}

:Rrunnerと似ているが、結果でRubyのpメソッドを呼ぶ。文字どおり"begin p {code} end"。

:Rgenerate {options}

script/generate {options}を呼び、生成された初めのファイルを編集する。 g:rails_subversionに関係する。

:Rdestroy {options}

script/destroy {options}を呼ぶ。g:rails_subversionに関係する。

:Rplugin {options}

script/plugin {options}を呼ぶ。g:rails_subversionに関係する。

:Rserver {options}

script/server {options}をバックグランドで起動する。Win32では、これは!startを意味する。 ほかのシステムでは、これは--daemonオプションを使う。

:Rserver! {options}

:Rserverと同じであるが、まず同じポートを使っている他のサーバをkillすることを試みる。 Windowsではないシステムでは、これをするためにlsofがインストールされていなければならない。

部分抽出

:Rpartialコマンドは新しいファイルにpartialを抽出するために使うことができる。

:[range]Rpartial [{controller}/]{name}

{name}パーシャルを[range]の行から作成する。(デフォルトは現在のライン)

もしあなたのファイルのapp/views/blogs/show.rhtmlがこれだとすると、

  1	<div>
  2	  <h2><%= @post.title %></h2>
  3	  <p><%= @post.body %></p>
  4	</div>

あなたはこのコマンドを実行する。

	:2,3Rpartial post

あなたのファイルはこのように変わるだろう。

  1	<div>
  2	  <%= render :partial => 'post' %>
  3	</div>

そしてapp/views/blog/_post.rhtmlが今これを含んでいるだろう。

  1	<h2><%= post.title %></h2>
  2	<p><%= post.body %></p>

特別なケースとして、もしファイルがこのように見えたら、

  1     <% for object in @posts -%>
  2	  <h2><%= object.title %></h2>
  3	  <p><%= object.body %></p>
  4	<% end -%>

結果はこのようになる。

  1     <%= render :partial => 'post', :collection => @posts %>

抽出するものを選択するもっとも簡単な方法は、linewise-visualモードを使うことだ。 単純に

	:'<,'>Rpartial blog/post

で足りるだろう。(この例のコントローラ名の使い方に注意)

プラグインの統合

:Rproject [{file}]

このコマンドは、projectプラグインがインストールされているときにだけ提供される。 :Project(普通引数なし)を呼び、現在のRailsアプリケーションのルートを探す。 もし見付からなかったら、適切なディレクトリ(appなど。vendorは含まない)と一緒に 新しいプロジェクトを作成する。

:Rproject! [{file}]

:Rprojectと同じであるが、もしプロジェクトが存在するならそれを削除し、作りなおす。 古いプロジェクトを削除するロジックは絡み合っていて、多分間違いがある。rails-plugin-authorに どんな問題も報告してほしい。便利なマッピングは以下のようになるだろう。

autocmd User Rails* map <buffer> <F6> :Rproject!|silent w<CR>

特別に、このコマンドは簡単なナビゲーションのためにビューをわかれたディレクトリに組織化する。 このマイナス面は、あなたがもうひとつのディレクトリを追加するときは毎回プロジェクトを 再生成しなければならないだろうことだ。(これがこのコマンドがプロジェクトを毎回 作りなおす理由だ!)

:Rdbext [{environment}]

このコマンドはdbextプラグインがインストールされている時だけ提供される。 {environment}の設定(デフォルトでは$RAILS_ENVかdevelopment)をconfig/database.ymlから 読み、dbextを設定するためにそれを使う。設定は異なるRailsアプリケーションが編集されるまで キャッシュされる。このコマンドは、g:rails_dbextがセットされているとき(Windowsでないシステムではデフォルトでon) あなたのために自動的に呼ばれる。

:Rdbext! [{environment}]

上のようにデータベースの設定を読み込み、それからそのためのCREATE DATABASEを試みる。 これはおもにデモンストレーションに便利である。

このプラグインは、もしCream(Vimをバックエンドとして使うユーザフレンドリーなエディタ)で 動いているならいくつかの追加的なキーバインドを提供する。 Ctrl+Enterはカーソルの下のファイルを探し(railsのgfのように)、Alt+[とAlt+]は 「もうひとつの」ファイルと「関連する」ファイルを探す。GUIのメニューもあり、 これはCreamとGVim両方から利用できる。

ABBREVIATION

abbreviationはまだ実験段階である。それらはあとで他のプラグインにわけられるか、完全に削除されるだろう。

:Rabbrev

Railsのすべてのabbreviationをリスト化する。

:Rabbrev {abbr} {expn} [{extra}]

新しいRailsのabbreviationを定義する。{extra}は、{expn}が"("でで終わっているときに限り許される。

:Rabbrev! {abbr}

abbreviationを削除する。

Railsのabbreviationは、C-](i_CTRL-]を見よ)かTabの後でだけ展開される点で普通のabbreviationとは異なっている (もしTabでうまく動かないなら、他のプラグインによってマッピングされているのだろう)。 もしabbreviationがある句読点で終わるなら、追加的な拡張が実行できる。 いくつかの例が望むらくはこれを解決するだろう。 (以下のすべては、適切なファイルタイプにおいてデフォルトで有効になっている)

Command Sequence typed Resulting text
Rabbrev rp( render :partial\ => rp( render(:partial =>
Rabbrev rp( render :partial\ => rp<Tab> render :partial =>
Rabbrev vs( validates_size_of vs( validates_size_of(
Rabbrev pa[ params pa[:id] params[:id]
Rabbrev pa[ params pa<C-]> params
Rabbrev pa[ params pa.inspect params.inspect
Rabbrev AR:: ActionRecord AR::Base ActiveRecord::Base
Rabbrev :a :action\ =>\ render :a<Tab> render :action =>

端的に言えば、::は:で展開され、(は(で、[は.と[のとき展開される。 これらのひきずる句読点は、最終的なabbreviationの部分ではなく、 句読点についてだけ異なっている2つのマッピングをもつことはできない。

あなたはあなたの展開の中でスペースを"\ "または<Space>としてエスケープしなければならない。 (で終わるabbreviationにとって、あなたは展開を(エスケープされないスペースで分割された)2つの部分に 分割することによって括弧をどこに挿入するべきかを定義するかもしれない。

多くのabbreviationはデフォルトで提供されている。それらを一覧するためには:Rabbrevを使う。 それはらファイルのタイプに依存して変わる(モデルはコントローラとは異なるabbreviationを持つ)。 ある賢いabbreviationがある。:cがそれで、文脈に応じて":controller => "か":conditions => "に展開される。

設定

とても少ない設定が実際に必要とされている。このプラグインは自動的にあなたのRailsアプリケーションを 探し、Vimを調節する。

もしあなたがあなた自身でカスタマイズしたVimの設定をRailsのファイルがロードされたときにいつも セットしたいなら、vimrcで以下のようにautocommandを使うことが出来る。

autocmd User Rails*		silent! Rlcd
autocmd User Rails*		map <buffer> <F9> :Rake<CR>

あなたはあるタイプのファイルにだけ適用されるautocommandを持つことも出来る。 これらはstatusline(statuslineの項目を見よ)でピリオドに変わったハイフンと一緒に 表示されている情報に基づいている。いくつかの例。

autocmd User Rails.controller*	iabbr <buffer> wsn wsdl_service_name
autocmd User Rails.model.arb*	iabbr <buffer> vfo validates_format_of
autocmd User Rails.view*rhtml*  imap  <buffer> <C-Z> <%=  %><C-O>3h

すべてのRailsのautocommandは、たとえあなたが正確な仕様を持っていてもアスタリスクで終わる。 ファイル名にマッチするシンタックスもある。

autocmd User Rails*/db/schema.rb Rset task=db:schema:dump

以下の冗長な例のように2つの形を結合することもできる。

autocmd User Rails.helper*/app/helpers/*_helper.rb ...

可能ならファイルタイプに基づいたシンタックスを使い、より発展的なケースのためにファイル名に基づいた シンタックスはとっておくこと。

もしあなたがはっきりとしたプロジェクトに特化した設定を持っているなら、 それらはアプリケーションのルートディレクトリの中にconfig/rails.vimファイルとして 置くことが出来る。 そのファイルは、セキュリティ上の理由でsandboxに供給されている。これはVim7かそれ以上で動く。

:Rset {option}[={value}]

ローカルオプションを問い合わせる、またはセットする。このコマンドはautocommandかconfig/rails.vimから 直接呼ばれるかもしれない。

オプションは4つのスコープのひとつでセットされるだろう。これはオプションのプレフィックスによって 識別される。これらのスコープは、どのくらい広くオプションが適用されるかを決定する。 一般に、デフォルトのスコープで十分である。

Scope Description
a: Railsアプリケーションのすべてのファイル
b: 特定のバッファ
g: すべてのアプリケーションに対してグローバル
l: メソッドに対してローカル(Rubyでないファイルでの:bと同じ)

オプションはそれらのデフォルトスコープと一緒に以下に示した。デフォルトスコープは省略できる。 あなたはプレフィックスでスコープをオーバーライドするかもしれないが、 これはほとんど必要にならず、しばしば無用である。 (例えば、g:taskを設定することは、rakeタスクがデフォルトでこのオプションを考慮する前に 適用されるだろうから無用である。

Option Meaning
b:alternate :Aのための「もうひとつの」ファイルのカスタム。Railsルートからの相対
b:controller あるコマンド(:Rhelperとか)のためのデフォルトのコントローラ
b:model あるコマンド(:Rfixturesとか)のためのデフォルトのモデル
l:preview :RpreviewのためのURLスタブ(例えばblog/show/1)
b:task :Rakeと一緒に使われるデフォルトのタスク
l:related :Rのための「関連する」ファイルのカスタム。Railsルートからの相対
a:root_url :RpreviewのようなコマンドのためのルートURL

例。

:Rset root_url=http://localhost:12345
:Rset related=app/views/blog/edit.rhtml preview=blog/edit/1
:Rset alternate=app/models/
:Rset l:task=preview        " Special pseudo-task for :Rake

最後の例のスコープのプレフィックスの使用に注意。

もしg:rails_modelinesが有効なら、これらのオプションはファイルの初めか終わりの近くで modelinesからセットさせることも出来る。 これらのmodelinesはいつもバッファローカルのオプションをセットする。スコープは決して指定されない。 例。

# Rset task=db:schema:load
<%# Rset alternate=app/views/layouts/application.rhtml %>

modelinesはメソッドに対してローカルに設定することもできる。例。

def test_comment
  # rset alternate=app/models/comment.rb

これら2つの形は、ケースによって異なる。

管理されたVimオプション

以下のオプションはプラグインがアクティブになっているところではバッファローカルにセットされる。

shiftwidth, sw, softtabstop, sts, expandtab, et

shiftwidth(とsofttabstop)とexpandtabには2が使われる。これはRailsでの強い慣習であり、 だからユーザの好みという習慣の知恵は無視された。

path, pa

あなたのアプリケーションから関連したすべてのディレクトリは、pathに追加される。 これは忘れたファイルへのアクセスを簡単にする。

:find blog_controller.rb
suffixesadd, sua

これはファイルタイプ依存であるが、典型的に.rbと.rhtmlといくつか他のものを含む。 これは上の例を短縮できる。

:find blog_controller
includeexpr, inex

includeexprオプションは、gfの項目で記述されたマジックを可能にするためにセットされる。

statusline, :stl

g:rails_statuslineが有効ならば、役に立つ情報がstatuslineに追加される。 このオプションは、副作用がないのが明らかなのでグローバルにセットされる。

makeprg, mp, errorformat, efm

Rakeはmakeprgとして使われるので、想像されている通り:makeでも動くだろう。 また、errorformatはあなたのテストを扱うために適切にセットされる。

filetype, ft

filetypeは、Railsのファイルのために時々調節される。もっと明白には、*.rxmlと*.rjsはRubyのファイルとして扱われ、Masonのソースとして間違って認識されたファイルは ERubyファイルに変更される(しかしそれらがRailsアプリケーションの一部であるときだけ)。

completefunc, cfu

completefuncが(すでにセットされていないなら)提供される。 それはかなりシンプルで、その推測をするためにシンタックスハイライトを使う。 i_CTRL-X_CTRL-Uを見よ。

balloonexpr, bexpr

もしriがインストールされているなら、balloonexprはそれを呼ぶためにセットアップされている。 それを使うために、balloonevalがセットされていなければならない。 詳細はballoon-evalを見よ。

グローバルな設定

いくつかのグローバル変数は、このプラグインのふるまいをコントロールする。 一般に、それらはあなたのvimrcで1をセットすることで有効になり、 0をセットすることで無効になる。

let g:rails_some_option=1
let g:rails_some_option=0

これらのほとんどは、けっして使われる必要はないだろう。興味深いかもしれないいくつかは、 g:rails_expensive, g:rails_subversionとg:rails_default_databaseである。

g:rails_level

let g:rails_level=3

これはロードされる特徴のレベルの一般的なコントロールである。 ふるまいは、ほかの設定であとで洗練することができる。 このオプションは削除候補になっている。もしこれをまだ使いたいなら、 rails-plugin-authorに連絡してほしい。

value meaning
-1 完全に利用不可にする
0 ユーザレベルのautocommandだけ
1 最小の特徴だけ。おもにオプションの管理
2 デフォルトから、マッピングやstatuslineのようないくつかナイスなものを引いたもの
3 デフォルト。 おそらく破壊的な要素をのぞいてすべてを含む
4 すべての普通の特徴を有効にする。推奨
5+ 実験的
g:loaded_rails
let g:loaded_rails=1

プラグインをノードしない。緊急のとき用。

g:rails_abbreviations

Railsのabbreviationを有効にする。ABBREVIATIONSの項目を見よ。 g:rails_levelが3以上の時有効となる。

g:rails_dbext
let g:rails_dbext=1

もしdbextプラグインがインストールされているなら、それとの統合を有効にする。 g:rails_expensiveの値がデフォルトになる。 このオプションがセットされているとき、dbextの設定は自動的にconfig/database.ymlから抽出される。 それから、あなたはテーブル名の補完や、以下のコマンドのような特徴を使うことが出来る。

:Create database brablog_development
:Select * from posts where title like '%Denmark%'

dbextは複雑なプラグインで、さらに設定が必要になるかもしれないことに注意せよ。 もしインストールされているならdbextと、それからsql-completion-dynamic(vim7の中)のヘルプを見よ。

g:rails_defalut_file
let g:rails_default_file='config/database.yml'

新しいRailsアプリケーションが作られたときロードするファイル。デフォルトはREADMEになっている。

g:rails_devalut_database
let g:rails_devalut_database='sqlite3'

新しいアプリケーションで使うデータベース。デフォルトはRailsに決めさせる。

g:rails_expensive
let g:rails_expensive=1

高価な(slow)特徴(典型的に、Rubyのインタプリタを呼ぶ)を有効、無効にする。 適度に早いコンピュータにはおすすめ。 g:rails_levelが3以上(回部のプログラムが明らかに遅く走るwindowsでは4以上)。 windowsのユーザは、このオプションをONにし、パフォーマンスが受け入れられるものかどうかを 見ることを奨励する。

g:rails_gnu_screen
let g:rails_gnu_screen=1

:Rbreakpointer, :Rconsole, :Rserverをバックグラウンドで立ち上げるために、 (もし動いているなら)GNU Screenを使う。デフォルトで有効。

g:rails_mappings
let g:rails_mappings=1

いくつかのマッピング(ほとんどはナビゲーション)を有効にする。g:rails_levelが3以上のとき有効。

g:rails_modelines
let g:rails_modelines=1

以下のようにmodelinesを有効にする。

# Rset task=db:schema:load

modelinesは:Rsetコマンドを使ってバッファローカルのオプションをセットする。 また、メソッドに特化したmodelinesを有効にする。

def show
  # rset preview=blog/show/1

modelinesは非常に便利であるが、信用できないソースからプロジェクトを編集するときは セキュリティ上の問題を引き起こすかもしれない。 g:rails_levelが3以上で有効になる。

g:rails_menu
let g:rails_menu=1

2のとき、Railsメニューが作られる。1のとき、このメニューはPluginメニューの下のサブメニューになる。 デフォルトは0, 1, 2で、これはg:rails_levelが3より小さいか、等しいか、大きいかに依存する。

g:rails_url
let g:rails_url='http://localhost:3000'

:Rpreviewコマンドで使われる。デフォルトは上に示したものである。 b:rails_urlでオーバーライドされる。

g:rails_statusline
let g:rails_statusline=1

プラグインが有効になっているとき、ステータスラインにその手がかりを与える。 g:rails_levelが3以上のとき有効。

g:rails_subversion
let g:rails_subversion=1

:Rgenerateと:Rdestroy(:Rscriptではダメ)のようなコマンドのために、 subversionのリポジトリに自動的にファイルを追加、削除する。 アプリケーションがsubversionのリポジトリの部分でない場合は無視する。 g:rails_levelが4以上で有効。

g:rails_syntax
let g:rails_syntax=1

有効の時、これはよりRailsフレンドリーになるようにシンタックスハイライトを調節する。 g:rails_levelが2以上で有効。

g:rails_syntaxが有効の時、あなたはRubyのファイルがすこしシアンが強い(か、あなたの識別子がハイライトされる) と気づくかもしれない。ft-ruby-syntaxで説明されているように、g:ruby_no_identifiersを有効にしたいかもしれない。

g:rails_tabstop
let g:rails_tabstop=4

これは、shiftwidthのデフォルトが2であることを嫌う人々のためのオプションである。 0でないとき、すべてのファイルはロードされたときに、 最初にあるインデントをスペースからタブに変換するためにtabstop=2で:retab !されるだろう。 それから、tabstopとshiftwidthはオプションの値にセットされるだろう。 この処理は書き込みの時に逆のことをする。 そういうわけで、編集中はカスタムインデントを使い、しかしセーブするときはRailsの慣習に従う。 このオプションのローカルバッファバージョンもあり、次のようなことを可能にする。

autocmd User Rails* if &ft == 'ruby' | let b:rails_tabstop = 4 | endif

このオプションはデフォルトでは0で、推奨する値である。

もし全てのこのマジックの代わりにこのプラグインの設定をオーバーライドし、あなた自身の カスタムshiftwidthを使うことを好むならば、autocommandで手動で調節する。

autocmd User Rails* set sw=4 sts=4 noet

これには大変がっかりだ。Railsと闘うのはよすんだ。

ABOUT

このプラグインはTim Popeによって書かれた。彼にメールするにはvimNOSPAM at tpope.info(atを@に読み変えてください)へ。 彼はFreenodeのIRCネットワークでも見付けることが出来る。 #rubyonrailsと#vimでtpopeとしてそこにいる。

最新の安定バージョンはhttp://www.vim.org/scripts/script.php?script_id=1567で見付けることが出来る。 Vim 7.0では、GetLatestVimScriptsで最新に保つことが出来る。

開発バージョンは以下のURLで見付けことができる。

1つめのはvim7.0のためのvimballだ。3つめはsubversionのリポジトリで、 もっとも最新の特徴とバグを含んでいる。

このプラグインへのフィードバックを求む。すべてのコメントと、苦情と、作者への賛辞を送ってほしい。

このプラグインはVim自身と同じ条件のもとで配布されている。licenseを見よ。 No warranties, expressed or implied.

vimで代入文を=でそろえる for Ruby, Perl October 17, 2005 02:21

Align.vimっていう、ここに載せたものより高機能なスクリプトがあります。

代入文がたくさん並んでると、なんか見にくいですよね。

     @close_listeners = []
     tool_bar = Gtk::HBox.new
     @label_title = Gtk::Label.new
     @btn_close = Gtk::Button.new('X')
     @moz = Gtk::MozEmbed.new

以下のようになったら見やすいよね? 

     @close_listeners = []
     tool_bar         = Gtk::HBox.new
     @label_title     = Gtk::Label.new
     @btn_close       = Gtk::Button.new('X')
     @moz             = Gtk::MozEmbed.new

viについてちょっと調べものをしていたら ヽ( ・∀・)ノきゅまきゅまーさんのところで この話がされているのが検索でひっかかって、興味津津。

Emacsについてはコメント欄にリンクが張ってあるんですが、 vimについてはインデントのためのRubyのコードを書いて vimから呼び出すと できてしまうらしい。おおおっ!

まーこういうスタイルの問題は、必ず「こういうの嫌い」って言う人が出てくるもんだけど (オレも以前Cでこのスタイルを見た時は好きではなかった)、 オレは少なくとも上の例については後者の方が見やすく感じるんです。

で、いろいろごにょってみたら、大体挙動がわかった。vimで範囲選択(13,15とか)して 外部のプログラムに渡す(:13,15 !ruby a.rb)と、プログラムでは範囲選択した部分を標準入力から読めると。 そして標準出力に吐き出すとそれがvimの範囲選択した部分とすりかわるみたい。

うむ。ならいっそのことコメントもそろえたらキレイなんジャマイカ?

@nulpo = "ga" #comment
@giko = :neko#aa
@mona = :nida
@nukedo = vs_kuma(3, 4) # func

これは汚い!(わざとw (ノ∀`)

で、作ってみた。

#!/usr/bin/env ruby

src = ARGF.read
l_max = r_max = 0

src.scan(/^\s*(.+?)\s*=\s*([^#]+?)\s*(#.*)?$/) do
  l_max = [l_max, $1.length].max
  r_max = [r_max, $2.length].max
end

src.gsub!(/^(\s*)(.+?)\s*=\s*([^#]+?)\s*(#.*)?$/) do
  if $4.nil?
    "%s%-#{l_max}s = %s" % [$1, $2, $3]
  else
    "%s%-#{l_max}s = %-#{r_max}s %s" % [$1, $2, $3, $4]
  end
end

print src

これをindent-equal.rbと名付けて実行権限を与えてパスの通ったところに配置。

そして~/.vimrcに、

au FileType ruby map + : !indent-equal.rb

としてみた。 これはrubyのファイルを開いたときには、indent-equal.rbの実行が+にマップされる。 なんで、Vを使ってビジュアルモードで複数行選択して+を押すと

:`<,`> !indent-equal.rb

と出るのでEnter or Ctrl-m。

すると……

@nulpo  = "ga"          #comment
@giko   = :neko         #aa
@mona   = :nida
@nukedo = vs_kuma(3, 4) # func

キタ━━━━━━(゜∀゜)━━━━━━ !!!!!

+を押して適用するには、なんかVで選択しないとダメみたい。:13,15+とやっても「コマンドじゃない」と怒られた……。

ちなみにこのプログラムはRubyの代入文を整理するために作ったけど、 Perlでも多分いけます。以下はオレにとっては懐かしい、このブログのコードの一部……。

    my $query = new CGI();
    my $id = $query->param('id') || 'toppage'; # top page's id is 'toppage'
    my $nmz = defined $query->param('query') ? 1 : 0;  # namazu flag
    my $query = new CGI();
    my $id    = $query->param('id') || 'toppage';       # top page's id is 'toppage'
    my $nmz   = defined $query->param('query') ? 1 : 0; # namazu flag

Perlのごちゃごちゃ感がとたんに薄らいだ感じ。