首页 > 解决方案 > 我想在 Vim 中只移动一行

问题描述

yy 和 p 应该复制并粘贴 1 行文本。但我必须回去删除原来的行。

:2,5m10 应该将行从 2 移动到 5 到第 10 行。但是我需要启用 :set number 以查看我要移动的行

我只想移动 1 行文本,有点像 yy+p 而不是使用 :2,3m10 来移动一行。

有没有类似 mm+p 的东西?所以它将当前行复制到缓冲区并删除该行,然后将其粘贴到您想要的位置?

:3米。将第 3 行移动到当前行。

上面的行是我想要的功能。我可以设置一个键映射,以便“mm”替换“:3m”。? 我觉得打字更容易。TIA

标签: linemovevi

解决方案


您所描述的是使用时的默认行为dd-it 在缓冲区中删除一行p并将其粘贴。

所以dd并且p有效。

y如果你是 vim 的新手,那么 'yanking' (with ) 和 'deleting' (with d) 都复制到缓冲区似乎有点奇怪 ,因为它的 'cut'、'copy' 和 'paste' 行为大多数其他编辑。

您可以阅读更多关于它的信息:help change.txt,尤其是:help registers.

另外,既然你说你需要启用:set number,我想知道你是否遇到过:set relativenumber?这非常有用 - 在下面的示例中,如果您的光标位于带有 'demonstrate' 的行上,则数字看起来是这样的:

3 This is just
2 a small
1 example to 
0 demonstrate 
1 how relative 
2 numbers can 
3 be useful

因此,如果您想将行 'a small' 移动到带有 'numbers can' 的行下方,您可以使用相对行号来知道这2k会将光标放在您想要的行上,您将点击dd,然后您d 有这种情况(删除的行现在在缓冲区中:

1 This is just
0 example to 
1 demonstrate 
2 how relative 
3 numbers can 
4 be useful

然后你可以3j移动到'numbers can'行,然后点击p。因此,相对数字是快速移动到您可以看到的线条的好方法。此外,为了完整起见,您可以在命令行上以类似的方式使用相对数字:(:-2m+3尽管我知道这不是您所追求的)。您甚至可以同时设置相对编号和设置编号,在这种情况下,就像上面的示例一样,只有您在当前行上显示绝对行号而不是零。


推荐阅读