fugitive.vim をもっと使いこなす
この記事は Vim Advent Calendar 2013 の 16 日目の記事です。 昨日は id:deris さんの Vimmerなら2013年中に試しておきたい海外産Vim plugin 8選 - derisの日記 でした。知らないプラグインあったので時間ができたら試してみたいですね。
進捗ダメです
すみません。本当は自作プラグインを大々的に紹介するつもりだったのですが、進捗ダメでした。今日は fugitive.vim の小ネタについて書きます。 次回作にご期待ください。
fugitive.vim について
Vim から Git を便利に使うプラグインです。詳しくは
- VimmerなGit使いはfugitive.vimを今すぐ入れたほうがいい - SELECT * FROM life;
- fugitive.vim が便利すぎたのでメモ - 反省はしても後悔はしない (ステマ)
みたいなところを参照してください。
とりあえず、git status
見たり、git add -p
を Vim の diff 機能を使って実行できたりしてとても便利です。
リポジトリのルートに cd する
あまり知られていないような気がしているのですが、
:Gcd
でリポジトリのルートに :cd
することができます。
:Gedit を使って違うリビジョンのファイルを開く
git を使っていると、違うブランチにあるファイルを開きたくなりますね。Gedit
でできます。
:Gedit feature-branch:path/to/file
<リビジョン>:<ファイル名> で特定のリビジョンの特定のファイルを閲覧することができます。ただ、このコマンドは :edit
相当なので現在のウィンドウで開きます。他には :vsplit
相当の :Gvsplit
などがあります。
:
の前はリビジョンを指定します。ブランチ名や HEAD^
のような指定の仕方以外にも fugitive.vim が定義する便利な記法が使えます。
例えば、~3
だけで HEAD~3
と同様の意味になります。詳しくは :help fugitive-revision
そして、これらのコマンドはブランチ名およびファイル名の補完が効きます。ファイル名の補完に至っては、現在のワーキングディレクトリになくても入力したリビジョンにあれば補完されます。
:Gdiff で違うリビジョンとの diff を取る
:Gdiff
といえば、git add -p
がとても便利ですが、別リビジョンにある同ファイルとの diff を取ることもできます。
:Gdiff feature-branch
例えば、:Gdiff develop
で develop
ブランチとの diff を取ったり、:Gdiff ~3
で 3 つ前のコミットと diff 取ったりできます。
おわりに
- 進捗ダメです
- fugitive.vim は内部の実装汚いけど便利
明日は @cocopon さんです。
Vim で Ruby の def end とかを自動入力する vim-endwise を vim-smartinput で実装してみた
この記事は Vim Advent Calendar 342 日目の記事です。 昨日は id:leafcage さんの README.mdをVimのヘルプファイルから生成する - cafegale でした。とても素晴らしいプラグインですね。本プラグインでも早速活用させていただきました。
vim-endwise について
例えば Ruby では様々な構文の終わりを end
というキーワードで表します。という訳で Ruby ではコードが end
だらけになるわけですがこれをいちいち手で打つのは面倒です。これの自動入力を行ってくれるのが tpope/vim-endwise です。
例えば、
このときに <CR>
を打つと、
このように end
が自動で挿入されます。便利!
Ruby の他には Lua, Vim script, sh, VB, Elixir に対応しています。
vim-smartinput と vim-endwise の問題点 について
ところで、私の大好きなプラグインのひとつに kana/vim-smartinput があります。これは ()
や {}
の自動入力を行ってくれるものです。
例えば、
このときに {
を打つと、
さらに <CR>
を打つと、
このように }
が自動で挿入されます。C や JavaScript などの中括弧系の言語に便利ですね!
で、この2つのプラグインやってることは似ています。Ruby などの end
を使う系は vim-endwise 、JavaScript などの {}
を使う系は vim-smartinput という使い分けをしたいですね。
が、残念なことにこの2つのプラグインは競合します。両者ともインサートモード時の <CR>
をマッピングしてしまうためです。
私は以前はこのようにして解決していました。
vim-smartinput と vim-endwise が競合した時の対処法 - 反省はしても後悔はしない
という訳で vim-smartinput を使って vim-endwise を実装してみた
vim-smartinput は Vim 界の神こと kana さん作のプラグインであり、非常に高い拡張性を持っています。つまり、vim-smartinput さえあれば vim-endwise の機能は実装できるのです!!
という訳で実装しました。
cohama/vim-smartinput-endwise · GitHubcohama/vim-smartinput-endwise
インストール方法は NeoBundle の場合は
NeoBundle "kana/vim-smartinput" NeoBundle "cohama/vim-smartinput-endwise" call smartinput_endwise#define_default_rules()
と書けば OK です。
これで vim-smartinput ひとつで全て実現できるので競合の問題は解決です。さらに、neocomplcache などを使っていると、補完ウィンドウと競合することがあるので、neocomplcache / neocomplete に対しても特別な競合対策を施してあります。 他のプラグインとの競合が極力避けらルのが本プラグインのメリットです。
一応機能としては vim-endwise になるべく近くなるように実装しています。コメントや文字列では展開されないといったことは実現できています。ただ、やはりある機能だけに特化したプラグインと汎用的なプラグインの差というのはどうしてもあります。具体的には searchpair を使った「すでに end
などのが入力されていたらそれ以上 end
を入力しない」ということを vim-smartinput で実装するのは難しくてやっていません。
あと、現在対応している言語は Ruby, Vim script, sh (zsh) の 3 つだけです。他のやつはほとんど書いたことないのでやる気が出ませんでした。もし必要なら issue とかに上げてもらえると対応するかもしれません。
おわりに
- vim-smartinput は素晴らしいプラグインなのでみなさん使いましょう。
- プルリク待っています
- そして私は
def
end
の展開には neosnippet を使っているのであった...
明日は @Linda_pp さんです。
'set relativenumber' で Vim のカーソルの縦移動とかを改善する
この記事は Vim Advent Calendar の 311 日目の記事です。昨日は id:osyo-manga さんの unite.vim の action の設定方法いろいろ でした。
set relativenumber
みなさん、Vim で行番号を表示していますか?行番号の表示は vimrc
に set number
ですね。行番号を表示する機能はほとんどのテキストエディタでありますね。ところで、Vim にはちょっと変わった行番号の表示をさせることができます。
vimrc
に set relativenumber
という記述を追加してみましょう。
上のように、現在のカーソルがある行からの相対行数を表示させることができます。なんか気持ち悪いですね。これがなにの役に立つのでしょうか?
j, k を使って目的の行へ素早く移動する
下のスクリーンショットで、hogehoge
と書かれた行に移動したいとしましょう。
j
連打する方法や }
や L
のあとで j
k
で微調整する方法、/
で検索する方法などが思いつきますね。ところで set relativenumber
が有効になっているので、目的の行のところはカーソルから 10 行分下方にあることが分かります。この情報を使って 10j とすれば目的の行へ即座にジャンプすることができるようになります。
もちろん、通常の行数を表示させて <行数>G
のように移動することもできます。が、この方法だと 1000 行くらいある場合に数字の入力が辛くなってしまいます。relativenumber
を使った場合では入力する数字が高々 2 桁程度に収まるのでこちらの方が打ちやすいです。
オペレータとの合わせ技
下のスクリーンショットで foo
の行から bar
の行までを削除したいとしましょう。
relativenumber
で表示されている行数を使うと、これは d6j
で一発で削除することができます。6j が 6 行下に移動するモーションコマンドなので現在行と合わせて 7 行分が一気に削除されます。もちろん、削除以外のオペレータと組み合わせることもできます。
Ex コマンドでも
下のスクリーンショットで hoge
の行をカーソル行の下の行に移動させたいとしましょう。
さて普通に考えれば 4k
で移動したあと yy
、4j
で戻って p
ですね。実は Ex コマンドを使う別の方法があります。:-4t.<CR>
と打つだけです。:t
は :copy
と同じ効果の Ex コマンドで、範囲で指定した行を引数で指定した行の下にコピーします。ここでは範囲として -4
つまり 4 行上の1行分、引数として .
つまり現在行をしていしています。
relativenumber の仕様とか
さて、以上で relativenumber
の紹介は終わりなんですが、実はこいつは Vim のバージョンによって微妙に仕様が異なります。それをすこしまとめておきます。
Vim 7.2 以前:
relativenumber
は Vim 7.3 から追加されたオプションなので 7.2 以前の Vim では使えません。諦めるか最新の Vim をビルドしましょうVim 7.3.786 以前:
relativenumber
が使えます。カーソル行の表示は常に 0 になります。Vim 7.3.1114 以前: カーソル行の表示が絶対行数の表示になります。
Vim 7.3.1115 以降 (Vim 7.4 とか):
number
とrelativenumber
の組み合わせでカーソル行の表示が変わります。nonumber
のときはカーソル行の表示が 0 に、number
のときは絶対行数の表示になります。
便利だけど、たまに絶対行数も表示したいんだ!
relativenumber
は編集には便利なんですが、コードレビューなんかをする際にはやっぱり絶対行数の表示のほうが良かったりします。うーん、どっちも使いたい。
こういう時は表示をトグルさせるようなコマンドを作ってしまいましょう。
nnoremap <F3> :<C-u>setlocal relativenumber!<CR>
Vim 7.3.1115 以降でかつ set number
している場合は <F3>
を押下するだけで相対行数と絶対行数の表示を切り替えられるようになります。
それ以外の環境だとちょっと工夫する必要がありますが、そんなに難しくないので挑戦してみましょう。
まとめ
relativenumber
を使うと相対行数の表示ができるj
k
と相対行の指定を組み合わせて目的の行へ一気に移動できる- オペレータとの組み合わせや Ex コマンドでも活用できる
明日は @tek_koc さんです。
Vim のバッファとウィンドウを理解する
この記事は Vim Advent Calendar の 302 日目の記事です。昨日は id:rattcv さんの Vimから電話がかけられるなんて・・・素敵! でした。すごいですね。
はじめに
Vim には強力なウィンドウ分割機能があります。一方で、プラグインなどのドキュメントなどではバッファという表現が使われることが多いです。この2つは何者なのでしょう?両者の違いは? 私ははじめの頃、ウィンドウ、バッファという2つを混同していました。他にも混同している人が多いのではないかと思ったので今回はこの2つについて解説したいと思います。
バッファとは?
基本的には1つのバッファ=1つのファイルです。ですが、プラグインなどでは必ずしもファイルとは一致しません。例えば、Unite のウィンドウを開いた場合にもバッファが作られます。メモリ上に読み込まれた(ことがある)内容に対応するものがバッファ、というのが正確な表現でしょう。
例えば、下記のような Ex コマンドを連続して打ったとしましょう
edit hoge.html edit fuga.css edit piyo.js
このとき、ウィンドウはひとつだけですが、バッファは3つある状態になります。
バッファの状態は :ls
コマンドで確認することができます。
ウィンドウとは?
ウィンドウは今まさに目に見えている領域で、バッファの内容を表示するものです。
例えば、下記のような Ex コマンドを打ったとしましょう。
edit hoge.txt split
このコマンドを打つと、hoge.txt の内容が水平分割されて表示されます。そして、片方を変更するともう片方にも自動的反映されます。 この場合、1つのバッファ(hoge.txt)に対して2つのウィンドウが対応します。一般的に、1つのバッファに対して0以上のウィンドウが対応する感じです。(つまり、1対多の関係)
さて、:q
はウィンドウを閉じるコマンドです。なので分割してウィンドウが2つある場合は片方のみ閉じられてもう一方は残ります。対して、:bdelete
, :bwipeout
はバッファを削除するためのコマンドです。1つのバッファを分割している状態で :bdelete
すると、バッファ自体が削除されます。そして、それに紐づく2つのウィンドウがいっぺんに閉じられることになります。
(ついで)タブページとは
ウィンドウを束ねるものがタブページです。ちなみにですが、単にタブというと <Tab> 文字のことになるので区別したい時にはタブページと言いましょう。 タブページはウィンドウを束ねているだけなので、タブページごとにバッファを管理したいとかそういうことは現状ではできません。 (https://github.com/vim-jp/issues/issues/342)
バッファローカル、ウィンドウローカル
前述したとおり、バッファは(ほぼ)ファイルに対応します。なので、ある特定のファイルだけに設定したいものはバッファローカルな変数やオプションを使います。例えば、hoge.html というファイルを開いたときは HTML として認識して欲しいし、fuga.css というファイルを開いた時には CSS として認識して欲しいですね。こういう場合には filetype
というバッファローカルなオプションが使われていて、各ファイルに対して別々の設定をさせることができるようになっています。他にも、b:did_ftplugin
という変数で filetype plugin が読み込まれたかどうかを記録するといったことや b:quickrun_config であるバッファだけ QuickRun の設定をするなどのように使われています。
また、見た目に関する設定にはウィンドウローカルな変数やオプションを使います。例えば、行番号を表示する number
というオプションはウィンドウについてローカルな値を持つことができます。つまり、1つのバッファを分割して開いているときに、片方だけ行番号を表示しないといったことが可能です。他にも、indent-guides というプラグインではインデント量を可視化する(つまり見た目)ための設定をウィンドウローカルな変数で持っています。
ちなみに、オプションがバッファローカルまたはウィンドウローカルな値を持つかどうかはすべてヘルプに書いてあります。:help options
もちろん、ignorecase
などのようにグローバルな値しか持たないものもあります。
バッファローカル、ウィンドウローカルな変数を Vim script から操る
これらのローカル変数を Vim script から操ることができるといろいろ便利です。自分が今いる位置のウィンドウ、バッファのローカル変数は b: や w: を使うことで参照できます。では別のウィンドウやバッファの変数にアクセスするにはどうすればいいでしょうか。そんな時のために Vim の組み込みの関数が使えます。
関数名 | 説明 |
---|---|
winnr('.') | 現在のウィンドウ番号を返す |
winnr('$') | ウィンドウの個数を返す |
bufnr('%') | 現在のバッファ番号を返す |
bufnr({expr}) | {expr}という名前のバッファの番号を返す。{expr} はファイル名とか。 |
getwinvar({winnr}, {varname}[, {def}]) | {winnr}という番号のウィンドウの {varname} というウィンドウローカル変数の値を返す(w: を付けない名前)。存在しない場合は {def} (指定した場合) または空文字を返す |
getbufvar({expr}, {varname}[, {def}]) | {expr} という名前または番号のバッファの {varname} というバッファローカル変数の値を返す。(b: を付けない変数名) {expr} は文字列か数値。存在しない場合は {def} (指定した場合) または空文字を返す |
winbufnr({nr}) | {nr} という番号のウィンドウで開かれているバッファの番号を返す。 |
bufwinnr({expr}) | {expr} という名前または番号のバッファの最初のウィンドウの番号を取得する。 |
例えば、help を開いているウィンドウをフォーカスを動かさずに閉じるとかできるようになります。
function! CloseHelpWin() for w in range(1, winnr('$')) let bt = getwinvar(w, '&buftype') if bt ==# 'help' execute w . 'wincmd w' q break endif endfor endfunction
help 閉じるが果たして便利かは置いといて、これを応用すると例えば Quickrun の出力ウィンドウとか diff してるときのもう片方とかも移動せずに閉じるということができますね。便利。
もっといいのないの?
Vim のバッファ、ウィンドウ系の関数はここに紹介した以外にもいくつかあるのですが、微妙に使い勝手が悪かったりします。id:osyo-manga さんが書いた vim-gift を使うとバッファ、ウィンドウの操作をもっと便利にできるでしょう。
明日は supermomonga さんです。
Nagoya.vim #1 を開催してきた
Vim Advent Calendar 2012 の 282 日目の記事です。
名古屋在住 Vimmer の @sgur さんと一緒に 9/7 土曜日に Nagoya.vim という勉強会を主催してきました。 開催の経緯から当日の様子、ちょっと補足あたりについて書きます。
経緯とか
何回目かの vimrc 読書会で @sgur さんの vimrc を読んでいたのですが、なんとそこで @sgur さんが名古屋在住であることが発覚。僕も名古屋在住だったので nagoya.vim やりましょうかみたいな話に。ちなみに、今ログを見返してみたら nagoya.vim 煽ってたのは id:thinca さんでした。。。しかし、名古屋で Vim 勉強会を開催してもどれだけ集まるか未知数だったので、しばらくは様子を見ることにしました。
sgur さんとの事前打ち合わせ
名古屋の他の勉強会などで「Vim の勉強会やろうかとおもっているんですよー」という話をしたら、「行ってみたい」という人が数名いたので、開催を前向きに検討することにしました。とりあえず何やるかとか決めましょうということで sgur さんと事前打ち合わせをしました。開催日時とか何をやるかとかはその時におおまかに決めました。ちなみに、その時は「あまり知られていない Vim の機能紹介」「unite.vim ユーザに対する ctrlp の紹介」のように少しレベルの高い話にする予定でした。あと、とりあえず 5 人くらい集まれば勉強会の体は保てますかねーみたいな話をしたのを覚えています。
connpass イベントを立てる
早速、20 人くらいの会場を予約して connpass にイベントを立てました。すぐに 10 名程度の参加者が集まって「おー」と思っていました、その時は。そこで、全く予想していない自体が起きます。Qiita の開催する Get Great Git #2 が同日別会場で開催することになったのです。Vim と Git ではかなり参加者層が被ります。正直焦りました。しかし、なんと Git 側の運営から会場は無料で良いので同日同会場で連結して開催しませんかという打診が。sgur さんと相談して Get Great Git と一緒に開催することに決めました。その後 Git との相乗効果もあり参加者がみるみる増加。最終的に 36 名まで集まりました。どうしてこうなった
そして当日
僕はだいたいの勉強会に遅刻してしまうのが常なのですが、さすがに主催者なので開場の10分前には着いていました。偉い。そしていつも調子の悪い僕のノート PC (7 年前のやつ) も当日は特に問題なくプロジェクタと接続出来ました。以下、各発表のレポート
- (初心者向け) Vim の機能紹介: 参加者に割りと初心者が多いことから追加した発表です。カーソル移動から dot コマンドの使い方までさらっと初心者向けに機能紹介をしました。ほとんど Vim を触ったことがないような人が主なターゲットです。ただ、初心者向けだとある程度 Vim を使いこなしている人には退屈かと思ったのであまり知られていなさそうな Tip を随所に挟みました。割りと当たり前の内容過ぎて退屈されるのではという不安がありましたがそんなこともなく割りとみんなに好評だったみたいでよかったです。反省点としては「とりあえず、:help を引け」と言った割りに :help の使い方まで説明していなかったので後で初心者の人から「:help を打ったはいいが、抜け出せなくなった」と言われてしまい、ちょっと配慮が足らなかったかなと思いました。
- Vim script と vimrc の正しい書き方: 僕が本当に喋りたかったネタです。僕もそうなんですが、初心者のうちは人の vimrc をワケも分からずコピペして使っている人が多いんじゃないかと思って Vim script と vimrc の書き方について説明しました。実は、Vim script の説明のところは :help usr_41 あたりをとても参考にしていますし、vimrc の書き方は kana さんの「Vim の極め方」に vimrc 読書会で得られた知識をちょっと足しただけの内容です。Vim をよく知らない人でも Vim script の独特のあの感じを理解してもらえたのではないかと思っています。あと、終わった後にいろんな人から「vimrc 見なおしてみます」と言われました。これが聞けただけでも開催した甲斐があったなと思いました。
- Vim plugin について: sgur さんの発表です。まず Vim plugin の仕組みとか plugin 管理の仕組みから始まり、最後に怒涛のプラグイン紹介という構成でした。とくに Plugin 紹介のところは、おすすめのプラグインを一つ言うのではなく、競合するプラグインを幾つか提示しつつそれぞれのメリット/デメリットを説明していたところがとても良かったです。僕も知らないプラグインがたくさんあってとても勉強になりました。時間があるときにでも公開されている資料を見ながらプラグインを見なおしてみたいと思います。
みんなで vimrc を書いてみよう: せっかく vimrc の書き方とかプラグイン紹介とかをやるので参加者が自由に vimrc なりなんなりを書く時間を設けました。結構みんなもくもくと作業していました。うーん、Vim にはもくもくさせる何かがあるんですかね。あと、中途半端に Vim 7.4 の情報を出してしまったせいで、Vim のビルドを始める人もちらほら。主催者としてはそういうのはビルドよりも vimrc を書いてもらいたかったのですが。。。他にもあまり質問を吸い上げられなかったり、普段あまり交流のない人とコミュニケーションできなかったところも反省点でした。
その後は引き続いて Git のイベントと懇親会が続く: Nagoya.vim がつつがなく終了した後は予定通り Get Great Git #2 がスタートしました。Nagoya.vim の参加者から引き続いて参加している人が 7 割ほどいたので同時開催にして本当に良かったです。あと、主催の Qiita の偉い人から感謝されました。いやいや、むしろこちらが感謝する側なのに。懇親会もありました。Nagoya.vim の懇親会ではないので Vim の話ばかり出来なかったのはちょっと残念でした。
KPT
- Keep
- Problem
- 資料作るのが大変すぎた。次回はもっと負担が少ない方向にするかも
- 参加者とあまり交流できなかった
- Try
今後とも、Nagoya.vim をよろしくお願いします。
すごい Vim で Haskell を書こう ... の補足
この記事は Vim Advent Calendar の 274 日目の記事です。昨日は id:osyo-manga さんの unite-highlight つくった でした。
はじめに
先週の日曜日(8/25)になごやまつりというイベントがあり、そこで Haskell を Vim で書く方法というネタで LT をしてきました。発表するのが決まったのが前日ということもありちゃんとまとまった内容になっていなかったので、本エントリで少し補足を書きたいと思います。
とりあえず、インデントをどうにかする
発表では「Haskell のデフォルトのインデントプラグインは全然ダメ」という発言をしましたが、間違いでした。訂正します。 「Haskell のデフォルトのインデントプラグインなんてなかった!」
まさか、ないとは...。
という訳で、インデントプラグインを入れましょう。作者は Vim 界の神こと kana さんです。
NeoBundle 'kana/vim-filetype-haskell'
これで、↓みたいな残念な感じのが、
↓のようにちゃんとインデントされます。ただ、Haskell のインデントの計算は難しいっぽく常に正しいインデントが得られるとは限らないので適宜手動で調整が必要です。
型の表示
Haskell は静的型付け言語です。せっかく型の情報があるのでこれを Vim 上で表示できると便利そうです。
まず、外部コマンドの ghc-mod
というものを用意します。これは cabal で簡単にインストールできます。
$ cabal install ghc-mod
あとは、このコマンドの出力を Vim から使えるようにする ghcmod.vim
というプラグインを入れます。
NeoBundle 'eagletmt/ghcmod-vim'
Haskell のコード上でおもむろに :GhcModType
すると現在のカーソルがある位置の項がハイライトされ、その型が下の方に表示されます。
ハイライトを消すには GhcModTypeClear
します。常用するにはコマンドが長いので適当に \t
とかにマップすると良いでしょう。
いい感じで補完をする
Haskell でも IDE のように空気を読んだ補完をしたいものです。これも ghc-mod でできるのでその出力を使って補完するプラグインがあれば可能になります。
NeoBundle 'Shougo/neocomplcache' NeoBundle 'ujihisa/neco-ghc'
Haskell のコードを即座に実行する
ちょっと Haskell のコードを書くときなんかに、今編集しているファイルを Vim 上からすぐに実行できると便利です。そういう時のために 'quickrun' というプラグインがあります。Haskell だけでなく他にもいろいろな filetype に対応しています。
NeoBundle 'thinca/vim-quickrun'
Haskell のエラーを Vim 上に表示する
文法のエラーや型エラー何かを Vim 上で表示するととても便利です。これも ghc-mod でできるので、その結果を使うプラグインを入れましょう。
NeoBundle 'osyo-manga/vim-watchdogs'
vim-watchdogs を使うと ghc-mod を使ってチェックした結果を Quickfix に突っ込むことができます。それをさらに別のプラグインを使って Vim のウィンドウに結果を表示させています。このプラグインは Haskell 以外にも Ruby や JavaScript など他の filetype にも汎用に使えるので便利なのですが、依存関係や設定が少し面倒なのが玉に瑕です。詳しくはwatchdogs.vim つくりました - C++でゲームプログラミング で説明されています。
watchdogs 入れるの面倒だよという人はさっきの型の表示に使った ghcmod.vim でも同様のことができます。:GhcModCheckAndLintAsync とすると watchdogs と同様にチェックの結果を Quickfix に突っ込みます。
Vim から即座に hoogle を引く
hoogle というのは Haskell のリファレンスです。すごいやつです。例えば、人のソースコードを読むなどのときによく分からない関数などが出てきたらとりあえず、Hoogle を引きたいですよね。Vim から。これを可能にするのが ref-vim および ref-hoogle です。なお、実行には cabal install hoogle
が必要です。
NeoBundle 'thinca/vim-ref' NeoBundle 'ujihisa/ref-hoogle'
調べたいキーワードにカーソルを合わせて K
で hoogle の結果が表示されます。
もっと import を便利にする
Haskell では import 文はファイルの先頭にまとめるのが普通のようですね。しかし、いちいち先頭まで移動して import を書くのは面倒です。これを解決するのが unite-haskellimport
です。当たり前ですが unite.vim に依存します。あと hoogle も必要です。
NeoBundle 'Shougo/unite.vim' NeoBundle 'ujihisa/unite-haskellimport'
:Unite haskellimport
すると Unite のインターフェースでパッケージを選択→挿入できます。
詳しくは Vim-users.jp - Hack #241: Haskellで使いたい関数を使ってからそのモジュールをimportする を参照してください。
おわりに
すみません。偉そうに書いた割に実は Haskell は全然書けないのです。適当にネットとかで調べたのをまとめただけです。もっと Haskell を勉強すれば便利な機能とかプラグインとかに気づくかもしれません。頑張って勉強します。
明日は id:manga-osyo さんです。
インサートモード時に行番号の色を反転させる Vim のプラグイン作った
この記事は Vim Advent Calendar 2012 の 259 日目の記事です。 昨日は @IMAGEDRIVE さんの Vim で EPUB を制作する時に役に立つかもしれないスニペットファイル でした。
はじめに
Vim はモード切替が特徴的なエディタですが、ときどき自分がインサートモードなのかノーマルモードなのかわからなくなることってありますよね。(ありませんか。そうですか)
たとえば、ステータスラインを使ってモードを識別するようなのはすでに vim-powerline とか insert-statusline とかありますね。
でも、ステータスラインだと解像度の高いモニタで画面上部を編集しているときにステータスラインが目に入らなくて微妙に困ります。
そこで、行番号の色を変えてモードの識別をする Vim のプラグインをつくりました。行番号ならばカーソルがどこにあっても結構目立つ上、編集の邪魔にもあまりなりません。
vim-insert-linenr
NeoBundle 'cohama/vim-insert-linenr'
NeoBundle などでインストールすればすぐに使えます。
ノーマルモード時
インサートモード時
こんな感じで、行番号の色が反転表示になります。
明日は @ujihisa さんです。