TIM Labs

2011年4月アーカイブ

問題

八百万あるVimのコマンドで特に有用なもののひとつとして gf があります。 このコマンドはカーソル下にあるファイル名らしき文字列を探し、 該当するファイルがあればそれを開くというものです。

gf はカーソル下にあるファイル名らしき文字列をそのまま使うだけでなく、 特定のディレクトリ下にあるかどうか検索(例えばC言語でなら /usr/include./include を検索)したり、 特定の拡張子を付加して検索(例えばJavaなら SomeClass のファイル名は SomeClass.java なので、 .java を付加して検索)することができ、 そこそこ賢く動いてくれます。

さて、日常的に git を使っている身としては 日常的に git diff の出力を眺める機会も多いです。 「git diff の出力を眺めて変更のあったファイルを開く」ということも頻繁に行います。 これには gf を使えばよいと思うことでしょう。

ところが深遠なる事情により git diff の出力フォーマットでは変更のあったパスにプレフィックスとして a/b/ が付加されます。 例えば master/Foo.cs の変更を含む git diff の出力には a/master/Foo.csb/master/Foo.cs といった名前が含まれます。 a/master/Foo.csb/master/Foo.cs の上で gf を実行しても該当するファイルは存在しないためエラーとなってしまいます。 これは不便です。

一応、ビジュアルモードで a/b/ を含まないよう範囲選択をして gf を実行すれば、 選択範囲のファイル名に該当するファイルを開くことができます。 しかしいちいち範囲選択をするのも面倒な話です。

どうにかして git diff 固有の出力フォーマットでも gf で適切なファイルを開きたいところです。 しかしどうすればよいでしょうか。

このエントリーは新卒準備カレンダー 2011春 の4/14分です。 @masa_nakaさんからバトンもらいました。
4月に入っているのですでに社会人としてスタートした人向けな感じで。

問題

Vimではデフォルトで 500種類以上の言語をシンタックスハイライト することができます。 また、シンタックスハイライト以外の設定も充実しており、 デフォルトでは 約100種類の言語で専用の自動インデント が行われるようになっています。

この約100種類は普段使用する範囲ならば何の問題もないのですが、 人口比率の少ない言語で何かを書こうとしたら デフォルトでは専用インデント設定がなかったというケースは案外あります。 文法がC系の言語であれば 'smartindent' で誤魔化すことができるのですが、 人口比率が少ない言語は大抵の場合 'smartindent' が使えない言語です。

という訳で独自の自動インデントの設定を書く必要が出てきました。 しかしどう書けばよいのでしょうか。

「本当のドキュメントと向き合えますか」というタイトルで qpstudy で話してきました。
3分LT という超短い時間だったので駆け足での発表になりましたが、
インフラエンジニアの方もドキュメントは悩みの種なのか、blockdiag を気に入ってくれた方がいるようです。

また、この発表に合わせて作った netdiag も悪い感触ではなかったようなので、
これから作り込んでいこうかと思います。


え、SSH通るんならscp使えばいいじゃん。

YES、その通り。

しかし、「大容量ファイルを転送中に接続が切れてしまった」なんてときに、コピーが完了した後から残りを引き継ぎたい、みたいな要求にはscpコマンドは答えてくれない。もちろん、sftp使えばレジューム機能もあるんだしそうすればいいじゃんというのは正論だが、sftpの方はsshが通るからといって必ずしも使えるとは限らない。

そんなときは、多少強引だとしても、一歩戻って解決を試みるのもひとつの手だ。

Mercurialはmercurialでpush済みの名前付きブランチをリネームする三つの方法の記事にあるように一度作成したものはすべて記録するという設計なので、確かにGitのように表題のAPIは提供されていません。
しかし、本質的には単純にファイルを書き換えているだけなので、pushしていないローカルの環境では、ブランチ名を変更したりブランチを削除することは簡単にできます。 MQ拡張によりパッチ化することでこれらを実現していきます。

問題

醜く表示されたJavaScriptコード

このアーカイブについて

このページには、2011年4月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2011年3月です。

次のアーカイブは2011年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。