1 *usr_42.txt* For Vim バージョン 7.2. Last change: 2008 May 05
3 VIM USER MANUAL - by Bram Moolenaar
8 Vim の柔軟性については既にご存知だと思います。それは GUI のメニューにおいても
9 同じです。自分でメニューを追加して、コマンドの実行を簡単にすることができます。
15 |42.4| ツールバーとポップアップメニュー
17 次章: |usr_43.txt| ファイルタイプを使う
18 前章: |usr_41.txt| Vim スクリプト書法
21 ==============================================================================
24 Vim のメニューは "$VIMRUNTIME/menu.vim" で定義されています。自分のメニューを作
25 りたい場合は、そのファイルにざっと目を通してみてください。
26 メニューを定義するには ":menu" コマンドを使います。基本的な書式は次のとおり: >
28 :menu {menu-item} {keys}
30 {menu-item} にはメニューの場所を指定します。例えば {menu-item} が "File.Save"
31 なら、"File" メニューの下の "Save" 項目を示します。ドットで名前を区切ります。
34 :menu File.Save :update<CR>
36 ":update" コマンドは、ファイルが変更されていればそれを保存するコマンドです。
37 階層を深くすることもできます。"Edit.Settings.Shiftwidth" なら、"Edit" メニュー
38 の下の "Settings" サブメニューの下の "Shiftwidth" 項目を示します。さらに深くす
39 ることもできます。メニューが深くなりすぎるとマウスをたくさん動かさなければなら
41 ":menu" コマンドは ":map" コマンドとよく似ています。パラメタの左側でコマンドの
42 実行方法を指定し、右側で実行されるコマンドを指定します。{keys} は文字列で、そ
43 れが実際に入力されたかのように使われます。つまり、インサートモードでは {keys}
48 ------------------------
50 アンパサンド文字 (&) はアクセラレータを示すために使われます。例えば、Alt-F で
51 "File" を選択し、そして S で "Save" を選択できます。 ('winaltkeys' オプション
52 の設定によって無効になっている可能性もあります)。その場合、{menu-item} は
53 "&File.&Save" のようになります。アクセラレータ文字は下線付きで表示されます
54 それぞれのキーは各メニューの中で一度だけしか使わないようにしてください。そうし
55 ないと、どちらが実行されるのかわからなくなります。これについて Vim は警告は発
62 "File.Save" メニューの実際の定義は次のようになっています: >
64 :menu 10.340 &File.&Save<Tab>:w :confirm w<CR>
66 10.340 という数値は順位番号です。これはメニュー項目の位置を決定するために使わ
67 れます。最初の番号 (10) はメニューバーにおける位置を示します。数字が小さいほど
68 左側に配置され、大きいほど右側に配置されます。
69 標準メニューでは次の順位番号が使われています:
72 10 20 40 50 60 70 9999
73 +-----------------------------------------------------------------+
74 | ファイル 編集 ツール シンタックス バッファ ウィンドウ ヘルプ |
75 +-----------------------------------------------------------------+
78 10 20 40 50 60 70 9999
79 +------------------------------------------------------------+
80 | File Edit Tools Syntax Buffers Window Help |
81 +------------------------------------------------------------+
83 ヘルプメニューには大きな番号が与えられ、右端に表示されるようになっています。
84 二番目の数字 (340) はプルダウンメニューにおける位置を示します。数字が小さいほ
85 ど上に配置され、大きいほど下に配置されます。ファイルメニューの順位番号を以下に
89 +-------------------+ +-----------------+
90 10.310 |開く... | |Open... |
91 10.320 |分割して開く... | |Split-Open... |
93 10.330 |閉じる | |Close |
94 10.335 |------------------ | |---------------- |
96 10.350 |名前を付けて保存...| |Save As... |
97 10.400 |------------------ | |---------------- |
98 10.410 |差分表示... | |Split Diff with |
99 10.420 |パッチ結果を表示...| |Split Patched By |
100 10.500 |------------------ | |---------------- |
101 10.510 |印刷 | |Print |
102 10.600 |------------------ | |---------------- |
103 10.610 |保存して終了 | |Save-Exit |
105 +-------------------+ +-----------------+
107 それぞれの番号の間には少し余裕があるので、必要なら、そこにメニューを追加するこ
108 とができます (ただし、標準メニューに手を加えるより、新しいメニューを追加したほ
110 サブメニューを作るときは、さらに ".number" を追加することができます。つまり、
111 {menu-item} のそれぞれの名前が順位番号を持ちます。
117 例では、{menu-item} に "&File.&Save<Tab>:w" が指定されていました。これは重要な
118 ポイントです。{menu-item} は一つの単語でなければなりません。ドット、スペース、
119 タブなどを使いたい場合は <> 表記 (<Space>や<Tab>など) を使うか、バックスラッ
120 シュ (\) でエスケープする必要があります。 >
122 :menu 10.305 &File.&Do\ It\.\.\. :exit<CR>
124 これは、メニュー項目の名前が "Do It..." (空白が含まれてます)、実行されるコマン
125 ドは ":exit<CR>" になります。
127 メニューの名前は <Tab> 文字を使って、名前の部分とヒント情報の部分を区切ること
128 ができます。<Tab> より後ろの部分は右寄せされて表示されます。File.Save では
129 "&File.&Save<Tab>:w" という名前が使われていました。これは "File.Save" という名
136 セパレータは、関連した項目をグループ化するのに使います。これは例えば "-sep-"
137 のように名前の最初と最後に "-" を付けることで定義できます。複数のセパレータを
138 使う場合はそれぞれ別の名前を付けてください。名前自体に意味はありません。
139 セパレータに設定されたコマンドが実行されることはありませんが、その定義は必要で
140 す。":" を書いておいてください。例: >
142 :amenu 20.510 Edit.-sep3- :
144 ==============================================================================
147 メニューはモード別に定義できます。メニュー項目は対応するモードでのみ使えます。
148 ":map" コマンドのバリエーションと同じようなものです:
150 :menu ノーマルモード、ビジュアルモード、オペレータ待機モード
154 :menu! インサートモード、コマンドライン
159 メニュー項目が再マップされないようにするには、":noremenu"、":nnoremenu"、
160 ":anoremenu" などを使います。
166 ":amenu" コマンドは少し特殊です。{keys} に指定した文字列はノーマルモードで実行
167 するものとして扱われます。ビジュアルモードやインサートモードでメニューが使われ
168 た場合は、実行の前にノーマルモードに戻らなければならないので、CTRL-C や CTRL-O
169 が挿入されます。例えば、次のコマンドを使うと: >
171 :amenu 90.100 Mine.Find\ Word *
173 メニューのコマンドは次のように定義されます:
181 コマンドラインモードでは、入力途中のコマンドが CTRL-C によって破棄されます。ビ
182 ジュアルモードとオペレータ待機モードでは、CTRL-C によってモードが停止します。
183 インサートモードでは、CTRL-O を使ってコマンドを実行してからインサートモードに
185 CTRL-O は一つのコマンドに対してのみ機能します。複数のコマンドを実行したい場合
186 は、それらを関数に入れて、その関数を呼んでください。例: >
188 :amenu Mine.Next\ File :call <SID>NextFile()<CR>
189 :function <SID>NextFile()
194 このメニュー項目は、":next" で引数リストの次のファイルに移動し、"Code" で始ま
196 関数名の前にある <SID> はスクリプトIDです。関数がスクリプトの中に限定されるよ
197 うになります。複数のスクリプトファイルで関数の名前が重複してしまう問題を避ける
204 メニューは {keys} を実際に入力したかのように実行されます。":" コマンドであれば
205 コマンドラインにエコーされたコマンドが表示されます。そのコマンドが長ければ、
206 hit-Enter プロンプトが表示されます。そんなのはうっとうしいですよね。
207 これはメニューをサイレントにすることで解決できます。それには <silent> 引数を指
208 定します。例えば、上の例の NextFile() を呼び出してみます。メニューを実行する
209 と、コマンドラインには次のような表示がでます:
211 :call <SNR>34_NextFile() ~
213 このような表示をなくすには、最初の引数として "<silent>" を指定します: >
215 :amenu <silent> Mine.Next\ File :call <SID>NextFile()<CR>
217 "<silent>" の使いすぎに注意してください。コマンドが短いならそれは必要ありませ
218 ん。誰かのためにメニューを作る場合、実行されたコマンドが表示されるようになって
219 いれば、マウスを使わない場合はどのように入力すればいいかのヒントになります。
225 {keys} を指定せずに menu コマンドを使うと、定義されたメニューの一覧を表示でき
226 ます。{menu-item} やその一部を指定することで、特定の項目だけを表示できます。
231 すべてのメニューが表示されます。とっても長い一覧が表示されます。メニューの名前
232 を指定して短い一覧を表示したほうがいいでしょう: >
237 すべてのモードの "Edit" メニューの項目だけが表示されます。インサートモードのメ
238 ニュー項目を一つだけ表示するには次のようにします: >
243 名前は正しく指定する必要があります。大文字と小文字は区別されます。ただし、アク
244 セラレータ指定のための '&' は省略できます。<Tab> と、その後に続く文字列も同様
251 メニューを削除するには一覧表示と同じようなコマンドを使います。ただし、"menu"
252 ではなく "unmenu" を使います。":menu" は ":unmenu" になり、":nmenu" は
253 ":nunmenu" になります。インサートモードの "Tools.Make" を削除するには次のよう
257 :iunmenu ツール(T).メイク(M)
259 メニューの名前を指定すると、その中の項目もすべて削除されます。例: >
264 シンタックスメニューとその中の項目がすべて削除されます。
266 ==============================================================================
269 'guioptions' のフラグを設定することでメニューの表示を変更できます。初期設定で
270 は以下の "M" 以外のすべてのフラグが設定されています。フラグは次のようなコマン
275 m 外すとメニューバーが非表示になります。
277 M 追加すると標準メニューがロードされなくなります。
279 g 外すと非アクティブなメニュー項目は灰色表示にはならず非
280 表示になります。(そうならないシステムもあります。)
282 t 外すとティアオフ機能が無効になります。
284 メニューの一番上に表示される点線はセパレータではありません。その項目を選択する
285 と、メニューは "ティアオフ(切り離し)"、つまり別ウィンドウで表示されます。これ
286 をティアオフメニューと呼びます。同じメニュー項目を頻繁に使う場合に便利です。
288 メニュー項目の翻訳については |:menutrans| を参照してください。
290 メニューはマウスで選択するものなので、":browse" コマンドを使って、ファイルを選
291 択できるようにすると便利です。また、":confirm" を使って、エラーメッセージの代
292 わりにダイアログを表示するのもいいでしょう (例えばカレントバッファに変更がある
293 状態で何かをする場合など)。この二つのコマンドは同時に使用できます: >
295 :amenu File.Open :browse confirm edit<CR>
297 ":browse" を使うと、開くファイルを選択するためのファイルブラウザが表示されま
298 す。":confirm" を使うと、カレントバッファに変更があった場合にポップアップダイ
299 アログが表示され、それを保存するか、破棄するか、コマンドをキャンセルするかを選
301 confirm() 関数や inputdialog() 関数を使ってもっと複雑な処理をすることもできま
304 ==============================================================================
305 *42.4* ツールバーとポップアップメニュー
307 特殊なメニューが二つあります。ToolBar (ツールバー) と PopUp (ポップアップ) で
308 す。これらの名前で始まるメニュー項目はメニューバーに表示されません。
314 ツールバーは 'guioptions' オプションに "T" フラグが含まれている場合のみ表示さ
316 ツールバーではテキストの代わりにアイコンが表示されます。例えば、"ToolBar.New"
317 という {menu-item} はツールバーの "New" アイコンとして表示されます。
318 Vim には 28 個のアイコンが組み込まれています。その一覧は |builtin-tools| にあ
319 ります。ほとんどのアイコンは標準ツールバーで使われています。それらの項目の動作
320 は変更可能です (標準メニューの初期化後に変更できます)。
321 標準アイコン以外の画像を使ったり、新しい項目を追加することもできます。例えば、
322 次のコマンドで新しい項目を追加できます: >
324 :tmenu ToolBar.Compile Compile the current file
325 :amenu ToolBar.Compile :!cc % -o %:r<CR>
327 アイコンは別途作成する必要があります。MS-Windows では "Compile.bmp" という名前
328 の bitmap 形式の画像を使います。Unix では "Compile.xpm" という名前の XPM 形式
329 の画像を使います。サイズは 18x18 ドットにしてください。MS-Windows では他のサイ
330 ズでも構いませんが、きれいには表示されません。
331 画像は、'runtimepath' の "bitmaps" ディレクトリに入れてください。例えば、Unix
332 なら "~/.vim/bitmaps/Compile.xpm" などです。
334 ツールバーの各項目にはツールチップを設定できます。ツールチップとは、機能を説明
335 するための短かいテキストです。例えば "ファイルを開く" といったものです。項目の
336 上にマウスポインタを置いてしばらく待つと表示されます。画像だけではどのような機
340 :tmenu ToolBar.Make Run make in the current directory
343 大文字/小文字に注意してください。"Toolbar" と "toolbar" はどちらも
346 ツールチップを削除するには |:tunmenu| コマンドを使います。
348 'toolbar'オプションを設定すると、画像の代わりに文字列を表示したり、文字列と画
349 像の両方を表示したりできます。テキストの表示は場所を取るので、ほとんどの人は画
356 ポップアップメニューはマウスポインタのある場所に表示されるメニューです。
357 MS-Windows ではマウスの右クリックで表示し、左クリックで項目を選択します。Unix
359 ポップアップメニューは 'mousemodel' が "popup" か "popup_setpos" のどちらかに
360 設定されている場合にだけ表示されます。両者の違いは、"popup_setpos" ならマウス
361 ポインタの場所にカーソルが移動するという点です。選択中のテキストをクリックした
362 場合はその選択範囲は変更されずにそのまま使われます。テキストの選択中に他の場所
364 ポップアップメニューはモード別になっています。普通のメニューのように、他のモー
365 ドの項目が灰色表示されるということはありません。
367 生命、宇宙、そして万物の答えは? *42*
368 この問の真意を知っていた唯一の人物、ダグラス・アダムズは残念ながら亡くなりまし
369 た。死が意味するものを考えるときなのかもしれません。
371 ==============================================================================
373 次章: |usr_43.txt| ファイルタイプを使う
375 Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl: