Terminal

螢幕會話中的控制台 vim:重新映射 Ctrl-Shift-Left、Ctrl-Shift-Right 以不刪除行

  • December 17, 2014

我有我的 gvim 設置,以便我可以使用 Ctrl-Shift-Right、Ctrl-Shift-Left 等逐字選擇(是的,我知道這是一個壞習慣,但它對我有用..)。

不幸的是,這些組合鍵在螢幕會話內的控制台 vim 中使用時會刪除文本。我相信這是因為這兩個組合鍵會在終端上產生程式碼Esc``[1;6DEsc``[1;6C,它們分別被解釋為“刪除接下來的 6 行”或“更改下一行”。

有什麼方法可以阻止螢幕或控制台 vim 解釋這些組合鍵嗎?

更新:我的 .screenrc 的內容:

sessionname daku
startup_message off
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "

很明顯,Vim 沒有鍵序列的綁定,␛[1;6D但有一個以 , 開頭的其他鍵序列的綁定(通常由鍵發送)。將重新映射添加到您的以聲明確實是++等等。我認為以下應該可以解決問題:␛[1``␛[1~``Home``.vimrc``␛[1;6D``Ctrl``Shift``Left

noremap <ESC>[1;6D <C-S-Left>
noremap! <ESC>[1;6D <C-S-Left>
noremap <ESC>[1;6C <C-S-Right>
noremap! <ESC>[1;6C <C-S-Right>

這是我的.vimrc

function Allmap(mapping)
 execute 'map' a:mapping
 execute 'map!' a:mapping
endfunction
function Allnoremap(mapping)
 execute 'noremap' a:mapping
 execute 'noremap!' a:mapping
endfunction
call Allmap('<ESC>[6D <C-S-Left>')
call Allmap('<ESC>[6C <C-S-Right>')
call Allnoremap('<C-S-Left> <C-Left>')
call Allnoremap('<C-S-Right> <C-Right>')

引用自:https://unix.stackexchange.com/questions/29428