【问题标题】:gvim: <S-Home> skips last character on linegvim: <S-Home> 跳过最后一个字符
【发布时间】:2013-11-30 18:43:59
【问题描述】:

因为我喜欢在插入模式下使用带光标键的 shift 来选择文本,所以我在 .gvimrc 中放置了以下映射:

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

虽然这在大多数情况下都能完美运行,但当光标位于行尾时会出现问题。

在这种情况下,当我使用&lt;S-Home&gt; 时,该行的最后一个字符不包含在选择中:

作为补充,但不太重要的是,&lt;S-End&gt; 在行尾选择最后一个字符。

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

【问题讨论】:

  • &lt;C-\&gt;&lt;C-O&gt;替换&lt;C-O&gt;能解决问题吗?
  • 嗨@glts:是的,谢谢! 有什么作用?
  • &lt;C-\&gt;&lt;C-O&gt;&lt;C-O&gt; 几乎相同:请参阅:h i_CTRL-\_CTRL-O 的帮助。
  • 会的。再次感谢!

标签: vim selection keymapping


【解决方案1】:

感谢 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 通常处理行尾的方式与其他文本编辑器不同。

【讨论】:

  • 在插入模式下,光标可以在行的最后一个字符之后,但在正常模式下不是(通常,虽然可以重新配置 Vim)。这就是&lt;C-O&gt; 向左移动的原因。
  • @IngoKarkat:感谢您的解释。那么重新配置而不是使用&lt;C-\&gt;&lt;C-O&gt; 是否有意义?我该怎么做?
  • 不,对于映射,这只是为它制作的。但是,如果您喜欢 :set virtualedit=onemore(或 =all),请继续尝试。
猜你喜欢
  • 2012-02-10
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 2018-09-24
  • 2019-07-09
  • 1970-01-01
相关资源
最近更新 更多