我有我的 gvim 设置,这样我就可以使用 Ctrl-Shift-Right、Ctrl-Shift-Left 等按单词选择(是的,我知道这是一个坏习惯,但它对我有用......)。
不幸的是,这些组合键在屏幕会话中的控制台 vim 中使用时会删除文本。我相信这是因为两个组合键在终端上生成代码Esc[1;6D
和,它们分别被解释为“删除接下来的 6 行”或“更改下一行”。Esc[1;6C
有没有办法阻止屏幕或控制台 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 "
答案1
显然,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>')
答案2
这就是我现在的情况.vimrc
:
if ! has("gui_running")
noremap <ESC>[1;6D <C-S-Left>
inoremap <ESC>[1;6D <C-S-Left>
noremap <ESC>[1;6C <C-S-Right>
inoremap <ESC>[1;6C <C-S-Right>
endif
答案3
将绑定从 ~/.vimrc 移至 ~/.gvimrc。