この記事はVim Advent Calendar 2012 : ATND272日目の記事になります。
突然ですが、皆さんはVimのメニュー使っていますか?
私が思うにVimmerの方々でメニューを表示し使っている方はすごく少数派な気がします。
まぁたぶん、メニューを使わない理由は 「キーボードからマウスに手を動かすのがメンドイ」からでしょう。
私もそんな理由でメニューを以下のような設定で非表示にしていたのですが...。(正確にはメニュー項目を1つも設定しないですが (== 非表示)。)
setwinaltkeys=yes
setguioptions=mM
set winaltkeys=yes
とguioptions=m
にしておかないとAlt+Spaceでシステムメニューが開けなくなっちゃうんですよねぇー。
でもここ最近、私は 「マウスからキーボードに手を動かすのがメンドイ」という理由でVimのメニューを使ったりしています。
ということで今回は、Vimのメニューについて簡単にまとめたいと思います。詳しいことはVimにヘルプしてください(:h menus
参照)。
メニューの表示/非表示
- メニューを表示する。
setguioptions+=m
- メニューを非表示する。
setguioptions-=m
メニューのデフォルト項目を設定しない。
メニューのデフォルト項目とは、上の図でいう「File Edit Tools Syntax Buffers Window Help」らのことです。
これらは"$VIMRUNTIME/menu.vim"を読み込むことで設定されます。
- "$VIMRUNTIME/menu.vim"を読み込まない。
setguioptions+=M
- "$VIMRUNTIME/menu.vim"を読み込む。
setguioptions-=M
メニューに項目を追加する。
メニューに新しい項目を追加するには以下のような構文になります。
menu [項目名] [コマンド]
[項目名]は項目の階層を.
で区切って表します。
[コマンド]はその項目を選択した時に実行したいVimコマンドを指定します。
例:
menu Commnads.Edit\ \.vimrc :e $MYVIMRC<cr>
menu Commnads.-sep- :
menu Commnads.\.vimrcを再読み込みする。 :so $MYVIMRC<cr>
説明:
[項目名]はマルチバイト文字でも基本的にOKです。
エスケープしなければならない文字は半角スペース(0x20)とカンマ(0x2E)です。-sep-
はセパレーターを表します。ハイフン(0x2D)で括られた項目であればsepでなくても大丈夫です。
例えば、Commnads.-これはセパレータです-
もセパレーターになります。
ただし、[項目名]の先頭にセパレーターを持ってくることはできません(-seq-.force\ quit
とか)。
メニューから項目を削除する。
メニューから項目を削除するには以下のような構文になります。
unmenu [項目名]
[項目名]は:menu
コマンドで指定したものです。
Commnads.Edit\ \.vimrc
の項目を削除する。
unmenu Commnads.Edit\ \.vimrc
- すべての項目を削除する。
unmenu *
メニューの項目をコマンドラインから実行する。
メニューの項目はコマンドラインからも実行することができます。
構文は項目を削除するするときと同じです。
- .vimrcを編集する。
emenu Commnads.Edit\ \.vimrc
終わり
以上、「メニュー使っていますか?」でした。
今回紹介したメニュ-コマンドのほんの一部です。メニュ-コマンドは他にもまだまだいっぱいあります。
まぁそんなわけで、Vimのメニューを使ってみることを検討してみてはどうでしょうか?
たまにはマウスからキーボードに手を動かすこともめんどくさがりましょう
明日の記事は@manga_osyoさんです。