Next: usr_43.txt, Previous: usr_41.txt, Up: 目次 [Index]
*usr_42.txt* For Vim バージョン 8.1. Last change: 2008 May 05 VIM USER MANUAL - by Bram Moolenaar 新しいメニューを追加する
Vim の柔軟性については既にご存知だと思ひます。それは GUI のメニューにおいても同じです。自分でメニューを追加して、コマンドの實行を簡單にすることができます。この章はマウスをよく使ふユーザー向けです。
|42.1| | はじめに |
|42.2| | メニューコマンド |
|42.3| | その他いろいろ |
|42.4| | ツールバーとポップアップメニュー |
Vim のメニューは "$VIMRUNTIME/menu.vim" で定義されてゐます。自分のメニューを作りたい場合は、そのファイルにざつと目を通してみてください。
メニューを定義するには ":menu
" コマンドを使ひます。基本的な書式は次のとほり:
:menu {menu-item} {keys}
{menu-item} にはメニューの場所を指定します。例へば {menu-item} が "File.Save" なら、"File" メニューの下の "Save" 項目を示します。ドットで名前を區切ります。例:
:menu File.Save :update<CR>
":update
" コマンドは、ファイルが變更されてゐればそれを保存するコマンドです。
階層を深くすることもできます。"Edit.Settings.Shiftwidth" なら、"Edit" メニューの下の "Settings" サブメニューの下の "Shiftwidth" 項目を示します。さらに深くすることもできます。メニューが深くなりすぎるとマウスをたくさん動かさなければならなくなるので注意してください。
":menu
" コマンドは ":map
" コマンドとよく似てゐます。パラーメーターの左側でコマンドの實行方法を指定し、右側で實行されるコマンドを指定します。{keys} は文字列で、それが實際に入力されたかのやうに使はれます。つまり、插入モードでは {keys} の文字列がそのまま插入されます。
アンパサンド文字 (‘&’) はアクセラレータを示すために使はれます。例へば、Alt-F で "File" を選擇し、そして ‘S’ で "Save" を選擇できます。 (’winaltkeys’ オプションの設定によつて無效になつてゐる可能性もあります)。その場合、{menu-item} は "&File.&Save" のやうになります。
アクセラレータ文字は下線付きで表示されますそれぞれのキーは各メニューの中で一度だけしか使はないやうにしてください。さうしないと、どちらが實行されるのかわからなくなります。これについて Vim は警告は發しません。
"File.Save" メニューの實際の定義は次のやうになつてゐます:
:menu 10.340 &File.&Save<Tab>:w :confirm w<CR>
10.340 といふ數値は順位番號です。これはメニュー項目の位置を決定するために使はれます。最初の番號 (10) はメニューバーにおける位置を示します。數字が小さいほど左側に配置され、大きいほど右側に配置されます。
標準メニューでは次の順位番號が使はれてゐます:
日本語環境 10 20 40 50 60 70 9999 +-----------------------------------------------------------------+ | ファイル 編輯 ツール シンタックス バッファ ウィンドウ ヘルプ | +-----------------------------------------------------------------+ 英語環境 10 20 40 50 60 70 9999 +------------------------------------------------------------+ | File Edit Tools Syntax Buffers Window Help | +------------------------------------------------------------+
ヘルプメニューには大きな番號が與へられ、右端に表示されるやうになつてゐます。
2 番目の數字 (340) はプルダウンメニューにおける位置を示します。數字が小さいほど上に配置され、大きいほど下に配置されます。ファイルメニューの順位番號を以下に示します:
日本語環境 英語環境 +-------------------+ +-----------------+ 10.310 |開く... | |Open... | 10.320 |分割して開く... | |Split-Open... | 10.325 |新規作成 | |New | 10.330 |閉ぢる | |Close | 10.335 |------------------ | |---------------- | 10.340 |保存 | |Save | 10.350 |名前を付けて保存...| |Save As... | 10.400 |------------------ | |---------------- | 10.410 |差分表示... | |Split Diff with | 10.420 |パッチ結果を表示...| |Split Patched By | 10.500 |------------------ | |---------------- | 10.510 |印刷 | |Print | 10.600 |------------------ | |---------------- | 10.610 |保存して終了 | |Save-Exit | 10.620 |終了 | |Exit | +-------------------+ +-----------------+
それぞれの番號の閒には少し餘裕があるので、必要なら、そこにメニューを追加することができます (ただし、標準メニューに手を加へるより、新しいメニューを追加したはうがよいでせう)。
サブメニューを作るときは、さらに ".number" を追加することができます。つまり、{menu-item} のそれぞれの名前が順位番號を持ちます。
例では、{menu-item} に "&File.&Save<Tab>:w" が指定されてゐました。これは重要なポイントです。{menu-item} は 1 つの單語でなければなりません。ドット、スペース、タブなどを使ひたい場合は <> 表記 (<Space>や<Tab>など) を使ふか、バックスラッシュ (\) でエスケープする必要があります。
:menu 10.305 &File.&Do\ It\.\.\. :exit<CR>
これは、メニュー項目の名前が "Do It..." (空白が含まれてます)、實行されるコマンドは ":exit<CR>" になります。
メニューの名前は <Tab> 文字を使つて、名前の部分とヒント情報の部分を區切ることができます。<Tab> より後ろの部分は右寄せされて表示されます。File.Save では "&File.&Save<Tab>:w" といふ名前が使はれてゐました。これは "File.Save" といふ名前と ":w" といふヒント情報です。
セパレータは、關聯した項目をグループ化するのに使ひます。これは例へば "-sep-" のやうに名前の最初と最後に "-" を付けることで定義できます。複數のセパレータを使ふ場合はそれぞれ別の名前を付けてください。名前自體に意味はありません。 セパレータに設定されたコマンドが實行されることはありませんが、その定義は必要です。":" を書いておいてください。例:
:amenu 20.510 Edit.-sep3- :
メニューはモード別に定義できます。メニュー項目は對應するモードでのみ使へます。":map" コマンドのバリエーションと同じやうなものです:
:menu | ノーマルモード、ビジュアルモード、オペレータ待機モード |
:nmenu | ノーマルモード |
:vmenu | ビジュアルモード |
:omenu | オペレータ待機モード |
:menu! | 插入モード、コマンドライン |
:imenu | 插入モード |
:cmenu | コマンドラインモード |
:tlmenu | Terminal モード |
:amenu | すべてのモード (Terminal モードを除く) |
メニュー項目が再マップされないやうにするには、":noremenu
", ":nnoremenu
", ":anoremenu
" などを使ひます。
":amenu
" コマンドは少し特殊です。{keys} に指定した文字列はノーマルモードで實行するものとして扱はれます。ビジュアルモードや插入モードでメニューが使はれた場合は、實行の前にノーマルモードに戾らなければならないので、CTRL-C や CTRL-O が插入されます。例へば、次のコマンドを使ふと:
:amenu 90.100 Mine.Find\ Word *
メニューのコマンドは次のやうに定義されます:
ノーマルモード: | * |
ビジュアルモード: | CTRL-C * |
オペレータ待機モード: | CTRL-C * |
插入モード: | CTRL-O * |
コマンドラインモード: | CTRL-C * |
コマンドラインモードでは、入力途中のコマンドが CTRL-C によつて破毀されます。ビジュアルモードとオペレータ待機モードでは、CTRL-C によつてモードが停止します。插入モードでは、CTRL-O を使つてコマンドを實行してから插入モードに戾ります。
CTRL-O は 1 つのコマンドに對してのみ機能します。複數のコマンドを實行したい場合は、それらを函數に入れて、その函數を呼んでください。例:
:amenu Mine.Next\ File :call <SID>NextFile()<CR> :function <SID>NextFile() : next : 1/^Code :endfunction
このメニュー項目は、":next
" で引數リストの次のファイルに移動し、"Code" で始まる行を檢索します。
函數名の前にある <SID> はスクリプトIDです。函數がスクリプトの中に限定されるやうになります。複數のスクリプトファイルで函數の名前が重複してしまふ問題を避けることができます。|<SID>| 參照。
メニューは {keys} を實際に入力したかのやうに實行されます。":" コマンドであればコマンドラインにエコーされたコマンドが表示されます。そのコマンドが長ければ、hit-Enter プロンプトが表示されます。そんなのはうつとうしいですよね。
これはメニューをサイレントにすることで解決できます。それには <silent> 引數を指定します。例へば、上の例の NextFile() を呼び出してみます。メニューを實行すると、コマンドラインには次のやうな表示がでます:
:call <SNR>34_NextFile()
このやうな表示をなくすには、最初の引數として "<silent>" を指定します:
:amenu <silent> Mine.Next\ File :call <SID>NextFile()<CR>
"<silent>" の使ひすぎに注意してください。コマンドが短いならそれは必要ありません。誰かのためにメニューを作る場合、實行されたコマンドが表示されるやうになつてゐれば、マウスを使はない場合はどのやうに入力すればいいかのヒントになります。
{keys} を指定せずに menu コマンドを使ふと、定義されたメニューの一覽を表示できます。{menu-item} やその一部を指定することで、特定の項目だけを表示できます。例:
:amenu
すべてのメニューが表示されます。とつても長い一覽が表示されます。メニューの名前を指定して短い一覽を表示したはうがいいでせう:
:amenu Edit :amenu 編輯(E)
すべてのモードの "Edit" メニューの項目だけが表示されます。插入モードのメニュー項目を 1 つだけ表示するには次のやうにします:
:imenu Edit.Undo :imenu 編輯(E).取り消す(U)
名前は正しく指定する必要があります。大文字と小文字は區別されます。ただし、アクセラレータ指定のための ’&’ は省略できます。<Tab> と、その後に續く文字列も同樣に省略できます。
メニューを削除するには一覽表示と同じやうなコマンドを使ひます。ただし、"menu" ではなく "unmenu" を使ひます。":menu
" は ":unmenu
" になり、":nmenu
" は ":nunmenu
" になります。插入モードの "Tools.Make" を削除するには次のやうにします:
:iunmenu Tools.Make :iunmenu ツール(T).メイク(M)
メニューの名前を指定すると、その中の項目もすべて削除されます。例:
:aunmenu Syntax :aunmenu シンタックス(S)
シンタックスメニューとその中の項目がすべて削除されます。
’guioptions’ のフラグを設定することでメニューの表示を變更できます。初期設定では以下の "M" 以外のすべてのフラグが設定されてゐます。フラグは次のやうなコマンドで外すことができます:
:set guioptions-=m
m | 外すとメニューバーが非表示になります。 |
M | 追加すると標準メニューがロードされなくなります。 |
g | 外すと非アクティブなメニュー項目は灰色表示にはならず非表示になります。(さうならないシステムもあります。) |
t | 外すとティアオフ機能が無效になります。 |
メニューの一番上に表示される點線はセパレータではありません。その項目を選擇すると、メニューは "ティアオフ(切り離し)"、つまり別ウィンドウで表示されます。これをティアオフメニューと呼びます。同じメニュー項目を頻繁に使ふ場合に便利です。
メニュー項目の飜譯については |:menutrans| を參照してください。
メニューはマウスで選擇するものなので、":browse
" コマンドを使つて、ファイルを選擇できるやうにすると便利です。また、":confirm
" を使つて、エラーメッセージの代はりにダイアログを表示するのもいいでせう (例へばカレントバッファに變更がある狀態で何かをする場合など)。この 2 つのコマンドは同時に使用できます:
:amenu File.Open :browse confirm edit<CR>
":browse" を使ふと、開くファイルを選擇するためのファイルブラウザーが表示されます。":confirm" を使ふと、カレントバッファに變更があつた場合にポップアップダイアログが表示され、それを保存するか、破毀するか、コマンドをキャンセルするかを選擇できます。
confirm() 函數や inputdialog() 函數を使つてもつと複雜な處理をすることもできます。標準メニューにいくつか例があります。
特殊なメニューが 2 つあります。ToolBar (ツールバー) と PopUp (ポップアップ) です。これらの名前で始まるメニュー項目はメニューバーに表示されません。
ツールバーは ’guioptions’ オプションに "T" フラグが含まれてゐる場合のみ表示されます。
ツールバーではテキストの代はりにアイコンが表示されます。例へば、"ToolBar.New" といふ {menu-item} はツールバーの "New" アイコンとして表示されます。
Vim には 28 個のアイコンが組み込まれてゐます。その一覽は |builtin-tools| にあります。ほとんどのアイコンは標準ツールバーで使はれてゐます。それらの項目の動作は變更可能です (標準メニューの初期化後に變更できます)。
標準アイコン以外の畫像を使つたり、新しい項目を追加することもできます。例へば、次のコマンドで新しい項目を追加できます:
:tmenu ToolBar.Compile Compile the current file :amenu ToolBar.Compile :!cc %:S -o %:r:S<CR>
アイコンは別途作成する必要があります。MS-Windows では "Compile.bmp" といふ名前の bitmap 形式の畫像を使ひます。Unix では "Compile.xpm" といふ名前の XPM 形式の畫像を使ひます。サイズは 18x18 ドットにしてください。MS-Windows では他のサイズでも構ひませんが、きれいには表示されません。
畫像は、’runtimepath’ の "bitmaps" ディレクトリに入れてください。例へば、Unix なら "~/.vim/bitmaps/Compile.xpm" などです。
ツールバーの各項目にはツールチップを設定できます。ツールチップとは、機能を說明するための短いテキストです。例へば "ファイルを開く" といつたものです。項目の上にマウスポインタを置いてしばらく待つと表示されます。畫像だけではどのやうな機能かわからない場合に便利です。 例:
:tmenu ToolBar.Make Run make in the current directory
Note:
大文字/小文字に注意してください。"Toolbar" と "toolbar" はどちらも "ToolBar" とは區別されます。
ツールチップを削除するには |:tunmenu| コマンドを使ひます。
’toolbar’ オプションを設定すると、畫像の代はりに文字列を表示したり、文字列と畫像の兩方を表示したりできます。テキストの表示は場所を取るので、ほとんどの人は畫像だけを表示してゐます。
ポップアップメニューはマウスポインタのある場所に表示されるメニューです。MS-Windows ではマウスの右クリックで表示し、左クリックで項目を選擇します。Unix では右ボタンを押したままにして使ひます。
ポップアップメニューは ’mousemodel’ が "popup" か "popup_setpos" のどちらかに設定されてゐる場合にだけ表示されます。兩者の違ひは、"popup_setpos" ならマウスポインタの場所にカーソルが移動するといふ點です。選擇中のテキストをクリックした場合はその選擇範圍は變更されずにそのまま使はれます。テキストの選擇中に他の場所をクリックした場合は選擇が解除されます。
ポップアップメニューはモード別になつてゐます。普通のメニューのやうに、他のモードの項目が灰色表示されるといふことはありません。
生命、宇宙、その他もろもろの答へは? この問の眞意を知つてゐた唯一の人物、ダグラス・アダムズは殘念ながら他界しました。それで死の答へはなんなんだらう...
Next: usr_43.txt, Previous: usr_41.txt, Up: 目次 [Index]