Ctrl+TAB 在 gnome-terminal 的 vim 中不起作用

Ctrl+TAB 在 gnome-terminal 的 vim 中不起作用

我有一個嚴重的問題。通常,我使用的編輯器是 vim,儘管我無法映射 ctrl+tab 操作。我想用 ctrl+tab (ctrl+shift+tab)切換選項卡。在 xterm 中,啟用了此映射,並且將使用該操作。但是,在 gnome-terminal 中,tab 是剛剛出現的轉義序列。請告訴我如何使用 gnome-terminal 在 vi​​m 中切換選項卡。

答案1

由於鍵盤輸入的內部處理方式,不幸的是,這在今天通常是不可能的,即使在 GVIM 中也是如此。某些組合鍵,例如Ctrl+ 非字母組合無法映射,且無法區分Ctrl+ 字母與Ctrl+ + 字母。 Shift(除非你的終端發送一個不同的術語帽程式碼,但大多數都沒有。如果沒有發生/插入,則無法使用該組合鍵。這也適用於<Tab>/ <C-I><CR>/ <C-M>/ <Esc>/<C-[>等(唯一例外是<BS>/ <C-H>。)這是一個已知的痛點,也是 vim_dev 和 #vim IRC 頻道上各種討論的主題。

有些人(首先是 Paul LeoNerd Evans)想要解決這個問題(即使是支援此功能的終端機中的控制台 Vim),並提出了各種建議,cp。http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

但截至今天,還沒有補丁或志工出現,儘管許多人表示希望在未來的 Vim 8 主要版本中提供此功能。

答案2

問題是在終端機中,Tab字元是^I( Control- I)。這意味著在按下 Tab 的同時按下 Control 終端甚至不會費心將其傳遞給 Vim。[1]它只是發送一個常規製表符。

GVim 可以支援這一點,因為它不必依賴終端來告訴它以什麼組合按下哪些鍵——它可以更直接地存取鍵盤事件,因此可以輕鬆查看修改後的特殊鍵。

我建議你找到一個不同的鍵來映射,這樣你就可以保持一致性。

[1] 據我了解,對於「現代」終端模擬器來說,這不再是事實,但它曾是長期以來,存在一個巨大的遺留障礙需要克服,因為 Vim 使用的終端庫 (Ncurses) 甚至不處理此事件,因此即使終端在技術上可能支援它,Vim 也不能,因為庫 API 它靠不能。大約每年一次,Vim 開發者清單中都會認真討論透過各種方式解決這個問題,包括切換到更強大的 API,但沒有任何結果。

答案3

我對此最接近的答案是創建Leader+TabLeader++ShiftTab

map <leader><Tab> :bnext<cr>
map <leader><S-Tab> :bprevious<cr>

我已將 my 映射Leader,(逗號),因此輸入,+Tab

然而它們的效果不是很好。您無法Leader按住並持續點擊Tab來捲動選項卡。這也不屬於 MRU(最近使用)行為。

為了澄清起見,我使用“緩衝區”而不是“選項卡頁”,因為我發現這些更好地映射了其他編輯器使用選項卡的概念。

您可以嘗試以下方法來代替此操作:

map <leader><Tab> :b<Space>

這將開啟 ex 命令,然後您可以按Tab開始捲動緩衝區。然後您還可以使用來回移動。

透過此方法,您也可以開始鍵入開啟緩衝區的一部分,然後按Tab將在開啟緩衝區的篩選清單中循環。

就我個人而言,我只是映射Leader+Tab來給我基本的 MRU 行為:

map <leader><Tab> :b#<cr>

相關內容