2016年2月24日
Vim-Galore : Vimについて知っておくべき全てのこと (3/5)
本記事は、原著者の許諾のもとに翻訳・掲載しております。
(訳注: 2016/2/26、記事タイトルを変更いたしました。)
特定のトピックについての記述をご希望ですか? Issue を立てるか、 Twitter で私までお知らせください!ありがとう!
はじめに
基礎
- バッファ/ウインドウ/タブ
- アクティブ/読み込み済み/一覧表示/名前付きバッファ
- 引数リスト
- マッピング
- マップリーダー
- レジスタ
- 範囲
- マーク機能
- 補完
- モーション/オペレータ/テキストオブジェクト
- autocmd
- 変更履歴リスト/ジャンプリスト
- アンドゥツリー
- クイックフィックスと位置リスト
- マクロ
- カラースキーム
- 折り畳み機能
- セッション
- ローカリティ
使用方法
- オフラインでのヘルプ
- オフラインでのヘルプ(代替案)
- オンラインでのヘルプ
- クリップボード
- ファイルを開いたときのカーソルの位置を元に戻す
- バックアップ/スワップ/アンドゥ/viminfoファイル
- リモートファイルの編集
- プラグインの管理
- ブロックの挿入
- 外部プログラムの実行とフィルタの使用
- matchit
ヒント
- 適切なnとNの振る舞い
- 適切なコマンドライン履歴
- 適切なCTRL-L
- ビープ音とビジュアルベルを無効にする
- 現在の行を動かす
- 空行を追加する
- マクロを編集する
- ヘッダやソースファイルにジャンプする
- GUIのフォントサイズを変更する
- モードに応じてカーソルスタイルを変更する
- セレクションを横に移動させた時に見失わない
- 保存時にファイルをリロードする
- スマートなカーソルライン
- より速いキーワード補完
コマンド
- :global – マッチする全ての行でコマンドを実行する
- :normalと:execute – スクリプトの夢のチーム
- :redir – メッセージのリダイレクト
デバッグ
- 一般的なヒント
- 起動時間のプロファイル
- ランタイムでのプロファイル
- verbose
- Vimスクリプトのデバッグ
- 構文ファイルのデバッグ
その他
- その他の資料
- Vimのディストリビューション
- 標準プラグイン
- CapsLockをCtrlにマップする
- イースターエッグ
- なぜナビゲーションはhjklなのか?
Quirks
- 小さいファイルの編集が遅い
- 大きいファイルの編集が遅い
- NULに使われる改行
- 括弧付きペースト(なぜいつも”paste”を設定しなくてはならないのか)
- ターミナルでEscを使った時の遅延
カラースキームのリスト
プラグインのリスト
Neovim
使い方
オフラインでのヘルプの利用
Vimには、特殊なレイアウトのテキストファイル群から成る素晴らしいヘルプ文書が付属しています。Vimはタグをベースとするシステムを使って、これらのヘルプファイルの特定の部分にアクセスします。
まず始めに :help :help
を実行し、読んでください。新しいウィンドウで $VIMRUNTIME/doc/helphelp.txt
というファイルが開いて、ファイル内の :help
タグに移動します。
簡単なルールがいくつかあります。
- オプションはシングルクオートで囲む。 例
:h 'textwidth'
- VimLの関数は()で終わる。 例
:h reverse()
- コマンドは : で始める。 例
:h :echo
<c-d>
(ctrlキー + dキー)を使えば、入力したクエリに一致する全てのタグのリストが出力されます。例えば、 :h tab<c-d>
と入力すると、 tab
の項の 'softtabstop'
から setting-guitablabel
まで全てのタグがリスト出力されます。
VimLの関数全部のリストが欲しければ簡単です。 :h ()<c-d>
。ウィンドウは別なほうがよければ、 :h win*()<c-d>
です。
ヘルプはすぐにうまく使えるようになりますが、特に最初のうちは、どんなタグを探せばいいのか見当がつかない時もあるでしょう。そんな時は関係のありそうなキーワードをいくつか思い浮かべてください。 :helpgrep
が役に立ちます!
:helpgrep backwards
このコマンドで、全てのドキュメントファイルから “backwards”という単語を探し、最初にヒットした箇所に移動します。検索結果はQuickfixリストの形に集約されます。 :cn
/ :cp
を使えば、次の/前の結果に移動します。または :copen
でQuickfixリストをウィンドウ表示にして、 <cr>
を入力すればヒットした行に移動します。全容は :h quickfix
を参照してください。
オフラインでのヘルプ(代替案)
次のリストは、Vim開発者の中でも活動的な@chrisbraによってまとめられ、 vim_dev に掲載されています。
若干の変更を加えてここに掲載しています。
探しているものが分かっていれば、ヘルプの検索を使った方が大抵の場合は簡単に見つかります。項目はスタイルガイドに沿って分類されています。
持っているVimのバージョンのヘルプで検索できるので、持っているバージョンより古いヘルプ項目や新しいヘルプ項目が検索結果に出ることはありません。
そのため、ヘルプの使い方やヘルプで使用されている言語を覚える必要があります。いくつか例を挙げます(内容的に不完全あるいは書き忘れたことがあるかもしれません)。
-
オプションはシングルクウォート(一重引用符)で囲まれています。リストオプションのヘルプを検索する際には、
:h 'list'
を使用します。もし、特定のオプションを検索する場合は、:h options.txt
と入力し、全てのオプションが記述されているヘルプのページを開いて、/width
のような正規表現を使用して検索することができます。オプションによっては、例えば:h cpo-a
や:h cpo-A
、:h cpo-b
のように名前空間を持っています。 -
コマンドのノーマルモードは名前のとおりです。
:h gt
と入力し、ヘルプページの”gt”コマンドを見ることができます。 -
正規表現の項目は必ず”/”で始まります。よって、
:h /\+
はVimの正規表現の”+”量指定子のヘルプにたどり着きます。正規表現について知りたい場合は、:h pattern.txt
と入力して、表示されるテキストを読んでください。 -
キーの組み合わせは通常、使用できるモードを表す1文字から始まります。例えば、
:h i_CTRL-X
は、単語の補完やウィンドウスクロールのできる挿入モードのCTRL-Xコマンド類を見せてくれます。キーには、常に同じように書かれるものがあることに注意してください。例えば、コントロールキーは常にCTRLと記載されます。ノーマルモードコマンドに関するヘルプの場合は、ノーマルモードを表す”n”は必要なく、:h CTRL-文字で十分です。例えば:h CTRL-A
のように。反対に、:h c_CTRL-R
はCTRL-Rがコマンドラインで何をするのか表示します。:h v_Ctrl-A
はビジュアルモードで数字のインクリメントを行い、:h g_CTRL-A
はgコマンドを表示します(このように”g”を押します)。この”g”はノーマルコマンド”g”を意味し、”z”から始まるコマンドと同じように、続く文字が必要となります。 -
レジスタは常に”引用符”で始まるので、
:h quote
を入力して、表示される特定の”:”レジスタに関するテキストを読んでください。 -
Vimスクリプト(VimL)は、
:h eval.txt
で表示されます。’X’を:h expr-X
と入力すれば、言語の特定の一面が表示されます。例えば、:h expr-!
と入力すると、VimLの’!’ (論理否定)演算子の簡単な説明が表示されます。 -
:h map.txt
と入力すれば、ヘルプページでマッピングについての説明が読めます。:h mapmode-i
と入力すると、:imap
コマンドについての説明が読めます。また、:map-topic
と入力すると、マッピングに関する小項目が表示されます(例えば、:h :map-local
でバッファローカルマッピング、:h map_bar
で’|’がマッピングでどのように扱われているのかが表示されます)。 -
コマンドの定義は、
:h command-*
で表示されます。:hコマンドバーを使用すれば、カスタムコマンドの’!’引数についての説明が読めます。 -
ウィンドウ制御コマンドは必ずCTRL-Wで始まります。
:h CTRL-W_*
(*に文字を入れる)と入力すれば該当のヘルプが表示されます(例えば、:h CTRL-W_p
と入力すると前のウィンドウに移るヘルプが表示されます)。また、ウィンドウ操作に関するコマンドについては:h windows.txt
にアクセスして説明を読んでください。 -
Exコマンドは常に”:”で始まるので、
:h :s
に”:s”コマンドが含まれます。 -
項目を入力した後で、CTRL-Dを使用すれば、Vimにある関連した項目を全て表示してくれます。
-
:helpgrep
を使用すれば、全ヘルプページで検索できます(プラグインでインストールされたヘルプページも大抵含まれます)。:h :helpgrep
と入力して、使い方を参照してください。項目を検索するとクイックフィックス (あるいはロケーション) ウィンドウで表示可能になり、:copen
や:lopen
で開くことができます。さらに/を使用して検索を絞り込むことができます。 -
:h helphelp
と入力すれば、ヘルプの使い方に関する情報を見ることができます。 -
ユーザマニュアルは初心者にとってより親しみやすい項目について説明しています。
:h usr_toc.txt
から始めると、目次が出てきます(おそらく想像通りです)。興味を引く項目がないか見てください。例えば、24章に”Digraphs”や”特殊文字入力”のような項目があります(このヘルプページに移りたい場合は、:h usr_24.txt
と入力してください)。 -
ハイライトグループのコマンドは常に
hl-*
で始まります。例えば、:h hl-WarningMsg
は、”WarningMsg”(警告メッセージ)グループをハイライトするよう指定できます。 -
構文ハイライトは”:syn-topic”の名前空間を持ちます。例えば、
:h :syn-conceal
は:syn コマンドの Conceal 引数について書かれています。 -
クイックフィックスコマンドは大抵”:c”で始まり、ロケーションリストコマンドは大抵”:l”で始まります。
-
:h BufWinLeave
でBufWinLeaveの自動コマンドを説明します。全てのイベントは:h autocommands-events
で説明されています。 -
起動引数は常に”-“で始まります。よって、
:h -f
を入力するとVimの”-f”コマンドスイッチのヘルプが表示されます。 -
オプションの機能は常に”+” から始まります。よって、conceal機能の使い方について調べるのであれば
:h +conceal
を入力してください。 -
エラーと警告のコードを直接ヘルプで見つけることができます。
:h E297
でエラーメッセージの説明を読むことができます。しかしながら、エラーコードによっては説明されていないものがありますが、大抵はそれを引き起こすVimコマンドに記載されています。例えば、:h hE128
と入力すると、直接:function
コマンドに移ります。 -
構文ファイルを含むドキュメントは通常
:h ft-*-syntax
で見つけることができます。例えば、:h ft-c-syntax
では、C構文ファイルとそのファイルで提供されるオプションを見つけることができます。場合によっては、オムニ補完(:h ft-php-omni
)やファイルタイプのプラグイン(:h ft-tex-plugin
)を提供していることがあります。
さらに、存在する場合は、ユーザドキュメント(多くの場合、コマンドの説明はユーザ視点からのものが多く、詳しく書かれているものは少ない)へのリンクはヘルプページの一番上に記載されています。 :h pattern.txt
でユーザマニュアルの項目である :h 03.9
と :h usr_27
を見ることができます。
オンラインでのヘルプ
どうしても解決のできない問題があったり、一般的な情報が必要だったりする場合は、 vim_use のメールリストを参照してください。別の素晴らしい資料としては、 IRC があります。 Freenode の #vim
チャンネルを使用している人が多く、役立つ情報を多く得ることができます。
Vimのバグの報告は vim_dev メールリストを使ってください。、
クリップボード
GUIサポートのないVimをUNIXシステムで使用する際に、 'clipboard'
オプションを使用する場合は、 +clipboard
、そして随意で +xterm_clipboard
機能 が必要となります。
関連するヘルプ:
:h 'clipboard'
:h gui-clipboard
:h gui-selections
記事後半の括弧付きペースト(なぜいつも”paste”を設定しなくてはならないのか)も参照してください。
クリップボードの使用法(Windows、OS X)
Windowsには clipboard 機能があります。OSXには pasteboard 機能があります。
両方ともユーザが期待するような機能です。コピーしたいテキストを ctrl+c/cmd+c
で選択し、 ctrl+v/cmd+v
で別のアプリケーションにペースト(貼り付け)できます。
コピーされたテキストはクリップボートに移されるため、コピー元のアプリケーションを他のアプリケーションにペーストする前に閉じても問題はないことを覚えておいてください。
この作業の時、クリップボードレジスタの *
には選択範囲の文字列が入ります。Vimからは、 "*y
や "*p
を使ってクリップボートにあるテキストをヤンク・ペーストしてください。
常に *
レジスタを指定したくない場合は、次をvimrcに入れてください。
set clipboard=unnamed
通常、ヤンク/削除/貼り付け機能の場合、 "
レジスタが使われます。この場合、 *
レジスタが同じ機能に使用されるため、 y
や p
と入力するだけで十分になります。
繰り返しになりますが、上のオプションを使用することで、同じVimのウィンドウで使用する場合でも、全てのヤンク・ペーストでクリップボードは変更されます。これが便利かどうかは使い手次第です。
y
とタイプするのさえ面倒な人は、設定を次のようにすることで全てのビジュアル選択をクリップボードに送ることができます。
set clipboard=unnamed,autoselect
set guioptions+=a
関連するヘルプファイル:
:h clipboard-unnamed
:h autoselect
:h 'go_a'
クリップボードの使用法(Linux、BSD他)
お使いのOSが X の場合、クリップボートの使い方は若干変わってきます。Xは X Window System Protocol のオープンソース実装で、1987年から提供されており、現在バージョン11が提供されています。そのため、X11とも呼ばれます。
以前、X10のバージョンで カットバッファ が導入されました。これは、 クリップボード のようなもので、コピーされたテキストはXによって格納され、全てのアプリケーションからアクセスが可能でした。この仕組みは今でもXに存在しますが、今では使用が反対され、多くのソフトウェアではもう使用されていません。
現在はアプリケーション間のデータの移動は、 セレクション 機能で実行されます。定義された3つの セレクションアトム の中でも、実際使用されているのはプライマリ選択とクリップボード選択の2つのみです。
この2つのセレクションは次のように機能します。
Program A: <ctrl+c>
Program A: クリップボードの所有権を持ちます
Program B: <ctrl+v>
Program B: クリップボードの所有権はProgram Aにあります
Program B: Program Aにデータをリクエストします
Program A: リクエストに応答して、Program Bにデータを送ります
Program B: Program Aからデータを受け取り、ウィンドウに挿入します
選択 | 使用する時 | ペーストの方法 | Vimからアクセスする方法 |
---|---|---|---|
プライマリ | テキストの選択 | middle-click や shift+insert の入力 |
* レジスタ |
クリップボード | テキストの選択および ctrl+c の入力 |
ctrl+v の入力 |
+ レジスタ |
注:セレクションがXサーバに格納されることは絶対にありません(クリップボードセレクションでさえ格納されません)。そのため、アプリケーションを終了すると ctrl+c
でコピーしたものは失われます。
"*p
を使用してプライマリ選択したものをペーストするか、 "+y1G
を使用して、クリップボード選択へファイル全体をヤンクしてください。
もし、この2つのレジスタにアクセスする頻度が高い場合は、次を使うのも良いでしょう。
set clipboard^=unnamed " * register
" or
set clipboard^=unnamedplus " + register
( ^=
はデフォルト値の :h :set^=
を追加するときに使います)
これで全てのヤンク/削除/貼り付け機能は、無名の "
レジスタの代わりに *
か +
で使用することができます。これによって、後で y
や p
でX選択に簡単にアクセスすることができます。
関連するヘルプ:
:h clipboard-unnamed
:h clipboard-unnamedplus
ファイルを開いてカーソルの位置を元に戻す
この機能がないと、ファイルを開くとカーソル位置は一行目に戻ります。この機能があれば、カーソルの位置はファイルを閉じる前に作業していたところに復元します。
次をvimrcに追加してください。
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
これを追加することで、作業していた場所が存在すれば(他のプログラムによってファイルの行数が減っている場合があります)、 g`"
(ジャンプリストを変更することなく、最後に作業していた場所にカーソルが移動します)が実行されます。
これをするには、 :h viminfo-'
というviminfoファイルを使用する必要があります。
バックアップ/スワップ/アンドゥ/viminfoファイル
オプションによっては、Vimは最大で4つの作業ファイルを作成します。
バックアップファイル
Vimに元のファイルをバックアップするように指定できます。デフォルトでVimはバックアップを自動的に作成しますが、元のファイルの書き込みが成功するとバックアップを削除してしまいます( :set writebackup
)。最新のバックアップファイルを取っておく場合は、 :set backup
を使います。あるいは、 :set nobackup nowritebackup
でバックアップを作成しないよう設定することもできます。
では、私が最後にvimrcに追加したものを見てみましょう。
$ diff ~/.vim/vimrc ~/.vim/files/backup/vimrc-vimbackup
390d389
< command! -bar -nargs=* -complete=help H helpgrep <args>
関連するヘルプ: :h backup
スワップファイル
例えば、最高のサイエンスフィクション小説を書くアイデアが浮かんだとします。何時間も没頭して何千のも文字を書き続けて、停電になってしまったとします。そして、 ~/wicked_alien_invaders_from_outer_space.txt
を保存していなかったことに気が付きます。
絶望的ではないのでご安心を。ファイルを編集する際、Vimはオリジナルに保存されていない変更箇所を保持するスワップファイルを作成します。試してみましょう。ファイルを開いてみて :swapname
で現在のスワップファイルがあることを確かめてみてください。 :set noswapfile
をvimrcに追加することでスワップファイルも作成されないよう設定できます。
デフォルトで、スワップファイルは編集したファイルと同じディレクトリに .file.swp
のような名前で作成されます。スワップファイルの更新は200文字が変更された場合または4秒間タイプしていない場合にされます。ファイルの編集が終了するとスワップファイルは削除されます。更新の設定は :h 'updatecount'
や :h 'updatetime'
を使用して変更することが可能です。
停電のせいでスワップファイルは削除されることはありませんでした。Vimで ~/wicked_alien_invaders_from_outer_space.txt
を入力すれば、Vimはファイルを復元してくれます。
関連するヘルプ: :h swap-file and :h usr_11
アンドゥファイル
アンドゥファイル はメモリに格納され、Vimを終了すると削除されます。残しておきたい場合は、 :set undofile
にします。すると、 ~/foo.c.un~
にアンドゥファイルを ~/foo.c
として保存することができます。
関連するヘルプ: :h 'undofile'
および :h undo-persistence
Viminfoファイル
バックアップファイルやスワップファイル、アンドゥファイルはどれもテキストの状態に関するものでした。viminfoファイルはそれ以外のもの、Vimを終了すると失われてしまうものを保存するために使用します。viminfoファイルには履歴(コマンドライン、検索、入力)、レジスタ、マーク、バッファリスト、グローバル変数などが格納されます。
デフォルトでviminfoは ~/.viminfo
に書き込まれるよう設定されています。
関連するヘルプ: :h viminfo
および :h 'viminfo'
私のように、上記全てのファイルを同じ場所、例えば ~/.vim/files
に格納したい場合は次のとおりです。
set backup
set backupdir =$HOME/.vim/files/backup/
set backupext =-vimbackup
set backupskip =
set directory =$HOME/.vim/files/swap//
set updatecount =100
set undofile
set undodir =$HOME/.vim/files/undo/
set viminfo ='100,n$HOME/.vim/files/info/viminfo
~/.vim/files
ディレクトリは前もって作成する必要があります。作成しておかないとエラーが生じます。頻繁に新しいホストで作業をする場合は、これを自動化した方がいいでしょう。
if exists('*mkdir') && !isdirectory($HOME.'/.vim/files')
call mkdir($HOME.'/.vim/files')
endif
注:共有のシステムで編集をしていて、スワップファイルがすでにあるとVimが知らせてきた場合、他の人がファイルを編集している最中であることを意味します。この”機能”は、スワップファイルをホームディレクトリに保存してしまうと失われてしまいます。
リモートファイルの編集
Vimにはリモートファイルの編集を可能にするnetrwプラグインが付いてきます。実際には、リモートファイルをローカルtempファイルにscp経由で移動し、そのファイルを使用してバッファを開き、変更をリモートファイルに書き込み、保存します。これは、ローカル設定で使用したい場合は、サーバにSSHしたり、管理者に指示されたものを使ったりするよりも、遥かに便利です。
:e scp://bram@awesome.site.com/.vimrc
~/.ssh/config
がすでに設定されている場合は、自動的に次のことが実行されます。
Host awesome
HostName awesome.site.com
Port 1234
User bram
これが、 ~/.ssh/config
の中にあれば、下も可能です。
:e scp://awesome/.vimrc
~/.netrc, see :h netrw-netrc
を使用しても同じようなことができます。
:h netrw-ssh-hack
と :h g:netrw_ssh_cmd
は必ず読むようにしてください。
また、 FUSE を使用する sshfs を使用してリモートファイルシステムをローカルファイルシステムに搭載する方法もあります。
プラグインの管理
Pathogen は、プラグインを管理するための最初の人気のあるツールです。実際に行っていることは、全てを適したディレクトリの下に含めるように ランタイムパス ( :h 'rtp'
)を調整する、というものです。プラグインのレポジトリを、自分の手でクローニングしなくてはいけません。
実際のプラグインマネージャはVimの中からプラグインをインストールしアップデートするコマンドを提供します。以下に挙げるのは、一般的に使われるマネージャのリストをアルファベット順に並べたものです。
私のお気に入りはplugです。でも皆さんの役に立つのは、様々かもしれません。
ブロックの挿入
これは複数の連続した行に、同じテキストを同時に挿入するテクニックです。こちらの デモ を見てください。
<c-v>
でビジュアルブロックモードに切り換えます。その後、数行ほど下へ移動したら、 I
あるいは A
を押して、テキストを入力し始めましょう。
最初は少し当惑するかもしれませんが、テキストはいつも現在の行に挿入され、現行の挿入が終わった後にだけ、先のビジュアルセレクションの行すべてに同じテキストが適用されます。
簡単な例としては、 <c-v>3jItext<esc>
になります。
もしも異なる長さの行があり、各行の終わりに同じテキストを付け加えたいのなら、次のことを実行しましょう。 <c-v>3j$Atext<esc>
時には、現在の行の終わりのどこかにカーソルを置く必要があることもあります。これはデフォルトでは行えませんが、オプションの Virtualedit
を設定することができます。
set virtualedit=all
その後で、行の最後であっても $10l
あるいは 90|
が働きます。
さらに情報が欲しい方は、 :h blockwise-examples
を参照してください。最初は複雑に思えるかもしれませんが、すぐに習慣づくでしょう。
もしも本当に手の込んだものがお望みなら、 マルチカーソル を見てみましょう。
外部プログラムの実行と、フィルタの使用
免責事項:Vimはシングルスレッドなので、外部のプログラムをフォアグラウンド処理で実行すれば、他のものも全部ブロックされてしまいます。もちろん、LuaなどのVimのプログラミングインターフェースや、そのスレッドのサポートを使うことができます。しかしそれでも、その間Vimのプロセスはブロックされます。Neovimは適したジョブAPIを加えることで、この問題を解決します。
(どうやらBramはVimにもジョブコントロールを加えることを検討しているようです。最新のバージョンを持っているなら、 :helpgrep startjob
を見てください。)
ジョブを始めるために、 :!
を使いましょう。現在稼働しているディレクトリでファイルをリスト化したいのなら、 :!ls
を使いましょう。通常どおりシェルの中で命令するためには、 |
を使います。例えば、 :!ls -1 | sort | tail -n5
のような感じです。
範囲がないのなら、 :!
のアウトプットはスクロールできるウィンドウで見られるでしょう。その一方、範囲が与えられているのなら、これらの行は フィルタに になるでしょう。つまり、フィルタプログラム上で 標準入力 によって命令されているということです。そして処理はフィルタの 標準出力 によって置き換えられます。例えば、次の5行のために数字を用意するためには、次を使いましょう。
:.,+4!nl -ba -w1 -s' '
手動で範囲を加えることはかなり面倒なので、Vimは便利なヘルパーも用意しています。範囲にはよくあることですが、ビジュアルモードで行を選択することもでき、それから :
をヒットします。また、動作を行う !
オペレータもあります。例えば、 !ip!sort
は、現在のパラグラフの行をソートします。
フィルタリングの良いユースケースとしては、 Go programming language があります。このインデントは独断的ですが、Goのソースコードを適切にインデントする gofmt
と呼ばれるフィルタも付いてきます。ですからGoのためのプラグインは、しばしば :Fmt
と呼ばれるヘルパーコマンドを提供します。それは基本的には :%!gofmt
を行い、ファイルの全ての行をインデントします。
現在の行より下でプログラムのアウトプットを取り出すために、しばしば :r !prog
が使われます。これはスクリプトには問題ありませんが、実行中の場合には代わりに :r !prog
を使う方が簡単だと思います。これは現行の行と置き換わるものです。
:h filter
:h :read!
Matchlt
VimはC言語内で書かれたものなので、多くの特徴はC言語に似た構文と考えられます。デフォルトでは、カーソルが {
あるいは #endif
にある時、 %
を使ってそれぞれ対応する }
や #ifdef
にジャンプすることができます。
Vimにはmatchit.vimと呼ばれるプラグインがバンドルされています。デフォルトでは有効になっていません。また、 %
をHTMLタグに循環させ、VimLなどでifやelse、endifなどを構築し、新しいコマンドをいくつか導入します。
プラグインを常に読み込むには、vimrcに以下を追加しましょう。
if !exists('g:loaded_matchit')
runtime macros/matchit.vim
endif
Matchitのドキュメンテーションはかなり広範囲に渡るので、次のものも1回試してみることをお勧めします。
:!mkdir -p ~/.vim/doc
:!cp $VIMRUNTIME/macros/matchit.txt ~/.vim/doc
:helptags ~/.vim/doc
これでプラグインを使う準備ができました。サポートされているコマンドは :h matchit-intro
を、サポートされている言語は :h matchit-languages
を参照してください。
対応したペアを定義するのは簡単です。
autocmd FileType python let b:match_words = '\<if\>:\<elif\>:\<else\>'
その後で、 %
(前)や g%
(後ろ)を使うことで、Pythonmのどのファイルでもこの3つのステートメントを循環させることができます。
関連するヘルプ
:h matchit-install
:h matchit
:h b:match_words
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa