ホーム > タグ > lv2
lv2
Hack #226: 複数のキーワードを手軽にハイライトする
- 2011-08-31 (水)
- Vim Hacks
問題
vim でファイルを編集している時やログファイルを閲覧している時に特定のテキストを目立たせたいと思ったことはありませんか?
私はあります。
例えば以下のような場合です。
- tcpdump の ログファイルを vim で閲覧していて特定の MACアドレス、IPアドレスを目立たせたい。
- ソースコードを編集していて、特定のキーワードの出現を(ハイライトさせて)意識しつつ編集を進めたい。
- fugitive.vim の
:Gblameコマンド(git blame)で特定の author を目立たせたい。
もちろん、 :Unite line 、あるいは / で検索してハイライトして目立たせる事は可能ですが、
複数の単語をハイライトさせたい場合は、 / では対応できません。
対処
quickhl.vim を使用すれば、手っ取り早く色を付けることができます。
動画を用意しました。 Youtube: quickhl.vim
※ 同様の事を目的としたプラグインとして、MultipleSearch 等があります。
インストール
quickhl.vim は vim.org や、github から入手可能です。
version 7.2 以上の vim で動作します。
Vundle を使用している場合は下記のコマンドでインストールできます。
:BundleInstall quickhl.vim
設定
quickhl.vim はデフォルトのキーマップを提供しませんので、ユーザーが .vimrc に設定する必要があります。
筆者オススメのキーマップは以下です。
nmap <Space>m <Plug>(quickhl-toggle)
xmap <Space>m <Plug>(quickhl-toggle)
nmap <Space>M <Plug>(quickhl-reset)
xmap <Space>M <Plug>(quickhl-reset)
nmap <Space>j <Plug>(quickhl-match)
上記の設定をした後、ノーマルモードで <Space>m を押すと、カーソル下の単語がハイライトされます。
同じ単語の上で、もう一度、 <Space>m を押すと、ハイライトがクリアされます。
すべてのハイライトをクリアしたい場合は、 <Space>M (スペースの後、大文字M)でクリアできます。
またビジュアルモードでテキストを選択して、 <Space>m を押すと、選択したテキストがハイライトされます。
複数行のテキストブロックのハイライトには対応していません。
ハイライトの追加削除は :QuickhlAdd , :QuickhlDel でも可能ですが、ハイライトしたい欲望は突然やってくるので、キーマップを設定して備えておくのがいいでしょう。
特定の単語を常にハイライトしたい場合は、 g:quickhl_keywords にキーワードを設定します。
例えば .vimrc に以下の様に設定します。
let g:quickhl_keywords = [
\ "ujihisa",
\ "tyru",
\ "Sixeight",
\ "t9md",
\ "thinca",
\ "Shougo",
\ ]
その他、一時的に特定のバッファでハイライトを無効(Lock)する、 :QuickhlLock コマンド等も用意されています。
詳しくは :help quickhl で確認して下さい。
- Comments: 2
- Trackbacks: 1
Vimテクニックバイブル紹介(Shougo版)
- 2011-08-15 (月)
- Vim script | 告知
この記事について
この記事は、開発環境勉強会における「Vimテクニックバイブル」紹介スライドの完全版です。 「Vimテクニックバイブル」については、taku_oさんやmattnさんなども記事を書いていますが、 私の場合はできるだけ本の内容に触れたものにしています。 これを読んでVimテクニックバイブルを購入していただける人が増えれば、著者達にとって最高の喜びです。
Vimテクニックバイブルができた背景
以前にもブログの記事で触れていますが、Vim界には良質な記事や書籍が不足しています。 特に、まともにVim scriptを書ける人が書いた書籍がほとんどありません。 これはVim界の大きな損失であり、Vim scriptプログラマーが育たない大きな原因となっています。 私がVim勉強会に参加すると、必ずといっていいほど聞かれるのが 「Shougoさんは、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- Comments: 0
- Trackbacks: 0
Hack #223: テキストを直感的に移動、複製する
- 2011-07-18 (月)
- Vim Hacks
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回押して、行を複製します。
あとは引数を微修正すれば完了です。
- Comments: 3
- Trackbacks: 0
Hack #215: Vundle で plugin をモダンに管理する
- 2011-04-30 (土)
- Vim Hacks
みなさんは増え続ける plugin のどのように管理されていますか。 pathogen+submodule を使う方法でしょうか。それとも未来に生き VimJolt を使用されているのでしょうか。
今回はモダンな plugin 管理方法として、Vundle を使った方法をご紹介します。
Vundle は Ruby on Rails 3 で採用されている、Gem 管理システム Bundler に影響を受けた、plugin 管理システムです。
開発は Github 上で行われています。 https://github.com/gmarik/vundle
導入
導入は以下の様に ~/.vim にリポジトリを clone すると完了します。
$ git clone http://github.com/gmarik/vundle.git ~/.vim/vundle.git
ドットファイルを git で管理されている方は、submodule として取り込んで下さい。
plugin の管理
plugin の管理は以下の様に .vimrc に Bundle ‘plugin name’ と記述することで行います。
set nocompatible
filetype off " (1)
set rtp+=~/.vim/vundle.git/ " (2)
call vundle#rc() " (3)
" original repos on github
Bundle 'tpope/vim-fugitive'
" vim-scripts repos
Bundle 'rails.vim'
" non github repos
Bundle 'git://git.wincent.com/command-t.git'
filetype plugin indent on " (5)
特徴的なのは (1) で filetype を一度 off にしている点です。 Vundle の処理が終り次第、(5) で ftplugin と indent を読み込むように指定しています。
(2), (3) で Vundle を初期化し、Bundle ‘plugin name’ を書くことで、plugin を読み込む準備が完了します。
Bundle コマンド
Github 上のリポジトリから取得する場合
Bundle 'user_name/repository_name'
の様に、Github のユーザ名とリポジトリ名を指定します。
vim-scripts 上のリポジトリから取得する場合
Bundle 'script_name'
の様に、plugin の名前を指定します。
それ以外の git リポジトリから取得する場合
Bundle 'git://repository_url'
の様に、Git リポジトリ のフルパスを指定します。
plugin の管理
plugin のインストールには、:BundleInstall コマンドを使用します。 先程、.vimrc に Bundle ‘name’ と記述した plugin が自動的に取得され、インストールまで行われます。
:BundleInstall
また、既にインストールされている plugin をアップデートするには、 :BundleInstall! コマンドを利用します。
:BundleInstall!
plugin を検索して、インタラクティブに管理することも出来ます。
:Bundles unite
上記のコマンドを実行すると、検索結果が split されて表示されます。リストから目的の plugin を選択し、インストール、削除などが行えます。
ドキュメント
以下のようにしてヘルプを生成します。
:helptags ~/.vim/vundle.git/doc
生成したヘルプは通常通り以下のように引くことが出来ます
:help vundle
参照
- gmarik/vundle
- :help vundle
- Comments: 2
- Trackbacks: 5
Hack #211: Haskellでimportするモジュールや関数をその場で調べつつ入力する
- 2011-04-06 (水)
- Vim Hacks
問題
Haskellで、標準添付ライブラリを含むなんらかの外部モジュールを利用するためにはimport文を記述する必要があります。例えばData.ListモジュールのunionとunionByという関数を使用するためには、
import Data.List (union, unionBy)
と記述します。また、Data.Listの全ての関数をLという名前に限定してimportするには、import qualified ~ as文を使います。
import qualified Data.List as L
いずれにせよ、importするためには事前に
- importするモジュール名
- (必要に応じて) そのモジュールからimportする関数名
を知っておく必要があります。非常に面倒な作業です。
解決
eagletmtさんの開発した、neco-ghcというVimプラギンを導入します。



上記画像を見ていただければ、説明するまでもないでしょう。
import<space>
まで打鍵した時点で、自動でモジュールの一覧が補完候補に現れます。括弧を書くと、自動でそのモジュールの関数一覧が補完候補に現れます。これらの動作はかなり高速です。
また、importした関数が地の文で補完可能となります。このとき、どのモジュール由来の関数なのかも分かります。至れりつくせりです。
参考
Haskellのimport文についての仕様はHaskell 2010 Language Reportをご覧ください。なお、neco-ghcがこの仕様のすべてを満たしている保証はありませんが、問題を発見し次第github上でpull requestを送っていただけたりすると大変助かります。
ujihisa- Comments: 1
- Trackbacks: 0
Hack #209: Vim で Ruby on Rails の開発を行なう
- 2011-03-28 (月)
- Vim Hacks
今回は rails.vim を紹介します。
rails.vim は Ruby on Rails 開発者には必須の Plugin です。
各所で紹介されている有名な Plugin ですが、導入されていない方は 、4 月からの仕事に向けて是非導入を検討してください。
http://www.vim.org/scripts/script.php?script_id=1567
用途は主に 3 種類あります。
rails コマンド、Rake の代用
例えば、Ruby on Rails のプロジェクトディレクトリで、以下のように打鍵すると Controller の作成が行えます。
:Rgenerate controller names index new create
他にも :Rake や :Rserver, :Rlog, :Rails などが定義されています。
ファイラとしての rails.vim
rails.vim では、Alternate Files, Related Files という概念が導入されています。
以下にhelp (:help rails) から例を引用します。
| Current file | Alternate file | Related file ~ |
| model | unit test | schema definition |
| controller (in method) | functional test | template (view) |
| template (view) | functional test | controller (jump to method) |
| migration | previous migration | next migration |
| config/database.yml | config/routes.rb | config/environments/*.rb |
現在開いているファイルが Model だった場合、Alternate file は Unit Test、Related file は schema definition (db/schema.rb) という意味です。
移動には :A, :R というコマンドを使用します。:A は Alternate file への移動、:R は Related file への移動が行えます。
また、ファイルの開き方によって以下の5種類のコマンドが定義されています。:A, :R 共通です。
| :AE | :A と等価、現在の Window に開く |
| :AS | Window を分割して開く |
| :AV | Window を縦に分割して開く |
| :AT | 新しい Tab に開く |
| :AD | 現在の Buffer に展開する |
ほかにも、:find や、:Rfind といった便利なコマンドがたくさん用意されています。
Syntax highlight や、略語の追加
Ruby on Rails での開発を助ける様々な設定が追加されます。
Syntax highlight に始まり、便利な略語、gf の拡張など、かゆいところに手の届く Plugin と言えます。
以下に help より略語の一部を引用します。
| rp( | render :partial => |
| rp( | render :partial => |
| vs( | validates_size_of |
| pa[ | params |
| AR:: | ActionRecord |
| :a | :action => |
まとめ
優れた Plugin には優れたドキュメントが用意されています。
:help rails に全てが集約されていますので、使用される方は通読することをお勧めします。
- Comments: 0
- Trackbacks: 0
Hack #208: 英語を正確に素早く入力する
- 2011-03-22 (火)
- Vim Hacks
問題
コミットログを書く、メールを書く、仕様を記述する、その他一般の自然言語で文書を記述するとき、もっとも頻繁に使われる言語は英語でしょう。英語を正確にかつ素早く入力することができれば、間接的にあなたの開発速度を高めることにつながるでしょう。これをVimでどのように支援できるのでしょうか。
Hack #72: 英語の誤入力を防ぐで、一旦英単語を入力してから、その英単語が正しかったか誤っていたかを判別し、そして容易に訂正する方法を紹介しました。今回はこれに加えて、どのようにして 速く 入力できるようにするかということについてに焦点をあてます。
解決
neco-lookというVimプラギンを導入します。
http://www.vim.org/scripts/script.php?script_id=3440

入力途中の英単語から得られる補完候補を出します。かなり速くサクサク動きます。
neco-lookはneocomplcacheとlookコマンドに依存しています。lookコマンドは、Mac OS XのようなBSD系OSなら最初から/usr/bin/lookなどにあるはずです。
- Comments: 0
- Trackbacks: 0
Hack #203: 定義されているマッピングを調べる
- 2011-02-27 (日)
- Vim Hacks | Vim script
定義されているマッピングを調べたくなった時はないでしょうか。
- このプラグインが作ったバッファではどんなマッピングが定義されているのか
- 変なマッピングが定義されていないか
- Vimプラグインの作者と会話していてマッピングを調べるように言われた
- etc.
様々なケースで必要になってきます。(大半の人にとっては1のケースでしょうが)
どうやって調べればいいでしょうか。
:AllMaps
:AllMapsを使います。
次のコードを.vimrcに貼り付けましょう。
command!
\ -nargs=* -complete=mapping
\ AllMaps
\ map <args> | map! <args> | lmap <args>
kana氏の.vimrcに定義されていた:Allmapにインスパイアされたのでそちらも興味があれば参照してください。
使い方
" 全てのマッピングを表示
:AllMaps
" 冒頭で言った1のケースのように現在のバッファで定義されたマッピングのみ表示
:AllMaps <buffer>
" どのスクリプトで定義されたかの情報も含め表示
:verbose AllMaps <buffer>
短くシンプルながらも他のExコマンドと組み合わせることで効果を無限大に発揮できるExコマンドです。
:Capture
また作者が作った:CaptureというExコマンドがあります。
引数に指定したExコマンドを実行し、
コマンドラインへの出力をバッファに表示するというものです。
出力から検索したい場合などに便利です。
(筆者のブログの記事も参照してください)
command!
\ -nargs=+ -complete=command
\ Capture
\ call s:cmd_capture(<q-args>)
function! s:cmd_capture(q_args) "{{{
redir => output
silent execute a:q_args
redir END
let output = substitute(output, '^\n\+', '', '')
belowright new
silent file `=printf('[Capture: %s]', a:q_args)`
setlocal buftype=nofile bufhidden=unload noswapfile nobuflisted
call setline(1, split(output, '\n'))
endfunction "}}}
このExコマンドを使えば次のようにしてバッファに出力を書き込むことができます。
" 全てのマッピングをバッファに書き込む (/コマンドで検索できる)
:Capture AllMaps <buffer>
もう少し:Captureについて (vimshell)
vimshellではコマンドラインでの入力で先頭に:をつけるとVimスクリプトのExコマンドだと解釈してくれます。
これはvexeという内部コマンドを使っているので興味があればそちらも参照してください。
(以下$がvimshellのプロンプトだとします)
$ cd # ホームディレクトリに移動
$ ls # /bin/lsを実行 (実際にはlsは内部コマンドで、それが/bin/lsを呼び出しているようです)
bin git
$ :ls # :lsを実行。バッファリストを表示
1 a "~/memo/todo.txt" line 0
3 a "~/.vimrc" line 0
とても便利でクールですね。
もう少し:Captureについて (unite.vim)
unite.vimのunite-outputというsource(:help unite-sources)を使えば
Vimスクリプトの出力をuniteバッファに取り込み、絞り込むことができます。
詳しくは:help unite-source-outputを参照してください。
- Comments: 0
- Trackbacks: 0
Hack #202: 自動的にディレクトリを作成する
- 2011-02-20 (日)
- Vim Hacks
Vim で新しいファイルの編集を始めるとき、そのファイルがあるべきディレクトリが存在しないことがあります。この状態だと、Vim はファイルを保存することができません。 ただし、Vim に設定を追加することで自動的にディレクトリを作成することが可能です。
設定
ファイルを開いた際にディレクトリを作成する設定もありますが、そうすると試しに開いて結局保存しなかった場合にディレクトリだけ残ってしまいます。ここでは、保存する際に同時にディレクトリを作成する設定を紹介します。
augroup vimrc-auto-mkdir " {{{
autocmd!
autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'))
function! s:auto_mkdir(dir) " {{{
if !isdirectory(a:dir)
call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
endif
endfunction " }}}
augroup END " }}}
保存直前に、ファイルを保存すべきディレクトリがあるかをチェックして、ない場合に作成しています。
これだと、すでにあるディレクトリ名と間違えてファイルを開いていた場合でも気付かないうちに生成されてしまう場合があります。ディレクトリを作るかどうか確認する処理を入れることも可能です。
augroup vimrc-auto-mkdir " {{{
autocmd!
autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang)
function! s:auto_mkdir(dir, force) " {{{
if !isdirectory(a:dir) && (a:force ||
\ input(printf('"%s" does not exist. Create? [y/N]', a:dir)) =~? '^y\%[es]$')
call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
endif
endfunction " }}}
augroup END " }}}
thinca
- Comments: 0
- Trackbacks: 1
Hack #199: :helpに慣れ親しむ
- 2011-02-05 (土)
- Vim Hacks
タグ名の規則を知らないと引けない
さて、少しだけHack #45のおさらいです。
関数は「()」を末尾に持つタグを持っています。
オプションは「’(シングルクォート)」で囲まれたタグを持っています。
Exコマンドは先頭に「:(コロン)」を持つタグを持っています。
また英語版以外のhelpが用意されている場合はタグ名に続けて「@ja」のように@ + {各言語特有の2文字の文字列} が続きます。
しかし英語版とその他の言語といったように両方存在した場合は
英語版のタグにも@enという文字列が末尾につきます。
ちなみにこの2文字は「help.jax」だったら「ja」、 「help.frx」だったら「@fr」のように 各言語のhelpファイルの拡張子から末尾のxを取った2文字です。 英語だけは例外で「.txt」という拡張子のhelpファイルです。
コマンド(!= Exコマンド)はだいたい次のような規則になっています。
{モード}_[CTRL-]{キー}
またさらに{キー}の部分は次のようになっています。
{キー1}
{キー1}_{キー2}
{キー1}_{キー2}_{キー3}
...
のように押すキーの数だけ以下続いていきます。
実践的な例
さてこの記事では少し進んだ実践的な例を出すことにしましょう。
例えば:help v_<という項目は
- ヴィジュアルモードの(v)
<というキー
で実行されるコマンドということです。
また、:help i_CTRL-R_=という項目は
- インサートモードの(i)
<C-r>=というキー
で実行されるコマンドということです。 コントロールキーは「CTRL-」で表されます。 また2個以上キーが続く場合はこのように「_(アンダーバー)」で区切られます。
コマンドラインではワイルドカードを使うことができ、
<Tab>を押した時点でマッチする候補をリストアップしてくれます。
(この際の挙動は'wildchar', 'wildmode'、'wildmenu'の値に強く依存します。以下この記事では'wildchar'が<Tab>、'wildmode'が"full"、'wildmenu'がオンだと仮定します)
「buf」を含む関数
:help *buf*()<Tab>
関数は「()」を末尾に持つタグを持っています。
「wild」を含むオプション
:help '*wild*'<Tab>
前のと同じですね。 オプションは「’(シングルクォート)」で囲まれたタグを持っています。
頭が「:Neo」で始まるExコマンドを日本語版helpのみから
:help :Neo*@ja<Tab>
Exコマンドは先頭に「:(コロン)」を持つタグを持っています。
@ + 2文字の文字列を末尾に持ちます。
<C-d>
コマンドラインで<Tab>の代わりに<C-d>を押すと
カーソルより前のパターンに一致する名前を
コマンドラインに一覧表示してくれます。
例えば前述の頭が「:Neo」で始まるExコマンドを日本語版helpのみから探し出そうとした場合、
<Tab>と<C-d>では以下のような違いがあります。
最初の状態
<Tab>
<C-d>
<C-d> => 項目名は?
ちなみにこの<C-d>のタグ名は、
ここまで読まれた方なら分かると思いますが
:help c_CTRL-d
です。Vim日本語ドキュメントがインストールされている場合その項目名は?
:help c_CTRL-d@ja
です。 少し慣れましたでしょうか。 大丈夫、焦らずとも使ってる内に慣れます。
注意点
ワイルドカードは使えないので、カーソル下の単語を探すコマンド*の項目は:help starです。
また、このコマンドはノーマルモードのものなので:help n_starじゃないか?と思われた方もいるかもしれません。
このようにノーマルモードの項目は先頭にn_と付きません。
なので冒頭で言った次のような規則は嘘でした。
{モード}_[CTRL-]{キー}
正確に言えばノーマルモードの場合のみ
[CTRL-]{キー}
になります。
:helpgrep
Hack #45にもありますが、:helpgrepはhelpを全文検索するExコマンドです。
:grepや:vimgrepなどと同じインターフェースで使えます。
unite-help
またunite.vimというプラグインのunite-helpというプラグインがあります。
これは限られたコマンドラインでワイルドカードを駆使して探すことなく
helpを全文インクリメンタル検索することができるので、
初心者でも手軽に、また:helpよりもより素早く項目を探すことができます。
:helpgrepのインクリメンタル検索版というとわかりやすいでしょうか。
まさにunite.vimの真価を発揮するプラグインと言えるでしょう。
ref.vim
また直接は関係がないのですが、
ref.vimというmanやperldocやpydocやrefeなど
その他いろんなマニュアルを引けるプラグインが存在します。
これをインストールすることで、デフォルトのKの挙動が
Vimの:helpを引くだけでなく、perlスクリプトでperldocを引くようになったりと大幅に拡張されます。
- Comments: 0
- Trackbacks: 0
Home > Tags > lv2
- Search
- Feeds
- Links



