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
+------------------------------------------------------------+ | 檔案 編輯 工具 語法 緩衝區 視窗 說明 | +------------------------------------------------------------+
請注意,說明選單的數字非常高,使其顯示在最右側。第二個數字 (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} 必須是一個單字。如果您想在名稱中放入點號、空格或 Tab 鍵,您可以使用 <> 表示法(例如,<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- :

42.2 選單命令

您可以定義僅在某些模式下存在的選單項目。這就像 ":map" 命令的變體一樣運作:
:menu 一般、視覺和運算子等待模式 :nmenu 一般模式 :vmenu 視覺模式 :omenu 運算子等待模式 :menu! 插入和命令列模式 :imenu 插入模式 :cmenu 命令列模式 :tlmenu 終端機模式 :amenu 所有模式(終端機模式除外)
為了避免選單項目的命令被對應,請使用命令 ":noremenu"、":nnoremenu"、":anoremenu" 等。
使用 :AMENU
":amenu" 命令有點不同。它假設您給出的 {keys} 將在一般模式下執行。當 Vim 在使用選單時處於視覺或插入模式時,Vim 必須先返回一般模式。":amenu" 會為您插入 CTRL-CCTRL-O。例如,如果您使用此命令:
:amenu  90.100 Mine.Find\ Word  *
那麼產生的選單命令將是:
一般模式:* 視覺模式:CTRL-C * 運算子等待模式:CTRL-C * 插入模式:CTRL-O * 命令列模式:CTRL-C *
當處於命令列模式時,CTRL-C 會放棄到目前為止輸入的命令。在視覺和運算子等待模式下,CTRL-C 會停止模式。插入模式下的 CTRL-O 會執行命令,然後返回插入模式。CTRL-O 僅適用於一個命令。如果您需要使用兩個或更多命令,請將它們放入函式中並呼叫該函式。範例:
: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" 選單項目。若要僅列出插入模式的某個特定選單項目:
:imenu Edit.Undo
請注意,您必須輸入正確的名稱。這裡區分大小寫。但是,可以省略加速鍵的 '&'。也可以省略 <Tab> 及其後面的內容。

刪除選單

若要刪除選單,請使用與列出相同的命令,但將 "menu" 變更為 "unmenu"。因此,":menu" 變成 ":unmenu",":nmenu" 變成 ":nunmenu" 等。若要刪除插入模式的 "Tools.Make" 項目:
:iunmenu Tools.Make
您可以使用選單名稱刪除整個選單及其中的所有項目。範例:
:aunmenu Syntax
這會刪除 Syntax 選單及其中的所有項目。

42.3 其他

您可以使用 'guioptions' 中的旗標來變更選單的外觀。在預設值中,它們都包含在內,但 "M" 除外。您可以使用類似以下的命令來移除旗標:
:set guioptions-=m
m 移除時,不會顯示選單列。
M 新增時,不會載入預設選單。
g 移除時,非作用中的選單項目不會變成灰色,而是完全移除。(並非在所有系統上都有效。)
若要翻譯選單項目,請參閱 :menutrans
由於必須使用滑鼠來選擇選單項目,因此最好使用 ":browse" 命令來選擇檔案。並使用 ":confirm" 來取得對話方塊,而不是錯誤訊息,例如,當目前緩衝區包含變更時。這兩者可以組合使用:
:amenu File.Open  :browse confirm edit<CR>
":browse" 會顯示檔案瀏覽器,讓您選擇要編輯的檔案。當目前的緩衝區有變更時,":confirm" 會彈出一個對話方塊。然後,您可以選擇儲存變更、捨棄變更或取消命令。對於更複雜的項目,可以使用 confirm() 和 inputdialog() 函式。預設選單包含一些範例。

42.4 工具列和快顯選單

有兩個特殊選單: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"。對於 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" 時才會出現。兩者的區別在於 "popup_setpos" 會將游標移動到滑鼠指標的位置。當在選取範圍內點擊時,選取範圍將保持不變。當存在選取範圍但您在選取範圍外點擊時,選取範圍將被移除。每個模式都有一個單獨的快顯選單。因此,不會像正常選單中那樣有灰色項目。
生命、宇宙和萬物的意義是什麼? 42 道格拉斯·亞當斯,唯一知道這個問題真正意義的人,不幸地已經去世了。所以現在您可能會想知道死亡的意義是什麼...
下一章:usr_43.txt 使用檔案類型
版權聲明:請參閱 manual-copyright vim:tw=78:ts=8:noet:ft=help:norl
主頁
命令索引
快速參考