Vim 复制保留光标位置

Vim 复制保留光标位置

我希望在 vim 中有一个快捷方式,可以执行行复制,而不会弄乱光标的位置。简单的复制和粘贴总是会将光标移动到下一行的开头,所以我认为我需要分两步完成:复制行的开头,然后复制行的结尾。我尝试的是:

noremap <C-S-d> y0O<ESC>pkéy$lgp`[

重新hjkl映射到jklé。 (如果不重新映射它看起来会像这样:y0O<ESC>pjly$kgp`[。)

但这似乎不能作为命令使用,尽管我逐个按键测试它时,它运行良好。我想知道这个宏有什么问题?

答案1

我看到的一个问题是将noremap左侧的值映射到右侧的值无需重新映射基本上,右侧始终被视为内置映射。

您可以使用map代替noremap,或者可以使用左侧的原始映射。这对我来说似乎很有效:

noremap <C-S-d> y0O<ESC>pjly$kgp`[

顺便说一句,下面是我复制线条的方式,这样您就可以用不同的方式思考:

nnoremap zj mz"yyy"yP`z
nnoremap zk mz"yyy"yP`zk

复制的步骤如下:

  • z使用以下方式保存标记中的当前位置mz
  • y使用以下方法将行复制到寄存器中"yyy
  • 粘贴上面的行"yP
  • 转到原始位置`z

对我来说,这可以让光标保持在正确的位置。

答案2

Andrew 的答案几乎完美;只是在行首调用时无法按预期工作。以下是略微修改的键映射,可解决此问题:

noremap <C-S-d> v0yO<ESC>pjly$kgp[`

相关内容