gvim:<s-home>跳过</s-home>上的最后一个字符

时间:2013-11-30 18:44:00

标签: vim selection keymapping

因为我喜欢在插入模式下使用shift键和Shift来选择文本,所以我在.gvimrc中添加了以下映射:

inoremap <S-Home>   <C-O>vg0<C-G>
inoremap <S-End>    <C-O>vg$<C-G>

虽然这在大多数情况下都能正常工作,但当光标位于一行的末尾时会出现问题。

before

在我使用<S-Home>的情况下,该行的最后一个字符不包含在选择中:

after

补充一点,但不太重要的是,一行末尾的<S-End>选择最后一个字符。

我该如何避免这种行为?我觉得这与vim的“选择模式”并没有特别的关系,但是vim通常会将行结尾视为与其他文本编辑器不同。

1 个答案:

答案 0 :(得分:0)

感谢glts,这是解决方案:

inoremap <S-Home>   <C-\><C-O>vg0<C-G>
inoremap <S-End>    <C-\><C-O>vg$<C-G>

根据:h i_CTRL-\_CTRL-O的帮助,CTRL-\ CTRL-O是“像CTRL-O但不移动光标”。它并没有真正解释为什么CTRL-O会移动光标,但它似乎与光标“超出行尾”有关。我无法理解这意味着什么,但它有点支持我的怀疑,即vim通常将行结尾与其他文本编辑器区别开来。