我希望在 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[`