while ("im the true Vim master");

2008-07-22

Re: 開発時のvimの使い方 - dann@webdev - dannグループ

| 20:33

色んな流儀があると思うんだけど、他の人はどんな風に使ってるのかなぁ。

開発時のvimの使い方 - dann's blog - #
  • 作業内容毎にタブページを作成する。状況にもよるが、基本的には以下のような感じ:
  • 特定のファイル郡を集中的に編集する場合は:args {file} ...でまとめて開いておき、:next/:previousで切り替える(実際には専用のkey mappingsを使う)。参考: :help argument-list
  • タブページ毎にカレントディレクトリを設定しておく。タブページを切り替えるとカレントディレクトリも自動的に切り替わる。
  • バッファやファイルを開くときはkuを使う*2。前述のタブページ毎カレントディレクトリと合わさって、入力の手間は結構減る。
    • 本当に頻繁に編集するファイルならば大文字のマークでブックマークしておく(:help :marks)。ただ大抵の場合はどこかのタブページに開きっぱなしにしているので、使うとしたらVim起動時ぐらいである。
  • シェルに降りて作業する場合はGNU screenの作業用ウィンドウに切り替えて行う。ただしこれは擬似:suspendで行う。これの真価は前述のタブページ毎カレントディレクトリと組み合わせることで発揮される。

Vimは一度起動したらシステムのシャットダウンか余程大胆にVimの設定を変更した場合でないと終了しません。複数個Vimを起動することはほとんどありません。ただないことはないので、CUI版でも複数の端末から同一のVimプロセスを操作できるようにしたいということは稀にあります(解決案はあるにはあるけど面倒なので手をつけていない)。


scheme/git.vim

| 15:06

先程のmetarw.vim (仮)の{scheme}ネタとしては、

" git show HEAD相当。最近の変更点のdiffを表示。
edit git:HEAD

" git show HEAD~2相当。最新版とその2個前のdiffを表示。
edit git:HEAD~2

" ブランチtopic/fooのsrc/ui.cを表示。
edit git:topic/foo:src/ui.c

" ブランチtopic/fooの内容をnetrwライクにブラウジング。
edit git:topic/foo:

というのを思いついた。さすがにこれは:writeできても困るのでread onlyにする予定。

番外編としては、

" ブランチtopic/fooに切り替え。
cd git:topic/foo

というのを思いついたけど、これはどうだろう(この手の処理をフックできたかどうか的な意味も含む)。


自動的に機能が強化されるプラグイン

| 15:05

普通、:editはファイルしか開けないが、実は

:edit http://www.vim.org/

のようなURIをあたかもファイルであるかのように開ける。URIだけでなくディレクトリも開ける。これは標準添付のプラグインnetrwがBufReadCmdなどを利用して、ありえないファイルに対する読み込みや書き込みの挙動をオーバーライドしているからだ(Vim7以降の話。Vim6までは、ローカルのディレクトリに対するこの手のインターフェースはnetrwとは別のプラグインが提供していたが、Vim7でnetrwに統合された)。

ただこれには問題がある。:editがあらゆる架空のファイルを開くことができるように拡張することはできても、:editの引数の補完までは拡張できない。

という訳で、:editの代替コマンドとして:Editを作ってはどうだろうかと思った。基本は:editと同じだが、以下の点が異なる:

  • 先頭が"{scheme}:"である引数を開く場合、scheme#{scheme}#read()を用いて内容を取得する(:Editに対する:Writeを作るのであればscheme#{scheme}#write()で保存を行う)。
  • 先頭が"{shceme}:"である引数を補完する場合、scheme#{scheme}#complete()を用いて補完を行う(:help :command-complete)。
  • それ以外の場合は-complete=file相当の補完を行う(ただこの手の補完処理はVim scriptレベルに関数として公開されていない。v:command_complete_file()のような形で使えれば便利なので、この点については今度パッチを書いてvim_devにポストする予定)。
  • (利用可能な{scheme}の補完ができると便利だとは思ったけれど、どのタイミング・条件で補完するか良いアイデアが出てこないので保留)。

利用可能な{scheme}は'runtimepath'とglobpath()とmap()ですぐに求まる。ユーザーは特に何も設定せずとも、~/.vim/autoload/scheme/以下に:Edit拡張スクリプト{scheme}.vimを置くだけでいい。スクリプトを書く側からすれば、:Editと{scheme}.vimの間に密なやりとりはほとんどないため、{scheme}.vim本来の仕事に注力できる。

ただここまで書いたのは良いけれど:

  • 既に類似した考えのプラグインはあるのだろうか? vcscommandは一々VCSCommandRegisterModule()を呼ばなければならないし、プラグインのロード順序にも気をつける必要が>あるので、上記と全く同じとは言えないと考えている。
  • 上記のような:Edit (と:Write)を提供するプラグインを作ろうかと思ったけれど、良い名前が思い浮かばないので募集中。scheme.vimにしてしまうとLisp的な意味でのSchemeに誤解されてしまう。metascheme.vimもなんだかmetalua的な匂いがして駄目。安直にaltedit.vimだのyaedit.vimだのとすると:Writeの居場所がない感じがしてしまう。取り敢えずnetrwに合わせてmetarw.vim (仮)とする。

なお、このアイデア自体はku 0.1.0で試してる。まだろくにsource (ここでいう{scheme}に相当するもの)を書いていないのでアレですが(これ自体は昔に書いたbuffuzzyの焼き直しの焼き直しの作り直し)。sourcesのsourceという半分ネタ半分実用の代物も考えたけど、やはりsourceの数がある程度ないと意味がないという。


VimM#1 まとめ

| 13:27

発表

  1. id:Hash - はじめに / Vim初心者++
  2. id:taku-o - ライブラリスクリプトを利用したVimエディタプラグインの構築
  3. id:moira (@mootoh) - 私はなぜ10年間Vimを使い続けているのか
  4. id:suztomo - その一方で僕はなぜEmacsに乗り換えてしまったのか
  5. id:ujihisaさん- うわさのvim勉強会のひとです
  6. id:kei-os2007 - Vimスクリプトマスターへの道(?) (BrainF*ck実装編) / Vimperator話

参加者

ID形態レポート
a_matsudano title
id:beatinaniwa
id:bonar
id:bsheep
id:cimadai
id:fc2member
id:from_kyushu聞(Ust)
@gjo聞(Ust)
id:guyon第1回VimM勉強会に参加した - Guyon Diary
id:Hash
id:iR3
id:isikmk
id:jklryo
id:ka-nacht聞(Ust) VimM#1 まとめ - while ("im the true Vim master"); - vimグループ
id:kei-os2007第1回 VimM勉強会に参加した - kei-os2007 against the machine!!
kimurawVimM (Vim Movement) 行ってきた: きりかノート
id:kiris60
id:maedana
id:Malan
id:mickey24VimMに参加してきました - ぬいぐるみライフ?
id:misho
id:moiramain
@pnnc205j
id:poohtarou
@ryo7000聞(Ust)
@sekido2008-07-20: VimM#1 | Flickr
id:suztomoVimM行って決ました。 - suztomoの日記
id:syou6162VimMに参加してきた - yasuhisa's blog
id:taku-o VimM (Vim Movement) 2008/07/20 14:00 〜 感想 - サイト更新停滞ちうっ
@tkskkc聞(Ust)
id:Ubuntu
id:ujihisa話(Ust)ライブドアブログ(livedoor Blog)| 読みたいブログが見つかる
id:wakuteka
id:yuiseki
id:yuzuharaゆずはらさんのツイート: "VimMこんなに濃いとは思わなかったー これはすごいw"
id:zenpou

次回参加者(見込み)


Re: VimM (Vim Movement) 2008/07/20 14:00 ~ 感想 - サイト更新停滞ちうっ

08:11

ライブラリスクリプトは現状あまり使われてないけど、多分、そのうち多用されはじめるから、

VimM (Vim Movement) 2008/07/20 14:00 〜 感想 - サイト更新停滞ちうっ

textobj-userをよろしくね! (宣伝)

*1:注: Vimはタブページを1番から数えるが、私はGNU screenのスタイルに合わせて0番から数えるようにしている。'tabline'の表示や切り替え用key mappingsは0番から始めるように設定されている。

*2:未だにフィジーファインダーは使っていない。

最近のコメント
あわせて読みたいブログパーツ
AX