forked from vim-jp/vimdoc-ja-working
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgui.jax
More file actions
1291 lines (1036 loc) · 72.2 KB
/
gui.jax
File metadata and controls
1291 lines (1036 loc) · 72.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
*gui.txt* For Vim バージョン 9.2. Last change: 2026 Apr 07
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, 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" も試される。逆のときも
同様である。
- Unix では、"~/.config/vim/gvimrc" あるいは "$XDG_CONFIG_HOME/vim/gvimrc"
が存在する場合、それが読み込まれる。":version" でこれを確認できる。
$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バージョン(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ウィンドウがまだ開いていないとき、この値はウィンドウが開か
れるまで保留される。位置はスクリーンに合うように調整される(可
能なら)。
*:wi* *:win* *:winsize* *E465*
:win[size] {width} {height}
{width}(幅)と{height}(高さ)を指定してウィンドウの大きさを設定
する。
数字の意味がよりわかりやすいので、代わりに `: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' を含めると、スクロールはカーソルのある行
の長さに制限される。
*motif-intellimouse*
インテリマウスを持っていて、Xサーバーがホイールをサポートしているなら、gvimで
テキストを上下にスクロールするのにホイールを使うことができる。これはXFree86
4.0以降のバージョンで機能する。古いバージョンでもパッチを当てれば利用可能にな
る。|scroll-mouse-wheel|を参照。
古いバージョンのXFree86ではXサーバーにパッチを当てなくてはならない。以下のペー
ジにはパッチとXサーバーのバイナリへのリンクに加えて、Linux上でインテリマウスを
使用することについて多少の情報がある(けれども必要とするものはないかもしれない):
(リンク切れ) 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' テキストを入力している間マウスポインタを隠す
'mousemoveevent' マウス移動イベントを有効にし、<MouseMove> をマッピングできる
ようにする
'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-V、CTRL-X、CTRL-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キーを押しながら左ボタンを押す方
法を設定している。
<MouseMove> にマッピングできるが、マッピングに使うには 'mousemoveevent' を有効
にしなくてはならない。
修飾キーを使ったマウス操作のマッピングはモードレス選択では機能しない。
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" 文字列が含まれているときには、無名レジスタ
は "* レジスタと同じである。したがってコマンドの前に "* を付けずに選択をコピー
し貼り付けることができる。
|W23| および |W24| も参照。
==============================================================================
5. メニュー *menus*
まずはユーザーマニュアルの|usr_42.txt|を御覧ください。
5.1 メニューの使用 *using-menus*
基本的には、メニューは単にマッピングのように使用することができる。自分のメ
ニューを好きなだけたくさん定義することができる。
長い間Vimユーザーはメニューを十分に使用してこなかった。しかし自分のメニューや
メニュー項目を追加することは大きな力を秘めている。ある一連のキー操作を覚えられ
ないようなときに最も便利である。
別の言語用にメニューを作成するには、|:menutrans| を参照。
メニューをまったく使いたくない場合は、|'go-M'| を参照。
*menu.vim*
標準のメニューは "$VIMRUNTIME/menu.vim" ファイルから読み込まれる。パスがどこを
指すかについては|$VIMRUNTIME|を参照。ユーザーは自分のメニューを設定することが
できる。その際に標準のメニューを利用するのはいい考えである。メニューに項目を追
加したり、あるいは、標準のメニューが気に入らなければ、全てのメニューを取り除く
ことができる|:unmenu-all|。.vimrcファイル(.gvimrcファイルではない!)にこの行を
追加することで標準のメニューが読み込まれないようにすることもできる: >
:let g:did_install_default_menus = 1
メニュー項目のSyntax(シンタックス)も無効にしたいなら: >
:let g:did_install_syntax_menu = 1
Syntax メニューの最初の項目 {訳注:「対応形式をメニューに表示」} を使うと、利用
可能な全てのファイルタイプをメニューに表示できる(読み込みに少し時間がかかるかも
しれない)。起動時に全てのファイルタイプが表示されているようにしたければ次の行
を加える: >
:let g:do_syntax_sel_menu = 1
< *menu-lazyload* *g:do_no_lazyload_menus*
以下のメニュー項目は、使用可能なすべてのカラースキーム、キーマップおよびコンパ
イラ設定を表示する。
Edit > Color Scheme ~
Edit > Keymap ~
Tools > Set Compiler ~
しかしながら、'runtimepath' 内のディレクトリから関連するファイルをすべて検索す
るので読み込みに多少時間がかかる。したがって、それらは (イベント |CursorHold|
によって) 遅れて読み込まれる、もしくは手動で読み込むこともできる。すでに存在す
るすべての項目を起動時に読み込んでおきたい場合、以下を加える: >
:let g: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*
メニューコマンドが "tl" で始まるものは端末{訳注:ノーマルとジョブ両方の}モード
に作用する。|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>" の直
後に書かねばならない。
*:menu-<script>* *:menu-script*
メニューに指定されたコマンドにはマッピングが適用される。適用しないようにするに
は、":noremenu" コマンド(とそれに類するモード別のコマンド)を使う。スクリプト
ローカルなマッピングを使うには ":menu" コマンドの最初の引数、あるいは
"<silent>" の次に "<script>" と書く。
{訳注: これは<SID>で指定した部分だけがマッピングされる。例:
nnoremenu <script> AAA.BBB :echo "<SID>LM" "LM"<CR>
cnoremap <SID>LM 'This is script-local mapping'
cnoremap LM 'This is not used'
スクリプトファイルでこのように設定し、メニューのAAA.BBBを実行すると
'This is script-local mapping' LM
と表示される。"<SID>LM" はマッピングされ、"LM" はマッピングされていな
い。}
*menu-priority*
メニューに優先度を与えることができる。より高い優先度を与えられたメニューほど右
に配置される。優先度は ":menu" コマンドの前の数字で与えれられる。
例: >
:80menu Buffer.next :bn<CR>
標準のメニューはこれらの優先度を持つ:
File 10
Edit 20
Tools 40
Syntax 50
Buffers 60
Window 70
Help 9999
優先度を指定しない、あるいはゼロを指定すると、500が用いられる。
ポップアップメニューに対しては優先度は意味を持たない。
対応しているシステム (Motif と GTK+) では、「ヘルプ」メニューはメニューバーの
右端に離れて配置される。これはGTK+ 2 と 3 では、もはや認められないユーザーイン
ターフェイスデザインのため行われない。
ヘルプメニューの後ろに置くために、9999より高い優先度を使用することができるが、
それは非標準であり、推奨しない。優先度の取り得る値は最高で約32000である。最低
は1である。
*sub-menu-priority*
同様にサブメニューも配置を指定できる。優先度は、メニュー名の前に、ドット区切り
の優先度のリストとして指定する: >
:menu 80.500 Buffer.next :bn<CR>
サブメニューの優先度を与える必要があるのは、項目を配置する位置を指定したいとき
だけである。例えば、他の項目の前にサブメニューを置くには: >
:menu 80.100 Buffer.first :brew<CR>
あるいは他の項目の後にサブメニューを置いて、標準設定の優先度を持つ項目がその前
に置かれるようにするには: >
:menu 80.900 Buffer.last :blast<CR>
数字が抜けているときには、標準設定の500が用いられる: >
:menu .900 myMenu.test :echo "text"<CR>
メニューの優先度はメニューを新しく生成するときだけ用いられる。すでにあるとき、
例えば、別のモードで定義されていたときには、優先度は変更されない。したがって、
優先度はメニューを最初に定義するときだけ与える必要がある。
例外はポップアップメニューである。各モード(ノーマルモード、オペレータ待機モー
ド、ビジュアルモード、挿入モード、コマンドラインモード)に別々のメニューがあ
る。これらのメニューは順序が異なってもよい。これはメニューバーのメニューとは異
なる。メニューバーのメニューは全てのモードで同じ順序である。
NOTE: サブメニューの優先度は現在全てのGUIのバージョンで機能する訳ではない。
*menu-separator* *E332*
メニューの各項目は特殊なメニュー項目を使って区切ることができる。それはシステム
によるが、線や点線として表示される。そのような項目の名前は '-' で始めて '-' で
終わるように定義する。間には一意な名前を挟むことができる。普通のメニュー項目と
同様に優先度を設定することもできる。
例: >
:menu Example.item1 :do something
:menu Example.-Sep- :
:menu Example.item2 :do something different
Note: 区切りの定義にはコマンドの指定が必要である。そのメニュー項目は選択するこ
とができないので、内容はなんでも構わない。ただ単にコロン(:)を1つ書いておくだけ
でいい。
*gui-toolbar*
ツールバーは今のところWin32、Motif、GTK+ (X11)、Photon GUIで利用可能である。い
ずれは他のGUIでも使えるようになるだろう。標準のツールバーはmenu.vimで定義され
ている。
ツールバーの表示は 'guioptions' の文字 'T' によって制御される。したがって、メ
ニューとツールバーを同時に、あるいはどちらかだけを表示することもできるし、両方
とも非表示にすることもできる。
表示方法は 'toolbar' オプションで変更できる。画像かテキスト、もしくは両方を表
示するかを選択できる。
*toolbar-icon*
ツールバーは、1つのレベルだけを持つToolBarと呼ばれる特別なメニューとして定義さ
れている。Vimはこのメニューの項目を以下のように解釈する:
1) "icon=" 引数が与えられたときは、そのファイルが使われる。ファイル名にはフル
パスか、ファイル名のみを指定する。後者の場合には、そのファイルは3)の場合と
同じように 'runtimepath' の "bitmaps" ディレクトリから検索される。例: >
:amenu icon=/usr/local/pixmaps/foo_icon.xpm ToolBar.Foo :echo "Foo"<CR>
:amenu icon=FooIcon ToolBar.Foo :echo "Foo"<CR>
< Note: 最初の例では拡張子も含めている。2番目の例では拡張子は省略されてい
る。
ファイルが開けなければ2)を試す。
ファイル名に空白を含めるにはバックスラッシュでエスケープする。
メニューの優先度はiconの引数の後に指定する: >
:amenu icon=foo 1.42 ToolBar.Foo :echo "42!"<CR>
2) 'BuiltIn##' (##は数字である) という名前の項目はVimで利用可能な組み込みの
ビットマップの番号##を使用するとみなされる。今のところ、0から30までの31個
の一般的な編集操作のものが用意されている|builtin-tools|: >
:amenu ToolBar.BuiltIn22 :call SearchNext("back")<CR>
3) 2)以外の名前を持つ項目は最初に 'runtimepath' の "bitmaps" ディレクトリから
検索される。もしあればそのビットマップファイルがツールバーボタンのイメージ
として用いられる。正確なファイル名はOS特有であることに注意する。例えば、
Win32でのコマンド >
:amenu ToolBar.Hello :echo "hello"<CR>
< は、'hello.bmp' ファイルを検索するだろう。GTK+/X11では 'Hello.xpm' である。
GTK+ 2では 'Hello.png'、'Hello.xpm'、'Hello.bmp' がチェックされ、最初に見
つかったものが使われる。
MS-WindowsとGTK+ 2ではビットマップはボタンの大きさに合わせて拡大縮小され
る。MS-Windowsでは縦18横18のサイズがちょうどいいだろう。
MS-Windowsではビットマップは16色の標準パレットを使った物である。明るい灰色
はウィンドウのフレームの色に変更され、暗い灰色はウィンドウの影の色に変更さ
れる。システムに依存するが、16色よりも色が多くても問題ないだろう。
4) ビットマップがまだ見つからないならば、Vimは組み込みの名前のリス
トに対して同等のものを探す。どの組み込みのボタンイメージも名前を持ってい
る。だから、コマンド >
:amenu ToolBar.Open :e
< は、open.bmpが存在しなければ、組み込みの "open a file" ボタンイメージを表
示するだろう。全ての組み込みの名前はmenu.vimで用いられているので確認できる。
5) 全てが失敗すると、空白だが、ちゃんと機能する、ボタンが表示される。
*builtin-tools*
番号 名前 通常の動作 ~
00 New 新しいウィンドウを開く
01 Open 現在のウィンドウで開くためにファイルをブラウズする
02 Save バッファをファイルに保存する
03 Undo 最後の変更を取り消す
04 Redo 最後の取り消した変更をやり直す
05 Cut 選択されたテキストを削除しクリップボードへ送る
06 Copy 選択されたテキストをクリップボードにコピーする
07 Paste クリップボードからテキストをペーストする
08 Print 現在のバッファを印刷する
09 Help Vimの組み込みのヘルプでバッファを開く
10 Find 検索コマンドを開始する
11 SaveAll 全ての修正されたバッファをファイルに保存する
12 SaveSesn 現在の状態をセッションファイルに保存する
13 NewSesn 新しいセッションファイルに保存する
14 LoadSesn セッションファイルを読み込む
15 RunScript Vim scriptとして実行するためにファイルをブラウズする
16 Replace 置換コマンドのためのプロンプト
17 WinClose 現在のウィンドウを閉じる
18 WinMax 現在のウィンドウに使用する行数を最大にする
19 WinMin 現在のウィンドウに使用する行数を最小にする
20 WinSplit 現在のウィンドウを分割する
21 Shell シェルを開始する
22 FindPrev 後方に再検索する
23 FindNext 前方に再検索する
24 FindHelp ヘルプを検索する単語のためのプロンプト
25 Make makeを実行し最初のエラーにジャンプする
26 TagJump カーソルの下のtagにジャンプする
27 RunCtags 現在のディレクトリのファイルに対してtagsを作成する
28 WinVSplit 現在のウィンドウを縦分割する
29 WinMaxWidth 現在のウィンドウの幅を最大化する
30 WinMinWidth 現在のウィンドウの幅を最小化する
*hidden-menus* *win32-hidden-menus*
Win32とGTK+ GUIでは、']' で始まるメニュー名はメインのメニューバーから除外され
る。それを表示するには|:popup|か|:tearoff|コマンドを使用しなければならない。
*window-toolbar* *WinBar*
各ウィンドウはローカルなツールバーを持つことができる。これはウィンドウの先頭行
を使用し、したがってテキスト用の領域は 1 行少なくなる。ツールバー内の項目は
"WinBar" で始まらなければならない。
テキストのみを使用することができる。Unicode を使用する場合、項目をアイコンのよ
うに見せるために特殊文字を使うことができる。
項目が収まらない場合、最後の項目は使用することができない。ツールバーは折り返さ
ない。
Note: これらのコマンドを実行しているとき、Vim はどのモードでもありうる。メ
ニューはノーマルモード用に定義されるべきで、かつ現状のモードを変えることなく実
行される。したがって、カレントウィンドウがビジュアルモードで、かつメニューコマ
ンドが意図的にモードを変えない場合、Vim はビジュアルモードのままである。もっと
もよいのは、副作用を避けるために `:nnoremenu` を使用することである。
デバッガツールの例: >
nnoremenu 1.10 WinBar.Step :Step<CR>
nnoremenu 1.20 WinBar.Next :Next<CR>
nnoremenu 1.30 WinBar.Finish :Finish<CR>
nnoremenu 1.40 WinBar.Cont :Continue<CR>
< *hl-ToolbarLine* *hl-ToolbarButton*
ウィンドウツールバーは ToolbarLine および ToolbarButton ハイライトグループを使
用する。
ウィンドウを分割する際、ウィンドウツールバーは新しいウィンドウにはコピーされな
い。
*popup-menu*
Win32、GTK+、Motif、Photon GUIでは、特別なメニュー "PopUp" を定義することがで
きる。これは、'mousemodel' がpopupあるいはpopup_setposに設定されているときに、
マウスの右ボタンが押されると表示されるメニューである。
例: >
nnoremenu 1.40 PopUp.&Paste "+gP
menu PopUp
5.3 メニューの定義を表示する *showing-menus*
メニューがどのように定義されているかを確認するには、(":map" コマンドでするのと
全く同様に)menuコマンドの後にたった1つの引数を指定するだけである。指定されたメ
ニューがサブメニューならば、その階層の下の全てのメニューが表示される。:menuの
後に引数を与えなければ、適切なモードに対する全てのメニュー項目が表示される(例
えば、コマンドラインモードに対して:cmenu)。
メニュー項目の一覧には、指定されたコマンドの前に特別な文字が表示される:
* そのメニュー項目は再マッピングを避けるために "nore" を付けて定義された
& そのメニュー項目は再マッピングをスクリプトローカルに限定するために
"<script>" を付けて定義された
s そのメニュー項目のマッピングが実行されたとき、表示がないように
"<silent>" を付けて定義された
- そのメニュー項目は非表示である
NOTE: menuコマンドでメニューの名前を入力しているときに<Tab>を打つと名前が補完
される(設定による)。
列挙中にメニューを変更することはできない。 *E1310*
これは通常は発生しないが、例えば、タイマーのコールバックでメニューを定義し、
ユーザーが |more-prompt| を表示する方法でメニューを列挙する場合にのみ発生する。
5.4 メニューの実行 *execute-menus*
*:em* *:emenu* *E334* *E335*
:[range]em[enu] {menu} コマンドラインから{menu}を実行する。
通常はノーマルモードのメニューを実行する。実行
範囲が与えられたときは、ビジュアルモードのメ
ニューを実行する。
<c-o>から実行されたときは、挿入モードのメ
ニューを実行する。例: >
:emenu File.Exit
:[range]em[enu] {mode} {menu} 上記と同様だが、{mode} 用のメニューを実行する:
'n': |:nmenu| ノーマルモード
'v': |:vmenu| ビジュアルモード
's': |:smenu| 選択モード
'o': |:omenu| オペレータ待機モード
't': |:tlmenu| 端末モード
'i': |:imenu| 挿入モード
'c': |:cmenu| コマンドラインモード
CUI版のvimをWANT_MENUを定義してコンパイルしたなら、:emenuを使ってGUIのときと同
じように便利なメニューを使用できる。その際に 'wildmenu' を設定しておくと便利で
ある。使用例は|console-menus|を参照。
範囲を指定するとき、'<,'> と指定すると、最後にビジュアル選択した範囲に対して実
行される。
5.5 メニューの削除 *delete-menus*
*:unme* *:unmenu*
*:aun* *:aunmenu*
メニュー項目やサブメニュー全体を削除するには、unmapコマンドによく似たunmenuコ
マンドを使用する。例えば: >
:unmenu! Edit.Paste
これは挿入モードとコマンドラインモードでの操作をEditメニューの項目Pasteから取
り除く。
NOTE: umenuコマンドでメニューの名前を入力しているときに<Tab>を打つと名前が補完
される(設定による)。
全てのメニューを取り除くには次のようにする: *:unmenu-all* >
:unmenu * " ノーマルモードとビジュアルモードの全てのメニューを取
" り除く
:unmenu! * " 挿入モードとコマンドラインモードの全てのメニューを取
" り除く
:aunmenu * " 端末モードを除く全てのモードの全てのメニューを取り除
" く
:tlunmenu * " 端末モードの全てのメニューを取り除く
メニューバーを非表示にするには: >
:set guioptions-=m
5.6 メニューを無効にする *disable-menus*
*:menu-disable* *:menu-enable*
メニューを削除するのではなくて、一時的に無効にしたいときは、":menu" コマンドに
"disable" キーワードを指定する。有効にするには "enable" キーワードを指定する。
例: >
:menu disable &File.&Open\.\.\.
:amenu enable *
:amenu disable &Tools.*
このコマンドはmenuコマンド群が影響する各モードに適用される。"&" は翻訳された名
前にも適用するために必要である。
引数に "*" を使うと、全てのメニューに作用する。そうでなければ、指定したメニュー
項目とそのサブメニューに作用する。
5.7 メニューの例 *menu-examples*
メニューを使用してメニュー項目を追加する方法の例をここに示す。カーソルの下の
キーワードをメニュー項目に追加することができる。レジスタ "z" を使用している。
>
:nmenu Words.Add\ Var wb"zye:menu! Words.<C-R>z <C-R>z<CR>
:nmenu Words.Remove\ Var wb"zye:unmenu! Words.<C-R>z<CR>
:vmenu Words.Add\ Var "zy:menu! Words.<C-R>z <C-R>z <CR>
:vmenu Words.Remove\ Var "zy:unmenu! Words.<C-R>z<CR>
:imenu Words.Add\ Var <Esc>wb"zye:menu! Words.<C-R>z <C-R>z<CR>a
:imenu Words.Remove\ Var <Esc>wb"zye:unmenu! Words.<C-R>z<CR>a
(指定するコマンドには<>記法を使える。このテキストをそのままコピー/ペーストして
試してみたり、gvimrcに書き加えることができる。"<C-R>" は CTRL-R であり、"<CR>"
は <CR> キーである。|<>|)