Home

Vim-users.jp

Hack #225: VimからURLを開く

問題

Vimで文書を開いているとしばしばURLが記載されていて、 その度にURLをクリップボードにヤンクしてブラウザのアドレスバーにペーストして…と、とても面倒です。 ファイルパスならgf<C-w>fで開けますが、 URLを開くマッピングは用意されていません。 どうすればいいでしょうか。

解決

open-browser.vimを使います。 まずプラグインをインストールし、次の設定を.vimrcに書きます。

let g:netrw_nogx = 1 " disable netrw's gx mapping.
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)

そしてURLの上にカーソルをのせてgxをタイプするとそのURLをブラウザで開けます。 またgxが思った通りのURLを開いてくれない場合、ヴィジュアルモードでそのURLを選択してからgxをタイプすると選択した通りのURLが開けます。 詳しくは:help open-browserを参照してください。

tyru

Hack #224: Vim Hacks に記事を投稿する

平素は vim-users.jp および Vim Hacks をご覧いただき、まことにありがとうございます。ご存知の方もいるかと思いますが、現在 Vim Hacks Project は執筆者陣が自宅サーバのメンテナンスもままならないほど多忙なため、記事の更新が滞っています。

ところで、Vim Hacks の記事を見ていて、次のように思ったことはないでしょうか。

  • 自分の知っているVimの小ネタを披露したい!
  • 自作または愛用のプラグインを布教したい!
  • Vim Hacksに記事を書いてVimユーザの役に立ちたい!
  • 何でもいいから記事を書いて目立ちたい!

Vim Hacks Project では、執筆者を常に募集しています。定期的に書くのは無理な場合でも、ゲスト扱いで1度だけ書くことも可能です。今回は、Vim Hacks に記事を書くための手順を紹介します。

  1. 何について書くか決める

    記事を書くのですから、まずは何について書くのかを決める必要があります。 内容は、Vim に関係のあることで、読んだ人が幸せになるであろうことです。 あまり難しく考えることはありません。

    既出の場合もあるので、過去の記事も参考にしてみてください。 既出かどうか確認が面倒な場合は、執筆者に聞いてください。

    ちなみに、自信があるならば内容は後で考えても構いません。

  2. 執筆者に連絡を取る

    書くことが決まったら、執筆者の誰かに連絡を取って記事を書きたい旨を伝えます。 Twitter やメールで直接連絡を取ってもいいですし、チャットルーム で宣言しても構いません。 執筆者陣は新しい執筆者に飢えているので、拒否されることはまずありません。気軽に声をかけてください。

    公開日をいつにするかなどはこの辺りで決めることになります。希望がある場合は言ってもらえれば大体通ります。

    現時点での執筆者とその主な連絡先は、この記事の最後にまとめてあります。

  3. vim-users.jp にログインする

    vim-users.jp は OpenID を使って誰でもログイン可能です。面倒なアカウントの発行などはありません。 代わりに、OpenID を用意してください。

  4. 執筆する

    執筆ガイドラインに従って記事を書きます。守るべきことは、以下のことです。

    • ポストする記事にはタグ「Vim Hacks」を付けてください。
    • 難易度別に応じてタグ「lv1」「lv2」「lv3」を付けてください。
      • ポストする人の主観で付けてください。
    • カテゴリー「Vim Hacks」にチェックを入れてください。
    • パーマリンクの末尾はhackNにしてください。Nは数字です。例えばHack #1の場合はhack1です。
      • 特にリンクは後からの変更がきかないので注意してください。合っているか不安な場合は他の執筆者に確認してもらってください。
    • ポストする記事は下書き保存しておき、00:00に自動公開するよう設定してください。
  5. 公開される

    おめでとうございます!これであなたも Vim Hacks Author です。 もしよければ、次に投稿する記事の内容を考えましょう。

現在の執筆者一覧

thinca

Vimテクニックバイブル紹介(Shougo版)

この記事について

この記事は、開発環境勉強会における「Vimテクニックバイブル」紹介スライドの完全版です。 「Vimテクニックバイブル」については、taku_oさんやmattnさんなども記事を書いていますが、 私の場合はできるだけ本の内容に触れたものにしています。 これを読んでVimテクニックバイブルを購入していただける人が増えれば、著者達にとって最高の喜びです。

Vimテクニックバイブルができた背景

以前にもブログの記事で触れていますが、Vim界には良質な記事や書籍が不足しています。 特に、まともにVim scriptを書ける人が書いた書籍がほとんどありません。 これはVim界の大きな損失であり、Vim scriptプログラマーが育たない大きな原因となっています。 私がVim勉強会に参加すると、必ずといっていいほど聞かれるのが 「Shougoさんは、Vimの書籍を書かないんですか?」ということです。 この声になかなか答えられないのは悲しいものがありました。

Vimテクニックバイブル

と、いうことで……今年ついにVimの書籍が刊行されます! 書名は「Vimテクニックバイブル」です。 中身は「Emacsテクニックバイブル」のVim版となっており、イメージカラーは当然Vimグリーンです。 そういえば、EmacsテクニックバイブルはEmacsブルー(パープル)でしたね。 キャッチコピーは、「unite.vimで進化する新しいVimの常識を教えます。あなたはVimの本当の姿を知っていますか?」 Emacsテクニックバイブルとは違い、unite.vimを全面に押し出しています。

執筆者紹介

執筆陣はかなり豪華です。おそらく、これだけの人達が一冊の書籍を作るために集まることはもうないでしょう。

taku_o

人気サイト「名無しのVim使い」の管理人です。雑誌にVimの記事を執筆したことがあります。 サイトで紹介しているだけあって、様々なプラグインについて、かなりの知見を持っています。

yukimi

章の基礎知識や用語の統一など、細かいところで手伝ってもらっています。Vim使いです。

mattn

webapi-vimやzencoding.vimの作者です。他にも細かなプラグインを作っています。 KaoriYaさんと同じく、昔からVimにパッチを多数送っており、Vimの内部実装や黒魔術に詳しいです。

thinca

quickrunやref.vim, scouter.vimなどの作者です。unite.vimのsourceやvital.vim, eskk.vimなどにも関わっています。 Vim scriptにかなり詳しいです。

fuenor

QFixHowm, QFixGrep, JPFormat.vimの作者で、Vim-UTF8を配布しています。 Windows環境での日本語の扱いについて詳しいです。

Shougo

neocomplcache, vimshell, vimproc, unite.vim, vimfilerなどを作っています。 メンテナンスしているプラグインが多すぎて、なかなか時間が足りないのが悩みです。Vimは環境だと思っています。

内容紹介

もう執筆がほぼ終わっているため、中身は確定しています。プラグインの紹介を中心とした豪華な内容となるようにしました。 紹介しているプラグインは定番からマイナーまで幅広く、作者自ら解説していることもあります。 まだ発売まで期間があるため、詳しい目次を挙げることはできませんが、以下のような内容が含まれています。

vimfiler

vimfilerの使い方や、キーマッピング、マニアックなところではvimfilerを用いた拡張リネーム機能について解説しています。

netrw

netrwによる遠隔地ファイル編集、netrwによるブックマーク、netrwによるファイル操作が解説されています。

quickrun

quickrunの使い方、各種オプション、設定方法について解説されています。

ref.vim

ref.vimの使い方、各種sourceについて解説されています。

vimshell(インタプリタ通信機能を含む)

vimshellの使い方、よく使われる内部コマンド、vimshellのインタプリタ通信機能を解説しています。 ちなみに、Emacsテクニックバイブルでは、eshellについて触れられていません。

Conque

Vimで端末を実現するプラグインであるConqueの使い方、vimshellとの違いについて解説しています。

skk.vim

SKKについて解説しています。eskk.vimも少しだけ書いてあります。それほどページはありません。

neocomplcache

neocomplcacheの使い方、設定方法、neocomplcacheのスニペット機能、スニペットの書き方、 neocomplcacheのsourceの作り方と、大変豪華な内容となっています。 以前Vim Hacksに書いた内容の完全版と言っても良いでしょう。

zencoding.vim

zencoding.vimの基本から、任意の言語への応用例まで挙げられています。

QFixHowm

QFixHowmの使い方、メモの作成方法、メモの検索、ToDo管理について解説されています。

QFixGrep

Windows環境のgrepの注意点についても解説されています。

JPFormat.vim

JPFormatによる日本語の整形方法について解説されています。

autodate.vim

webapi-vim

VimからWebサービスを扱う方法について解説されています。

project.vim

project.vimによるプロジェクト管理やproject.vimの設定方法について解説されています。

Vim scriptが分からない初心者でも安心!

Vimの設定や、Vim pluginについての解説を中心とした書籍となっていますが、 ある程度のVim scriptの知識は必要不可欠です。 そこで、次のような項目について解説しています。 これ以上の詳しい解説については、Vimのヘルプを参照してください。

:helpの読み方

Vimの:helpをすぐに引けるかどうかは、初心者と初級者を分ける大変重要なファクターとなっています。 この本では、Vimの:helpの使い方について解説しています。

Vim script基礎文法最速マスター(改訂版)

これは、thincaさんが以前ブログで書いていた「Vim script基礎文法最速マスター」の改訂版です。 Vim scriptについて一通り学ぶことができます。

マッピングについて

Vimのキーマッピングは大変ややこしいですが、詳しく解説しています。

オプションについて

Vimのオプションには落とし穴が多数あります。Vimのオプションにおける仕様について解説しています。

Vimプラグインの管理

Vimのプラグインをインストールするなら、パッケージマネージャは必要不可欠です。 定番のVundle, pathogenから、vimballに至るまで解説をしています。

テキストオブジェクト

最近のVimを語るにはなくてはならない機能です。 テキストオブジェクトの拡張についても触れられています。

QuickFix

grepやmakeには欠かせない機能です。

:autocmd

外部インタフェース

ちょっとレベルが高いですが、Perl, Pythonの外部インタフェースについて解説されています。

最近のVimといえば、unite.vimは外せないよね!

当然unite.vimについては、1つのChapterを贅沢に使用して解説しています。 Emacsテクニックバイブルはanything.elについて2つのChapterを使っているので、そちらよりは若干量が減ります。 それでも、30ページくらいはあるため、十分満足できると思います。 unite.vimの章では、次の内容を解説しています。 これを読めばあなたもunite.vimマスターに!

vimfiler, vimshellなどといった他のプラグインとの連携

unite.vimの有用なsource

カスタマイズ方法についての解説

unite.vimの各種オプションについて、解説しています。 マニアックなところでは、buffer-name-optionについての解説もあります。

source, kind, action, filterの解説

特にsourceを自作する場合、source, kind, action, filterの概念は重要です。それぞれの仕様について詳しく解説しています。 作者が自ら書いているため、情報が正確で安心です。

sourceの作り方まで載っている!

サンプルsourceの作り方が書いてあります。マニアックなところでは、非同期sourceの仕様についても書いています。

unite.vim Ver.2.2対応(一応)

一応最新版のunite.vimの仕様に準拠しています。残念ながら、あまりにも新しい機能は解説できていません。 不変的な情報に絞って解説しています。 現在開発中のunite.vim Ver.3.0について少しだけ触れています。

もちろん、Emacsの人達にもオススメ

EmacsテクニックバイブルがVimmerにも有用な本であったように、 当然VimテクニックバイブルはEmacsを使っている方々にもオススメです。 Emacsを使っている人も、異文化交流は重要です。 同じ環境で満足していたら、何も生まれません。 auto-complete.elもVimの補完機能を参考にしています。 つまり、Emacs使いであってもVimや他のエディタからも刺激を受けるべきなのです。 この本を読めば、最近のVimの機能やプラグインについて分かります。 例えば、unite.vimとanything.elの違いが分かります。 新人にVimを教えざるをえないときにも使えます。 さらに、一身上の理由により、Vimに乗り換えざるをえないときもVimテクニックバイブルの知識があれば安心ですね。

現在確定している情報

ページ数は384Pで、Emacsテクニックバイブルと同じです。 値段は¥2, 980+税です。基本的に技術書というのは、¥3000を越えると購入までのハードルが上がってしまいます。 ページをできるだけ減らしたこともあり、税抜きでなんとか¥3000は切ったのですが、若干Emacsテクニックバイブルより高くなってしまいました。 発売日は9月中旬予定ですが、詳しい日付けの確定はしていません。 目次については、八月中に確定する予定なので、九月には詳しい情報が出せるでしょう。 まだ発売まで時間があるので、しばらくお待ちください。

残念ながら載せられなかった内容

できるだけ、著名なプラグインは載せるように心がけましたが、 ページ数の都合やその他様々な理由により載せられなかったプラグインがあります。 ここではそれらについて紹介します。

VCSとの連携

VCSと連携できるプラグインとしては、git-vimやfugitive.vimがありますが、決定版と呼べるようなものがなかったためです。 vcs.vimが候補だったんですが、未完成でした。

shadow.vim

時間とページ数の都合が付きませんでした。

snipMate

neocomplcacheのスニペット機能で十分だったためです。解説する人もいませんでした。 ちなみに、snippetsEmuはページ数が足りませんでした。

echodoc

入れてもよかったんですが、他のTipsが削られすぎて入れる暇がありませんでした。

netrwについての詳しい解説

時間とページ数の都合がつきませんでした。 ただし、一部のTipsでnetrwの機能について触れられています。

metarw

使っている人があまりに少ないため削られました。metarwがやっていることは、vimfiler+unite.vimでできるようになる予定です。

vimprocの使い方について

書籍では簡単にvimprocについて触れていますが、さすがに詳しい解説はできませんでした。 想定読者にとっては難しすぎるからです。vimprocをバリバリ使えるような層では、Vim scriptから使い方を解読するのも簡単だと思います。

vital.vim

このプラグインは、プラグイン制作者のためのものです。この本の対象読者にはレベルが高すぎました。 それに、ページ数の余裕もありませんでした。

内容の陳腐化への懸念について

書籍は生物です。コンピュータに関する書籍は出たばかりのときに購入しておかないと、役に立つ前に時代遅れとなってしまうでしょう。 だからこの本が必要なら、発売されたらすぐに購入するのが適切です。特に、一度絶版になってしまったら取り返しがつきません。 本の売り上げが上がると、出版社に対するVimへの印象が良くなり、続編などが企画されるかもしれません:-)

特に私のプラグインは進化が早いため、本が出たらすぐに時代遅れとならないか心配してくれている人がいるようです。 はい。それは正しい指摘です。 ただ、私もそのことは分かっていました。だからわざと新しすぎる機能や、あまり使われない機能については本の中では解説せず、 「適時:helpを参照してください」ということになっています。できるだけ不変であろうことについて解説するようにしています。 それでも現在の実装と齟齬がでてきてしまった場合は、正誤表にて何かしらのフォローをする予定です。

「:helpに全部書いてあるから書籍は必要ない」という意見について

これはある意味事実です。だからこそ、本の対象とする読者は「Vimの基本的な操作や設定はできるが、:helpを自在に引くことはできない層」なのです。 :helpはリファレンスマニュアル的であり、分からない語句を検索するときに使います。 初心者が通読するには向いていません。 本というのは初心者が参照しやすいように、重要な情報をふるい分けることに価値があると考えています。

ただし、私が自分の記事の中で気をつけたのは、できるだけ「設計思想や使い方について解説をする」ことです。 これは:helpに書いていないことが多いうえに、内容が陳腐化することも少ないと考えました。 だから、ヘルプを自由自在に参照することができる、レベルが高いVim使いにとっても役立つ書籍だとは思います。 これが本当かどうかは、自分の目で本を見て確認してください。

なぜ「Vimテクニックバイブル」はVim scriptを学ぶ本ではないのか

それは需要がないからです。考えてみてください。あなたの周囲にVim scriptをバリバリ書けるような人はいますか? Vimが好きだから、Vim scriptを本格的に学びたいと考えている人はいますか? まずいないでしょう。「Vimテクニックバイブル」の内容ですら出版社からはリスクがあると考えられている現状において、 日本でVim scriptを学ぶための書籍が出る確率は0です。おそらく売れません。 「Vimテクニックバイブル」にはVim scriptの解説がある程度書いてあります。 しかし、一流のVim scripterになるための道はまだまだ険しいのです。

それでもVim script本の構想を諦めきれない場合は、まず「Vimテクニックバイブル」を購入し、その本に書いてあることを全てマスターしてください。 さらに「Vimテクニックバイブル」を周囲に宣伝し、全国のVimmerのVimレベルを上昇させてください。 その暁には、Vim script本の出版リスクは低減され、いつの日か発売されるかもしれません。

オマケ

今後、vim-users.jpで「Vimテクニックバイブル」に関する何かが掲載されるかもしれません。こうご期待! ちなみに、Vimテクニックバイブルを購入してもらった場合、勉強会でShougoのサインが貰えるかもしれませんよ!

Shougo

quickrun 0.5.0がリリースされました

変更点1 非同期出力

quickrunは従来から非同期実行を行っていましたが、今回さらにそれに加え、非同期出力も行うようになりました。

例:

(1..20).each do |i|
  sleep 0.2
  puts i
  STDOUT.flush
end

という内容に対し

:QuickRun -runner vimproc:100

のように実行させると、ちょっとずつ結果が出ます。(*1)

変更点2 モジュール化

ところで先ほど-runnerという新しい記法がでていました。これはquickrunのモジュール化に密接に関わってくるオプションです。

quickrun 0.5.0では、実行部分と出力部分をモジュール化しました。

runmode => runner
output => outputter

名前なども変わっております。詳しくは :help quickrun を見てください。

モジュール一覧:

  • runner
    • system
    • shell
    • vimproc
    • remote
    • python
  • outputter
    • buffer
    • message
    • variable
    • file
    • buffered
    • multi

変更点3 式展開記法

quickrun-syntax-option で {} が式展開になっていたものが、%{} に変更されました。多くの人は ~/.vimrc の変更が必要になります。これは大事なところなので、ぜひ一日三回はtweetしてください。

参考文献

http://d.hatena.ne.jp/thinca/20110529/1306677726

  • *1 すごい気がしないでもないけど、通常のプログラムは出力先が端末でない場合自動でバッファリングしちゃうみたいなので、残念ながら普段は恩恵に授かれないと思います。過度な期待はしないでください。
  • *2 ちなみに著者ujihisaは英語版documentの翻訳を行うなどしました。tyruさんとujihisaさんの英語を世界に広めましょう!

author: ujihisa

Hack #223: テキストを直感的に移動、複製する

textmanip.vim を使えば、選択したテキストブロックを、直感的に移動、複製する事ができるようになります。

と書いても、「よくわからない」という反応が殆どだと思いますので、動画を用意してみました。

Youtube: textmanip.vim

インストール

textmanip.vim は vim.org や、github から入手可能です。

また Vundle でもインストール可能です。

:BundleInstall t9md/vim-textmanip

設定

textmanip.vim はデフォルトのキーマップを自動で設定しませんのでユーザーが設定する必要があります。
筆者オススメのキーマップは下記です。vimrc に設定します。

" 選択したテキストの移動
vmap <C-j> <Plug>(Textmanip.move_selection_down)
vmap <C-k> <Plug>(Textmanip.move_selection_up)
vmap <C-h> <Plug>(Textmanip.move_selection_left)
vmap <C-l> <Plug>(Textmanip.move_selection_right)

" 行の複製
vmap <M-d> <Plug>(Textmanip.duplicate_selection_v)
nmap <M-d> <Plug>(Textmanip.duplicate_selection_n)

その後なんでもいいので、テキストをビジュアルモードで選択し、コントロールキーを押したまま, hjlk を入力してみて下さい。

モノのように移動できましたよね?楽ですよね?便利ですよね?

<M-d> を押すと、選択したテキストが下方向に複製されます。
ノーマルモードで <M-d> を入力すると、カーソルのある行が複製されます。
<M-d>Altキー を押しながら d です。
Mac ユーザーの人は D-d として、 COMMANDキー を押しながら d に設定するといいかもしれません。

※ 本当は C-d を使いたかったのですが、ノーマルモードでの半ページスクロールとキーが被ってしまいます。
※ ビジュアルモードのみ vmap <C-d> <Plug>(Textmanip.duplicate_selection_v) と設定するのも一つの手です。

ユースケース1

Markdown では整形済みテキスト(preブロック)をインデントで表現しますので、複数行をインデントする事がよくあります。

インデントしたいテキストを選択して、<C-l>を数回押して、右にずらします。

ユースケース2

メソッド or 関数を別の引数で複数回呼び出すコードを書く場合を考えます。
例えば次のような関数呼出しがあり、

some_method("a", 1000)

下記のように引数を変えて複数回呼び出したいとします。

some_method("a", 1000)
some_method("b", 2000)
some_method("c", 3000)

まず、some_method("a", 1000)の行にカーソルを合わせます。
<M-d>を2回押して、行を複製します。
あとは引数を微修正すれば完了です。

t9md

非Vim使いが生産性を3倍高めるたった一つの方法

Vimを使う。

Hack #222: カーソル位置を目立たせる

あるファイルを編集中に全く関係のない別の作業をすると、カーソルの位置を見失ってしまうことが多々あります。
そんな場合に少しでも見失い難くするために、カーソル位置を目立たせることが有用です。

‘cursorline’ と ‘cursorcolumn’ を設定することで、現在のカーソル位置をハイライトすることが出来ます。

:set cursorline
:set cursorcolumn

それぞれ、以下の様にすることで、highlight の指定が行なえます。

:highlight CursorLine     xxx term=underline cterm=underline guibg=Grey90
:highlight CursorColumn   xxx term=reverse ctermbg=7 guibg=Grey90

参照資料

Sixeight

Hack #221: MacVimで半透明処理が狂う問題に対処する

問題

MacVimをお使いの方に捧げる記事です。

MacVimをはじめとするGUIのVimの特徴の一つとして、半透明具合をVimから操作できるという点があります。

transpacent vim

MacVimの場合、半透明具合は'transparency'で調整できます。0が不透明、100が完全に透明です。例えば20%の透明具合にするには、

:set transparency=20

とします。これは

:let &transparency = 20

としても同様の結果が得られます。現在の透明度の値を得たければ、変数&transparencyを参照してください。

MacVimにおける半透明処理はまだExperimentalで、Preferencesから以下のような設定を行う必要があります。

Preferences

まだExperimentalと主張していることからわかるように、半透明処理には既知のバグがあります。不特定のタイミングで、画面の一部が不透明になり、だんだんと不透明部分が全体に浸食していきます。

bug

見てのとおり、かなり深刻な問題かつ数多くのユーザに確認されつつも、この問題は数年間に渡り解決されないまま今に至っております。

対処

実は、オプション値'transparency'がいつのまにか勝手に書き変わっています。これを再び書き換えて<C-l>を打鍵するだけで、うまく再描画されます。

:set transparency=10

ただ、それ描画が狂う時点の前にどんな'transparency'を設定していたかその具体的な忘れている場合がほとんどでしょう。普段からset transparencyするときに常に同時にg:transparencyなどの変数にその値を格納しておき、そしてその値に戻ることができるようにKey mappingを設定するのがよいでしょう。

例として、筆者は半透明度の変更と、半透明再描画をそれぞれ以下のように割り当てています。すべて、~/.vimrcではなく~/.gvimrcです。

  • より透明にする: ↑

      nnoremap <up> :<C-u>call <SID>relative_tranparency(5)<Cr>
      inoremap <up> <C-o>:call <SID>relative_tranparency(5)<Cr>
    
  • より不透明にする: ↓

      nnoremap <down> :<C-u>call <SID>relative_tranparency(-5)<Cr>
      inoremap <down> <C-o>:call <SID>relative_tranparency(-5)<Cr>
    
  • 再描画: <esc><esc

      nnoremap <Esc><Esc> :<C-u>let &transparency = g:transparency<Cr><C-l>
    

ただし以下の関数を同じファイル内で定義しておくものとします。

function! s:relative_tranparency(diff)
  let &transparency = a:diff + &transparency
  let g:transparency = &transparency
endfunction

補足

筆者はもともと<esc><esc>:set nohlsearchの副作用を持たせるkey mappingをしていました。これを組み合わせため、筆者の設定は以下のようになっています。

    nnoremap <Esc><Esc> :<C-u>set nohlsearch<Cr>:let &transparency = g:transparency<Cr><C-l>
ujihisa

Hack #220: コマンドラインからコピペする

コマンドラインに何か赤いハイライトで出力されたけど 見えなくなってしまった場合、:messagesあるいは 短縮形である:mesと入力すれば見ることができます。 しかしそのエラーを何か別の場所(twitter,gist,…)に コピペするにはどうすればいいのでしょうか?

解決策1: gvimでマウスで選択し<C-y>を使う

gvimでのみ使える技です。

:mesと入力したあと、 図のようにマウスで選択して<C-y>を押します。 something wrong

解決策2: :redir > {file}を使う

gvimでも端末版vimでも使えます。

:redirというExコマンドを使うと、 Exコマンドの出力をキャプチャーし、 ファイルや変数に保存できます。

:redir > messages
:silent messages
:redir END

これでmessagesというファイルに出力結果が保存されます。 :silentはつけると:messagesの出力をコマンドラインに出力しません。 つけなくてもファイルの中身に変わりはありませんが、 今回はコマンドラインに出力されてもうっとうしいだけなので付けただけです。

tyru

Hack #219: Gitを使う2 – Fugitive.vim

Vim の中で Git を快適に使うためのプラグインがいつくかあります。 その中から Time Pope さん作の Fugitive.vim を紹介します。

motemen さんの git.vim については Hack #67: Gitを使う を参照してください。 今回の記事は対比のためフォーマットを似せています。

インストール

plugin は github から入手可能です。 https://github.com/tpope/vim-fugitive

また Vundle でもインストール可能です。

:BundleInstall tpope/vim-fugitive

使い方

以下のコマンドが定義されます。

  • Git arg: git コマンドと同様の機能を有し、自分で定義した alias も使用出来ます。

Git コマンドを使用した場合は結果を pager に表示します。 以下のコマンドを使用すると結果は状況に応じてバッファ内、quickfix list 等に表示されます。 また、diff を vimdiff で表示したり、blame もハイライトされた状態で表示されたりと、それだけでも利用価値があると筆者は考えます。

  • :Gdiff[ rev]: git diff[ --cached] {編集中のファイル}
  • :Gstatus: git status
  • :GlLog[ rev]: git log {編集中のファイル}
  • :Gwrite: git add {編集中のファイル}
  • :Gread[ rev]: git checkout {編集中のファイル}
  • :Gcommit: staged なファイルがあれば git commit なければ git status
  • :Gblame[ rev]: git blame {編集中のファイル}

上記以外にも Git を扱ううえで有用なコマンドが多数定義されます。:help fugitive を参照してください。

Gstatus 時の挙動について

:Gstatus を使用すると、Window が split され git status の結果が表示されます。

定義されたいくつかの mapping を利用することで、更に便利になります。

  • : カーソル下にあるファイルを edit
  • -: カーソル下にあるファイルを git add
  • p: カーソル下にあるファイルを git add -p
  • D: カーソル下にあるファイルを git diff[ --cached]
  • C: git commit

応用

筆者は以下のように mapping して利用しています。

" for Fugitive {{{
nnoremap <Space>gd :<C-u>Gdiff<Enter>
nnoremap <Space>gs :<C-u>Gstatus<Enter>
nnoremap <Space>gl :<C-u>Glog<Enter>
nnoremap <Space>ga :<C-u>Gwrite<Enter>
nnoremap <Space>gc :<C-u>Gcommit<Enter>
nnoremap <Space>gC :<C-u>Git commit --amend<Enter>
nnoremap <Space>gb :<C-u>Gblame<Enter>
" }}}

参照資料

Sixeight

Home

Search
Feeds
Links
  • 公式
  • 勉強会
  • 情報
  • コミュニティ
  • Meta
    Etc
    Creative Commons License
    This blog is licensed under a Creative Commons License.

    Return to page top