Usr_42

Nvim :help ページは、このスクリプトから ソース を使用して、tree-sitter-vimdoc パーサーによって生成されています。


VIM ユーザーマニュアル - Bram Moolenaar 著
新しいメニューの追加
ご存知のとおり、Vim は非常に柔軟です。GUI で使用されるメニューも例外ではありません。特定のコマンドに簡単にアクセスできるように、独自のメニューエントリを定義できます。これはマウスをよく使うユーザーのみを対象としています。
42.1 はじめに 42.2 メニューコマンド 42.3 その他 42.4 ツールバーとポップアップメニュー
次の章: usr_43.txt ファイルタイプの使用 前の章: usr_41.txt Vim スクリプトを書く 目次: usr_toc.txt

はじめに

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
+------------------------------------------------------------+ | ファイル 編集 ツール 構文 バッファ ウィンドウ ヘルプ | +------------------------------------------------------------+
ヘルプメニューは一番右に表示されるように、非常に大きな番号が割り当てられていることに注意してください。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                  |
            +-----------------+
数字の間に余裕があることに注意してください。ここに独自の項目を挿入できます(ただし、標準メニューはそのままにして、独自の項目用に新しいメニューを追加する方が良い場合がよくあります)。サブメニューを作成する場合は、優先順位に別の ".番号" を追加できます。したがって、{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-" です。複数のセパレータを使用する場合は、名前が異なっている必要があります。そうでない場合、名前は重要ではありません。セパレータのコマンドは決して実行されませんが、とにかく定義する必要があります。コロン 1 つで十分です。例:
:amenu 20.510 Edit.-sep3- :

42.2 メニューコマンド

特定のモードのみに存在するメニュー項目を定義できます。これは ":map" コマンドのバリエーションと同じように機能します。
:menu ノーマル、ビジュアル、およびオペレーター待機モード :nmenu ノーマルモード :vmenu ビジュアルモード :omenu オペレーター待機モード :menu! 挿入およびコマンドラインモード :imenu 挿入モード :cmenu コマンドラインモード :tlmenu ターミナルモード :amenu すべてのモード (ターミナルモードを除く)
メニュー項目のコマンドがマップされないようにするには、":noremenu"、":nnoremenu"、":anoremenu" などのコマンドを使用します。
:AMENU の使用
":amenu" コマンドは少し異なります。指定した {keys} はノーマルモードで実行されることを前提としています。メニューが使用されたときに Vim がビジュアルモードまたは挿入モードになっている場合、Vim は最初にノーマルモードに戻る必要があります。":amenu" は 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 つのコマンドに対してのみ機能します。2 つ以上のコマンドを使用する必要がある場合は、それらを関数に入れてその関数を呼び出します。例:
:amenu  Mine.Next\ File  :call <SID>NextFile()<CR>
:function <SID>NextFile()
:  next
:  1/^Code
:endfunction
このメニューエントリは、":next" を使用して引数リストの次のファイルに移動します。次に、"Code" で始まる行を検索します。関数名の前の <SID> はスクリプト ID です。これにより、関数は現在の Vim スクリプトファイルに対してローカルになります。これにより、別のスクリプトファイルで同じ名前の関数が定義されている場合に問題が発生することを防ぎます。<SID> を参照してください。

サイレントメニュー

メニューは、入力したかのように {keys} を実行します。":" コマンドの場合、これはコマンドラインにコマンドがエコーされることを意味します。長いコマンドの場合は、Enter キーを押すプロンプトが表示されます。これは非常に迷惑な場合があります!これを回避するには、メニューをサイレントにします。これは <silent> 引数を使用して行います。たとえば、前の例の NextFile() の呼び出しを考えてみましょう。このメニューを使用すると、コマンドラインに次のように表示されます。
:call <SNR>34_NextFile()
コマンドラインにこのテキストが表示されないようにするには、最初の引数として "<silent>" を挿入します。
:amenu <silent> Mine.Next\ File :call <SID>NextFile()<CR>
<silent> を使いすぎないでください。短いコマンドには必要ありません。他のユーザーのためにメニューを作成する場合、実行されたコマンドを見ることができるようにすることで、マウスを使用する代わりに何を入力できるかについてのヒントを与えることができます。

メニューのリスト

{keys} 部分なしでメニューコマンドを使用すると、すでに定義されているメニューが一覧表示されます。特定のメニューを一覧表示するために、{menu-item} またはその一部を指定できます。例:
:amenu
これはすべてのメニューを一覧表示します。これは長いリストです!短いリストを取得するには、メニューの名前を指定することをお勧めします。
:amenu Edit
これは、すべてのモードの "Edit" メニュー項目のみを一覧表示します。挿入モードの特定のメニュー項目 1 つのみを一覧表示するには、次のようにします。
:imenu Edit.Undo
正しい名前を正確に入力するように注意してください。大文字と小文字は区別されます。ただし、アクセラレータの '&' は省略できます。<Tab> とその後の部分も省略できます。

メニューの削除

メニューを削除するには、リストと同じコマンドを使用しますが、"menu" を "unmenu" に変更します。したがって、":menu" は ":unmenu" になり、":nmenu" は ":nunmenu" になります。挿入モードの "Tools.Make" 項目を削除するには、次のようにします。
:iunmenu Tools.Make
メニュー名を使用して、メニュー全体とそのすべての項目を削除できます。例:
:aunmenu Syntax
これは、構文メニューとその中のすべての項目を削除します。

42.3 その他

'guioptions' のフラグを使用して、メニューの外観を変更できます。デフォルト値では、"M" を除くすべてが含まれています。次のようなコマンドでフラグを削除できます。
:set guioptions-=m
m 削除すると、メニューバーは表示されません。
M 追加すると、デフォルトのメニューはロードされません。
g 削除すると、非アクティブなメニュー項目はグレー表示されずに完全に削除されます。(すべてのシステムで機能するわけではありません。)
メニュー項目の翻訳については、:menutrans を参照してください。
メニュー項目を選択するにはマウスを使用する必要があるため、ファイルを選択するには ":browse" コマンドを使用することをお勧めします。また、":confirm" を使用すると、現在のバッファに変更が含まれている場合などに、エラーメッセージの代わりにダイアログが表示されます。これら 2 つを組み合わせることができます。
:amenu File.Open  :browse confirm edit<CR>
":browse" は、編集するファイルを選択するためのファイルブラウザを表示します。":confirm" は、現在のバッファに変更がある場合にダイアログをポップアップ表示します。変更を保存するか、破棄するか、コマンドをキャンセルするかを選択できます。より複雑な項目の場合は、confirm() 関数と inputdialog() 関数を使用できます。デフォルトのメニューにはいくつかの例が含まれています。

42.4 ツールバーとポップアップメニュー

特別なメニューが 2 つあります。ToolBar と PopUp です。これらの名前で始まる項目は、通常のメニューバーには表示されません。

ツールバー

ツールバーは、"T" フラグが 'guioptions' オプションに含まれている場合にのみ表示されます。ツールバーは、コマンドを表すためにテキストではなくアイコンを使用します。たとえば、"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" でなければなりません。Unix の場合は XPM 形式で、ファイル名は "Compile.xpm" です。サイズは 18 x 18 ピクセルでなければなりません。MS-Windows では他のサイズも使用できますが、見栄えが悪くなります。'runtimepath' のディレクトリのいずれかにある "bitmaps" ディレクトリにビットマップを配置します。たとえば、Unix の場合は "~/.config/nvim/bitmaps/Compile.xpm" です。
ツールバーの項目にツールチップを定義できます。ツールチップとは、ツールバー項目の機能を説明する短いテキストです。たとえば、「ファイルを開く」などです。マウスポインタが項目上にあり、しばらく動かさないでいると表示されます。これは、画像の意味がそれほど明確でない場合に非常に役立ちます。例:
:tmenu ToolBar.Make  Run make in the current directory
注:使用されている大文字と小文字に注意してください。"Toolbar" と "toolbar" は "ToolBar" とは異なります!
ツールチップを削除するには、:tunmenu コマンドを使用します。
'toolbar' オプションを使用すると、ビットマップの代わりにテキストを表示したり、テキストとビットマップの両方を表示したりできます。テキストはかなりのスペースを占めるため、ほとんどの人はビットマップのみを使用します。

ポップアップメニュー

ポップアップメニューは、マウスポインタの位置に表示されます。MS-Windows では、マウスの右ボタンをクリックすることでアクティブになります。その後、マウスの左ボタンで項目を選択できます。Unix では、マウスの右ボタンを押したままにすることでポップアップメニューを使用します。'mousemodel' が "popup" または "popup_setpos" に設定されている場合にのみ、ポップアップメニューが表示されます。この2つの違いは、"popup_setpos" はカーソルをマウスポインタの位置に移動させることです。選択範囲内をクリックすると、選択範囲は変更されずに使用されます。選択範囲がある場合に、その外側をクリックすると、選択範囲は解除されます。モードごとに個別のポップアップメニューがあります。そのため、通常のメニューのようにグレー表示される項目はありません。
人生、宇宙、そして万物についての究極の疑問の答えとは? 42 この質問の真意を知っていた唯一の人物、ダグラス・アダムスは、残念ながら亡くなりました。そこで、今度は死の意味とは何かと疑問に思うかもしれません…
次の章: usr_43.txt ファイルタイプの使用
著作権:manual-copyright を参照してください vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンド索引
クイックリファレンス