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