vim-jp / vimdoc-ja / gui

gui - Vimドキュメント

メインヘルプファイルに戻る
gui.txt       For Vim バージョン 8.2.  Last change: 2021 Jun 27


                  VIMリファレンスマニュアル    by Bram Moolenaar


Vimのグラフィカルユーザーインターフェイス               gui GUI

1. GUIの開始                    gui-start
2. スクロールバー               gui-scrollbars
3. マウス制御                   gui-mouse
4. GUI選択の作成                gui-selections
5. メニュー                     menus
6. フォント                     gui-font
7. 付記                         gui-extras
8. シェルコマンド               gui-shell

他のGUIドキュメント:
gui_x11.txt   X11 GUIに特有の項目について。
gui_w32.txt   Win32 GUIに特有の項目について。


==============================================================================
1. GUIの開始                                    gui-start E229 E233

まずはVimがGUIに対応したバージョンであるか確認する必要がある。それは ":version"
コマンドで調べることができる。その出力が "with xxx GUI" または "MS-Windows 32
bit GUI version" を含んでいれば問題ない。ここで "xxx" は X11-Motif,
X11-Athena, Photon, GTK2, GTK3, などである。

どのようにGUIで起動するかは使用しているシステムに依存する。たいていはこのよう
にしてGUI版のVimを実行できる:
    gvim [options] [files...]

VimのX11バージョンはGUIとGUIでないモードの両方で実行することができる。
gui-x11-start を参照。

                        gui-init gvimrc .gvimrc _gvimrc $MYGVIMRC
gvimrc は GUI 固有の初期化コマンドを書くためのファイルである。gvimrc は常に
ファイル vimrc の後に読み込まれる。環境変数 $MYGVIMRC があると、その値が
gvimrc の代わりに使われる。

GUIの初期化は次の順序で行われる:
- オプション 'term' が "builgin_gui" に設定され、端末の設定がGUI用の初期値に設
  定される。terminal-options
- システムのメニューファイルがあればそれが読み込まれる。このファイルの名前は通
  常 "$VIMRUNTIME/menu.vim" である。":version" でこれを確認できる。
  $VIMRUNTIMEも参照。システムのメニューの読み込みを省略するには 'guioptions'
  に 'M' を含める。
                                        buffers-menu no_buffers_menu
  システムのメニューファイルはメニュー項目 "Buffers" (バッファ)の定義も含んで
  いる。これを必要としないなら、ユーザーの.vimrc (.gvimrcではない!)で
  "no_buffers_menu" を設定する:
        :let no_buffers_menu = 1
  NOTE: 構文強調表示を有効にするとメニューファイルも読み込まれるため、メニュー
  項目Buffers(バッファ)を無効にするのは ":syntax on" の前にする。
  メニューに表示されるバッファの名前は35文字で切り詰められる。違う長さで切り詰
  めるなら、例えば50文字にするなら、次のようにする:
        :let bmenu_max_pathlen = 50
- Vimを起動するときのコマンドライン引数に "-U {gvimrc}" が指定されると、
  {gvimrc}ファイルが初期化のために読み込まれ、以下の初期化処理は省略される。
  {gvimrc}が "NONE" の場合は、どの初期化ファイルも読み込まれない。
- UnixとMS-Windowsでは、システムのgvimrcが存在するなら、それが読み込まれる。こ
  のファイルの名前は通常 "$VIM/gvimrc" である。":version" でこれを確認できる。
  $VIMも参照。
- 次のものを試して、最初に見つかったものが使用される:
  - GVIMINIT環境変数が存在し空でないなら、それがExコマンドとして実行される。
  - ユーザーのgvimrcファイルが存在するなら、それが読み込まれる。このファイル
    の名前は通常 "$HOME/.gvimrc" である。":version" でこれを確認できる。
  - Win32では、必要であれば Vim によって $HOME が設定される、$HOME-windows
    を参照。
  - "_gvimrc" ファイルが見つからないときには、".gvimrc" も試される。逆のときも
    同様である。
  $MYGVIMRC が設定されていないならば、$MYGVIMRC に最初に見つかったファイルの名
  前が代入される。
'exrc' オプションが設定されていて(これは標準設定ではない)、./.gvimrcファイル
  が存在し、それがシステム、あるいはユーザーのgvimrcファイルではないなら、それ
  が読み込まれる。このファイルがユーザーの所有しているものでないなら、いくつか
  のセキュリティ上の制限が適用される。".gvimrc" が見つからないときには、
  "_gvimrc" も試される。MacintoshとDOS/Win32では、"_gvimrc" が最初に試される。

NOTE: Vimを起動するときに、"-U" 引数を指定せずに "-u NONE" もしくは
"-u DEFAULTS" を指定するか、あるいは "-U NONE" を指定して起動すると、最初のも
の以外は全て実行されない。

これらは全て、ユーザーの.vimrcファイルを読み込む、というような、通常のVimの初
期化の後に実行される。initializationを参照。
しかし、GUIウィンドウは全ての初期化が実行された後に開かれる。
GUIウィンドウを開いた直後にいくつかのコマンドを実行したいなら、自動コマンド
GUIEnterイベントを使用する。例えば:
        :autocmd GUIEnter * winpos 100 50

カスタマイズしたメニュー(:menuを参照)をセットアップしたり、CUI版とは異なった
初期化をするために、gvimrcファイルを使用することができる。

ユーザーの個人的なGUI初期化ファイルを置くのに推奨される場所:
        Unix                $HOME/.gvimrc、$HOME/.vim/gvimrc
        Win32               $HOME/_gvimrc、$HOME/vimfiles/gvimrc
                            または $VIM/_gvimrc
        Amiga               s:.gvimrc、home:.gvimrc、home:vimfiles:gvimrc
                            または $VIM/.gvimrc
        Haiku               $HOME/config/settings/vim/gvimrc

個人的な初期化ファイルは上記の順に検索され、最初に見つかったものだけが読み込ま
れる。

GUI版のVimでだけ意味を持つオプションがある。'guicursor''guifont''guipty'
'guioptions' である。それらは他の全てのオプションと共にoptions.txtで説明され
ている。

GUIのMotifかAthenaバージョン(GTK+やWin32バージョンではない)を使用しているなら
ば、多くのXのリソースが有効である。gui-resourcesを参照。


端末の設定をする以外に文字の色を設定する方法はハイライトを設定することである。
ハイライトの "Normal" グループは背景色と前景色を設定するために用いられる。(ナ
イスな)例:

        :highlight Normal guibg=grey90

"guibg" と "guifg" の設定は通常の背景と前景の設定よりも優先される。ハイライト
のNormalグループに対するその他の設定は使用されない。フォントを設定するには
'guifont' を使用する。

モード別にカーソルの色を設定するには、'guicursor' オプションを参照。

Vimは起動時に、スクリーンに合わせてウィンドウの位置を調整しようとする。これは
ウィンドウの一部が隠れてしまわないようにするためである。X Window Systemでは、
これは少し憶測を必要とする。'guiheadroom' オプションでウィンドウタイトルとタス
クバーに用いられる高さを変更することができる。

                                                :winp :winpos E188
:winp[os]
                GUI vimウィンドウの左上隅の現在の位置をピクセルで表示する。全
                てのバージョンで機能する訳ではない。
                getwinpos()getwinposx() および getwinposy() も参照のこ
                と。

:winp[os] {X} {Y}                                                       E466
                与えられた{X}{Y}の座標にGUI vimウィンドウを移動する。座標は
                ウィンドウの左上隅の位置をピクセル単位で指定する。全てのバー
                ジョンで機能する訳ではない。(新しい)xtermで機能する
                xterm-color
                GUIウィンドウがまだ開いていないとき、この値はウィンドウが開か
                れるまで保留される。位置はスクリーンに合うように調整される(可
                能なら)。

                                                    :win :winsize E465
:win[size] {width} {height}
                {width}(幅)と{height}(高さ)を指定してウィンドウの大きさを設定
                する。このコマンドは古いコマンド(Obsolete)なので、
                ":set lines=11 columns=22" を使用するようにすること。
                期待したよりも高さが低くなるなら、'guiheadroom' オプションを確
                認すること。

X Window Systemでは、これらのコマンドでVimのウィンドウの情報を得られる:
        :!xwininfo -id $WINDOWID
        :!xprop -id $WINDOWID
        :execute '!xwininfo -id ' . v:windowid
        :execute '!xprop -id ' . v:windowid

                                                        gui-IME iBus
X で各国の文字を入力するためのインプットメソッドで XIM フレームワークに依るも
の、特に iBus は、gvim で使用すると不具合が起こることが知られている。スペース
を入力できなかったり、キーを押してからそれがアプリケーションに届くまで大きな遅
延が発生したりする。

対処療法としては gvim の起動引数に -f を付けてフォークをしないようにすると症
状は出なくなる。理由は不明だが。
==============================================================================
2. スクロールバー                                       gui-scrollbars

垂直スクロールバーと水平スクロールバーがある。'guioptions' オプションでどれが
表示されるかを設定することができる。

このような外観になっている(設定が ":set guioptions=mlrb" のとき):

                       +------------------------------+ 
                       | ファイル 編集         ヘルプ | <- メニューバー(m) 
                       +-+--------------------------+-+ 
                       |^|                          |^| 
                       |#| テキストエリア           |#| 
                       | |                          | | 
                       |v|__________________________|v| 
 Vimウィンドウ間の  -> |-+ File.c              5,2  +-| 
 通常のステータス行    |^|""""""""""""""""""""""""""|^| 
                       | |                          | | 
                       | | 別のファイルバッファ     | | 
                       | |                          | | 
                       |#|                          |#| 
 左スクロールバー(l)-> |#|                          |#| <- 右 
                       |#|                          |#|    スクロールバー(r) 
                       | |                          | | 
                       |v|                          |v| 
                       +-+--------------------------+-+ 
                       | |< ####                   >| | <- 下 
                       +-+--------------------------+-+    スクロールバー(b) 

スクロールバーやメニューバーは 'guioptions' から対応する文字を取り除くことで無
効にできる。下スクロールバーは 'nowrap' が設定されているときだけ有用である。


垂直スクロールバー                                      gui-vert-scroll

各Vimウィンドウはとなりにスクロールバーを持っていて、上下にスクロールしてその
バッファ内のテキストの表示を移動できる。スクロールバーのつまみのサイズはウィン
ドウに見えているバッファの割合を示している。スクロールバーがずっと下方にドラッ
グされると、ファイルの最後の行はウィンドウの最上部に表示される。

ウィンドウが(他のウィンドウの拡大によって)高さゼロに縮小されると、そのスク
ロールバーは表示されなくなる。それはウィンドウが復元されるときに再び表示され
る。

ウィンドウを縦分割しているとき、カレントウィンドウだけがスクロールバーを利用で
きる。そして、複数のウィンドウの真ん中のウィンドウを操作しているときは、スク
ロールバーは間のウィンドウを飛び越えて作用する。
両側にスクロールバーがあるときに、複数のウィンドウの真ん中のカレントウィンドウ
が左半分に面していると、右側のスクロールバーは右端のウィンドウに影響する。左右
が逆でも同様。


水平スクロールバー                                      gui-horiz-scroll

(Vim GUIの最下段の)水平スクロールバーは、'wrap' オプションがオフのときに、テキ
ストを横にスクロールするために使用する。スクロールバーのつまみのサイズは、左右
にスクロールして一番長い行のテキストを全て表示できるくらいである。必要に応じて
カーソルが移動するとき、カーソルは表示されている文字の上にとどまる
('virtualedit' が設定されていなければ)。

一番長い行を計算するのは多少の処理時間を必要とする。そしてそれは何かが変更され
るときに毎回行われる。その時間が多すぎるようだったり、他の行へのカーソルジャン
プを好まないなら、'guioptions' に 'h' を含めると、スクロールはカーソルのある行
の長さに制限される。

                                                        athena-intellimouse
インテリマウスを持っていて、Xサーバーがホイールをサポートしているなら、gvimで
テキストを上下にスクロールするのにホイールを使うことができる。これはXFree86
4.0以降のバージョンで機能する。古いバージョンでもパッチを当てれば利用可能にな
る。scroll-mouse-wheelを参照。

古いバージョンのXFree86ではXサーバーにパッチを当てなくてはならない。以下のペー
ジにはパッチとXサーバーのバイナリへのリンクに加えて、Linux上でインテリマウスを
使用することについて多少の情報がある(けれども必要とするものはないかもしれない):
    http://www.inria.fr/koala/colas/mouse-wheel-scroll/

==============================================================================
3. マウス制御                                           gui-mouse

マウスは、'mouse' オプションに適切なフラグが設定されている場合にだけ機能する。
GUIに切り替わるときに、'mouse' がまだ設定されていなければ、'mouse' オプション
は自動的に "a" に設定され、hit-enterプロンプトを除いて全てのモードで有効にな
る。これを望まないならば、"gvimrc" ファイルで 'mouse' オプションを変更する。

関連する他のオプション:
'mousefocus'    マウスポインタが乗っているウィンドウをカレントウィンドウにする
                gui-mouse-focus
'mousemodel'    マウスのボタンがどのような動作をするか
'mousehide'     テキストを入力している間マウスポインタを隠す
'selectmode'    選択時に選択モードとビジュアルモードのどちらを使うか

素早くこれらを設定するには ":behave" コマンドで行う。
                                                        :behave :be
:be[have] {model}       マウスと選択の動作を設定する。有効な引数は:
                           mswin        MS-Windowsの動作
                           xterm        Xtermの動作

                        ":behave" を使用するとこれらのオプションが変更される:
                        option          mswin                   xterm
                        'selectmode'    "mouse,key"             ""
                        'mousemodel'    "popup"                 "extend"
                        'keymodel'      "startsel,stopsel"      ""
                        'selection'     "exclusive"             "inclusive"

$VIMRUNTIMEディレクトリの中に、MS-Windowsにあるようなcut/copy/paste機能のため
のキーマッピングを設定するmswin.vimと呼ばれるスクリプトがある。これは、
CTRL-VCTRL-XCTRL-Cキーを用いるので、標準の操作と互換性がなくなってしまう。
それでも構わないなら、このコマンドで使用する:
        :so $VIMRUNTIME/mswin.vim

マウスのホイールでスクロールするには、scroll-mouse-wheelを参照。


3.1 マウスによるカーソルの移動                          gui-mouse-move

カーソルを持って行きたいテキストバッファのどこかでマウスの左ボタンをクリックす
ると、カーソルはそこに行く!
動作するモード          'mouse'が以下を含んでいるとき
ノーマルモード          'n' or 'a'
ビジュアルモード        'v' or 'a'
挿入モード              'i' or 'a'

選択モードはビジュアルモードのように扱われる。

現在のカーソル位置からマウスで指示する位置までのテキストを削除するために 'd'
のようなオペレータと共にこれを使用してもよい。つまり、'd' を入力してからどこか
をマウスでクリックする。

                                                        gui-mouse-focus
'mousefocus' オプションを設定してキーボードフォーカスがマウスポインタに追従す
るようにできる。これはマウスポインタが乗っているウィンドウがアクティブウィンド
ウになることを意味する。警告: メニューをうまく利用できなくなる。メニューを使用
したときに、そのメニューに設定されたコマンドは常に一番上のウィンドウに適用され
てしまうだろう。

('mouse' が 'c' か 'a' を含んでいるなら)コマンドラインモードや検索モード中にマ
ウスの左ボタンか右ボタンをクリックすることで、コマンドラインの行のクリックした
位置にカーソルを移動できる。

どのような状況でも、マウスの中ボタンをクリックして、現在の選択を貼り付けること
ができる。


3.2 マウスによる選択                                    gui-mouse-select

マウスを使って選択を開始できる。どのように使用するかは 'mousemodel' オプション
に依存する:
'mousemodel' が "extend" である: マウスの右ボタンを使用する。
'mousemodel' が "popup" である: Shiftキーを押しながら、マウスの左ボタンを使用
する。

選択を開始するときには、カーソルの位置からマウスで指示した位置までが選択され
る。すでに選択されている状態で選択の操作をすると、選択範囲が拡張される。

'selectmode' が "mouse" を含んでいるなら、選択モードが使用される。これは選択中
に入力した文字で選択範囲が置き換えられることを意味する。
Select-modeを参照。そうでなければ、ビジュアルモードが使用される。

ダブルクリックで単語の選択、トリプルクリックで行の選択、クワドルプルクリック
(4回クリック)で矩形ブロックを選択することができる。

どのように選択が用いられるかに関してはgui-selectionsを参照。


3.3 マウスによる他のテキスト選択                gui-mouse-modeless
                                                modeless-selection
次のときには異なる選択方法が使われる:
- コマンドラインモード
- コマンドラインウィンドウを使用中に他のウィンドウを指したとき
hit-enterプロンプト
- 現在のモードが 'mouse' オプションで指定されていないときはいつでも
- GUIでCTRLキーとSHIFTキーを同時に押しているとき

テキストが選択されていても、選択されていないかのように、あるいは、選択に関連し
たモードが存在しないかのように、Vimが通常の動作を継続するので、これはモードレ
ス選択と呼ばれる。Vimウィンドウの中のどんなテキストでも選択することができる。
開始点でマウスの左ボタンを押すことでテキストを選択し、終点までドラッグして離
す。選択を延長するには、'mousemodel' が "extend" のときにはマウスの右ボタンを
使用し、'mousemodel' が "popup" のときにはシフトキーを押しながらマウスの左ボタ
ンを使用する。
選択したテキストが変更されると、選択は解除される。

コマンドラインでは CTRL-Y で選択範囲をクリップボードにコピーできる。挿入モード
中にコピーするには CTRL-O を使い CTRL-Y <CR> とする。'guioptions' に a か A が
含まれるとき (X11 では既定でそうなっている) は、選択範囲が自動的にレジスタ "*
にコピーされる。

マウス中ボタンでテキストを貼り付けられる。X11 以外のシステムでは CTRL-R + を
使えば貼り付けられる。


3.4 ステータス行でのマウスの使用                        gui-mouse-status

Vimウィンドウの下のステータス行でマウスの左ボタンか右のボタンをクリックするこ
とでそのウィンドウがカレントウィンドウになる。これはボタンを放したときに起こる
(クリックとドラッグの操作を区別するため)。

左ボタンを使ってステータス行を上下にドラッグすると、ウィンドウのサイズを上下に
変更できる。この操作ではそのウィンドウはカレントウィンドウにならない。

ウィンドウの垂直の区切りも同様に機能する。クリックした区切りの左のウィンドウが
カレントウィンドウになる。左右にドラッグするとウィンドウの幅を変更できる。


3.5 様々なマウスクリック                                gui-mouse-various

    <S-LeftMouse>       マウスクリックで単語を前方検索する。'mousemodel' が
                        "popup" のときには、これは選択を開始するか、あるいは延
                        長する。
    <S-RightMouse>      マウスクリックで単語を後方検索する。
    <C-LeftMouse>       マウスクリックでタグ名へジャンプする。
    <C-RightMouse>      直前のタグジャンプの前の位置に戻る("CTRL-T" と同じ)。


3.6 マウスマッピング                                    gui-mouse-mapping

修飾キー付きのマウスイベントをマッピングすることもできる。例えば:
   :map <S-LeftMouse>     <RightMouse>
   :map <S-LeftDrag>      <RightDrag>
   :map <S-LeftRelease>   <RightRelease>
   :map <2-S-LeftMouse>   <2-RightMouse>
   :map <2-S-LeftDrag>    <2-RightDrag>
   :map <2-S-LeftRelease> <2-RightRelease>
   :map <3-S-LeftMouse>   <3-RightMouse>
   :map <3-S-LeftDrag>    <3-RightDrag>
   :map <3-S-LeftRelease> <3-RightRelease>
   :map <4-S-LeftMouse>   <4-RightMouse>
   :map <4-S-LeftDrag>    <4-RightDrag>
   :map <4-S-LeftRelease> <4-RightRelease>
これらのマッピングは、Motifアプリケーションの作法にしたがって、選択領域を拡張
するために、マウスの右ボタンを使わずに、Shiftキーを押しながら左ボタンを押す方
法を設定している。

修飾キーを使ったマウス操作のマッピングはモードレス選択では機能しない。


3.7 ドラッグ&ドロップ                                           drag-n-drop

Vimウィンドウに1つ、あるいは複数のファイルをドラッグ&ドロップすることができる。
ファイルは :drop コマンドを使ったときのように開かれる。この機能がサポートさ
れているかどうかは drop_file 機能で確認できる: has('drop_file')

Shiftキーを同時に押していると、Vimはカレントディレクトリをドロップされた最初の
ファイルがあるディレクトリに変更する。Ctrlキーを同時に押していると、ファイルを
開くためにウィンドウを分割する。押してなければカレントバッファが変更されていな
いときだけファイルは開かれる。

ディレクトリをVimにドロップすることもできる。この操作はexplorerプラグインでそ
のディレクトリを開く(それが利用可能だと想定している。無理ならエラーが表示され
るだろう)。Shiftキーを同時に押していれば、ディレクトリを開かずに、カレントディ
レクトリをそのディレクトリに変更する。

コマンドラインを編集中なら、ドロップされたファイルやディレクトリの名前がカーソ
ル位置に挿入される。これはExコマンドでそれらの名前を使うのに便利である。特別な
文字(スペース、タブ、ダブルクォート、'|'、MS-Windows以外ではバックスラッシュ
も)はエスケープされる。

==============================================================================
4. GUI選択の作成                                        gui-selections

                                                        quotestar
マウス(gui-mouse-selectを参照)か、あるいはVimのビジュアルモード(vを参照)を
使用して、選択を作成できる。'guioptions' に 'a' が指定されているなら、いつ選択
(ビジュアルモードや選択モード)が開始されるとしても、あるいは選択が変更されると
しても、Vimがウィンドウシステムの主要な選択の所有者になる(MS-Windowsで
gui-clipboardが用いられる。X11ではx11-selectionが用いられる。ここの説明
は両方に共通している)。

                                                        clipboard
選択を保存するための特別なレジスタがある。それは "* レジスタである。どのテキス
トが選択されているかという情報が(例えばマウスの左ボタンをクリックするなどして)
変更されるか、あるいは他のアプリケーションが選択されたテキストを貼り付けようと
しない限りここには何も書き出されない。使用されるときにはテキストは "* レジスタ
に書き出される。例えば、行を切り取って、それを現在の選択にして、クリップボード
にそれを書き出すためには次のようにする:

        "*dd

同様に、例えば、マウスの中ボタンをクリックするなどして、他のアプリケーションか
ら選択を貼り付けるときには、選択は始めに "* レジスタに書き出され、それから他の
レジスタと同じように挿入される。例えば、選択(クリップボードの内容)を貼り付ける
には:

        "*p

X11でこのレジスタを使うには、x11-selectionも参照。これは深く関連した "+ レジ
スタについても説明している。

あるVimから他の独立したVimにテキストを貼り付けたいときには、選択のタイプ(文
字、行あるいは矩形)もコピーされることに注意する。他のアプリケーションについて
は、タイプは常に文字である。x11-cut-bufferを介して得たテキストでも、その選択
のタイプは常に失われる。

'clipboard' オプションに "unnamed" 文字列が含まれているときには、無名レジスタ
は "* レジスタと同じである。したがってコマンドの前に "* を付けずに選択をコピー
し貼り付けることができる。

==============================================================================
5. メニュー                                             menus

まずはユーザーマニュアルのusr_42.txtを御覧ください。

5.1 メニューの使用                                      using-menus

基本的には、メニューは単にマッピングのように使用することができる。自分のメ
ニューを好きなだけたくさん定義することができる。
長い間Vimユーザーはメニューを十分に使用してこなかった。しかし自分のメニューや
メニュー項目を追加することは大きな力を秘めている。ある一連のキー操作を覚えられ
ないようなときに最も便利である。

別の言語用にメニューを作成するには、:menutrans を参照。
メニューをまったく使いたくない場合は、'go-M' を参照。

                                                        menu.vim
標準のメニューは "$VIMRUNTIME/menu.vim" ファイルから読み込まれる。パスがどこを
指すかについては$VIMRUNTIMEを参照。ユーザーは自分のメニューを設定することが
できる。その際に標準のメニューを利用するのはいい考えである。メニューに項目を追
加したり、あるいは、標準のメニューが気に入らなければ、全てのメニューを取り除く
ことができる:unmenu-all。.vimrcファイル(.gvimrcファイルではない!)にこの行を
追加することで標準のメニューが読み込まれないようにすることもできる:
        :let did_install_default_menus = 1
メニュー項目のSyntax(シンタックス)も無効にしたいなら:
        :let did_install_syntax_menu = 1
Syntax メニューの最初の項目 {訳注:「対応形式をメニューに表示」} を使うと、利用
可能な全てのファイルタイプをメニューに表示できる(読み込みに少し時間がかかるかも
しれない)。起動時に全てのファイルタイプが表示されているようにしたければ次の行
を加える:
        :let do_syntax_sel_menu = 1

以下のメニュー項目は、使用可能なすべてのカラースキーム、キーマップおよびコンパ
イラ設定を表示する。
        Edit > Color Scheme
        Edit > Keymap
        Tools > Set Compiler
しかしながら、'runtimepath' 内のディレクトリから関連するファイルをすべて検索す
るので読み込みに多少時間がかかる。したがって、それらは (イベント CursorHold
によって) 遅れて読み込まれる、もしくは手動で読み込むこともできる。すでに存在す
るすべての項目を起動時に読み込んでおきたい場合、以下を加える:
        :let do_no_lazyload_menus = 1

Note: menu.vim が読み込まれるのは、:syntax on もしくは :filetype on が実行
されたとき、もしくはユーザーの .vimrc ファイルが読み込まれた後である。これは、
オプション 'encoding' およびメッセージ用の言語 (:language messages) がそれよ
り前に設定されていなければならないことを意味する (もし変更したいのであれば)。

                                                        console-menus
このドキュメントはGUIの項目であるけれども、CUI版のVimでも実際にメニューを使用
することができる。そのときには明示的にmenu.vimを読み込まなければならないだろ
う。それは標準では設定されない。ほぼ実際のメニューシステムのようにメニューの項
目にアクセスするために 'wildmenu' を設定して:emenuコマンドの使用時にコマンド
ライン補完を使用することができる。これをするには、.vimrcファイルに次のコマンド
を付加しておく:
        :source $VIMRUNTIME/menu.vim
        :set wildmenu
        :set cpo-=<
        :set wcm=<C-Z>
        :map <F4> :emenu <C-Z>
メニューを開始するには<F4>を押す。そのときにはメニューのエントリを選択するため
にカーソルキーを使用することができる。それを実行するには<Enter>を入力する。
キャンセルするには<Esc>を入力する。これはコンパイル時に+menu機能を有効にする
必要がある。

                                                        tear-off-menus
GTK+ 2 と Motif は切取りメニュー(Tear-offメニュー)をサポートする。これは少し変
わったメニューで、ポップアップメニューが常に表示されるようなものである。メニュー
のウィンドウのサイズの変更が正確に機能しないなら、これはリソースに
"Vim*geometry" のように設定していることが原因かもしれない。もしそうなら代わり
に "Vim.geometry" を使用する。

GTK+ 3 では、GTK+ 3.4 から切取りメニューが非推奨となった。よって、GTK+ 3.4 以
降とリンクされた gvim ではこの機能は無効化される。

Win32 GUIバージョンはMotifの切取りメニューをエミュレートする。Motifユーザーな
ら簡単に違いを確認できるだろうが、同じように便利に使えると思う。:tearoffコマ
ンドとhidden-menusを利用して、メインのメニューバーに項目を作らずに切取りメ
ニューを作ることができる。


5.2 新しいメニューの作成                                creating-menus

                                :me  :menu   :noreme  :noremenu
                                E330 E327 E331 E336 E333
                                E328 E329 E337 E792
新しいメニュー項目を作るには、":menu" コマンドを使用する。これはほとんど ":map"
のコマンド群 (map-modes を参照) と同じだが最初の引数はメニュー項目の名前であ
り、'.' で区切ったメニューとサブメニューのパスとして与えられる。例えば:

   :menu File.Save  :w<CR>
   :inoremenu File.Save  <C-O>:w<CR>
   :menu Edit.Big\ Changes.Delete\ All\ Spaces  :%s/[ ^I]//g<CR>

この最後の1つはメニューバーに "Edit" という新しい項目を作る、そしてその上でマ
ウスのボタンを押すと "Big Changes" という項目を含んだメニューが表示されるだろ
う。"Big Changes" は "Delete All Spaces" という項目を含むサブメニューを持って
いて、その項目を選択すると操作が実行される。

端末モード用のメニューを作成するには、キーマッピング (:tmap) とは異なり、
:tmenu ではなく :tlmenu を使用する。これは、:tmenu がすでにメニューのツー
ルチップを定義するために使用されているためである。terminal-typing を参照。

メニュー名での特殊文字:
                                                        menu-shortcut
        &       この文字の次の文字はショートカットキーである。どのショートカッ
                トキーも(サブ)メニューの中で1度だけしか使用されていないことを
                確認すること。メニュー名に "&" を入れるには "&&" とする。
                                                        menu-text
        <Tab>   メニューの名前をそこで区切って以降を右詰めにする。実行する操作
                をそろえて表示するのに便利である。使いやすいように文字として
                "<Tab>" をそのまま書けばいいようになっている。本当のTab文字を
                使用するなら、その前にバックスラッシュを付けること!
例:

   :amenu &File.&Open<Tab>:e  :browse e<CR>

[文字通りタイプする]
(<Alt>キーと同時に)ショートカットキーの "F" を押し、それから "O" を押すと、こ
のメニューを使用できる。Openの項目は "Open     :e" のように表示される。":e" は
右詰めされ、"O" にはショートカットであることを示すために下線が引かれる。

                                        :am  :amenu  :an      :anoremenu
":amenu" コマンドは端末モードを除く全てのモードで使えるメニューの項目を1度に定
義することができる。コマンドを正確に機能させるために、いくつかのモード用に自動
的に文字が付加される:
        モード                  前に付加        後ろに付加
        ノーマルモード          なし            なし
        ビジュアルモード        <C-C>           <C-\><C-G>
        挿入モード              <C-\><C-O>
        コマンドラインモード    <C-C>           <C-\><C-G>
        オペレータ待機モード    <C-C>           <C-\><C-G>

後ろに付加されるCTRL-\ CTRL-Gは 'insertmode' が設定されているときには挿入モー
ドに戻る。CTRL-\_CTRL-Gを参照。

例:

   :amenu File.Next     :next^M

は以下と同じである:

   :nmenu File.Next     :next^M
   :vmenu File.Next     ^C:next^M^\^G
   :imenu File.Next     ^\^O:next^M
   :cmenu File.Next     ^C:next^M^\^G
   :omenu File.Next     ^C:next^M^\^G

注意: 挿入モードでは1つのノーマルモードのコマンドに対してだけ機能する。これは
CTRL-Oの仕様による。2つ以上のコマンドを使うには、":imenu" コマンドを使用する必
要がある。どのモードでもテキストを挿入するために式レジスタ('=' レジスタ)を使用
することができる:

   :amenu Insert.foobar   "='foobar'<CR>P

特殊なテキスト <Cmd> は "コマンドメニュー" を開始し、モードを変更せずにコマン
ドを直接実行する。":...<CR>" を使う箇所で代わりに "<Cmd>...<CR>" を使うことが
できる。詳細は <Cmd> を参照。例:
        anoremenu File.Next <Cmd>next<CR>

Note'cpoptions' の中の '<' フラグと 'k' フラグが適用される(含まれていたとき
には、<>による特殊キーの書式や生のキーコードは認識されない)。

Note: コマンドラインモードでの<Esc>はマッピングで使用されたときと同様に(入力を
キャンセルするのではなく)コマンドを実行する。これはVi互換である。コマンドライ
ンモードを終了するにはCTRL-Cを使用する。
{訳注: c_<Esc>を参照}

                :nme :nmenu  :nnoreme :nnoremenu :nunme :nunmenu
メニューコマンドが "n" で始まるものはノーマルモードに作用する。mapmode-n

                :ome :omenu  :onoreme :onoremenu :ounme :ounmenu
メニューコマンドが "o" で始まるものはオペレータ待機モードに作用す
る。mapmode-o

                :vme :vmenu  :vnoreme :vnoremenu :vunme :vunmenu
メニューコマンドが "v" で始まるものはビジュアルモードに作用する。mapmode-v

                :xme :xmenu  :xnoreme :xnoremenu :xunme :xunmenu
メニューコマンドが "x" で始まるものはビジュアルモードと選択モードに作用す
る。mapmode-x

                :sme :smenu  :snoreme :snoremenu :sunme :sunmenu
メニューコマンドが "s" で始まるものは選択モードに作用する。mapmode-s

                :ime :imenu  :inoreme :inoremenu :iunme :iunmenu
メニューコマンドが "i" で始まるものは挿入モードに作用する。mapmode-i

                :cme :cmenu  :cnoreme :cnoremenu :cunme :cunmenu
メニューコマンドが "c" で始まるものはコマンドラインモードに作用す
る。mapmode-c

                :tlm :tlmenu :tln     :tlnoremenu :tlu   :tlunmenu
メニューコマンドが "t" で始まるものは端末{訳註:ノーマルとジョブ両方の}モードに
作用する。mapmode-t

                                                :menu-<silent> :menu-silent
実行したコマンドをコマンドラインに表示しないようなメニューを定義するには、最初
の引数に "<silent>" を加える。例:
        :menu <silent> Settings.Ignore\ case  :set ic<CR>
これでこのメニューを使っても ":set ic" はコマンドラインに表示されない。それで
も実行したコマンドの出力は表示される。それを表示しないようにするには、
":silent" を付けてコマンドを実行する:
        :menu <silent> Search.Header :exe ":silent normal /Header\r"<CR>
"<silent>" は "<special>" や "<script>" の直後に書いてもよい。

                                        :menu-<special> :menu-special
'cpoptions' にフラグ "<" が含まれているときでも、メニューを定義する際には <>
記法で特殊なキーを表すことができる。これは 'cpoptions' の副作用が望ましくない
場合に便利である。例:
        :menu <special> Search.Header /Header<CR>
"<special>" はコマンド :menu の引数の一番最初か、"<silent>" や "<script>" の直
後に書かねばならない。