[英]How to select the block of text between two tags (html, xml, ...) in vim?
[英]How to move block of code in VIM
假设我有以下代码块:
int main(void)
{
return 0;
}
int abc(void)
{
printf("First line\n");
printf("Druhy radek\n");
printf("tuna fish\n");
}
...并且我想将函数abc的内容移至函数main。 我尝试使用visual selection
,但是当我选择这三行并将其粘贴时,会发生这种情况:
int main(void)
{
return 0;
printf("First line\n"); }
printf("Druhy radek\n");
printf("tuna fish\n"); int justAregularFunction(void)
{
取而代之的是,我要在main函数中为已删除的文本块创建一个空格,然后将其粘贴。 我尝试使用]p
而不是常规p
来粘贴文本,但这没有用。
解决方案是使用d2j
删除三行,然后我可以按需要粘贴该块。 但是当您有很多行的代码时,它并不是很有用。 另外, :set paste
和:set nopaste
命令也无济于事。 我正在学习VIM,并且没有使用vi的经验,所以我可能会缺少一些东西。 Vim tutor
非常有帮助,但是只解释了移动单行。 另外,我在堆栈溢出的地方找到了很多关于在vim中移动行的材料,但是有什么帮助。 我想要像>>
<<
这样的东西来移动文本,但要垂直移动。
我不知道的第二件事是如何在视觉选择中删除文本和空格。 当我选择文本并尝试将其删除时,它会留出空白空间。 Button D
仅删除没有空格的文本, X
也会删除文本(以及带有shift和control的其他变体)。 同样,使用d数字j会有所帮助,但是我想在visual
选择中实现它。
我希望这不是完全愚蠢的问题,但我确实没有找到解决方法。 谢谢你的帮助。
看起来您已经使用了可视的逐块选择 ; 粘贴时,不会创建新行,而是将内容插入(在光标位置处)现有行内。 (这也解释了您的第二个问题,其余的空行。)
如果要移动线 ,请确保从Shift + V开始逐行选择 ; 您会在底部的状态行中看到-- VISUAL LINE --
行-- VISUAL LINE --
指示。 在你的榜样,这将是(把光标放在任何地方的printf("First line...
部分) Vjjd
当然,用的线,使得少量的,它更容易跳过直观的选择和使用计数: 3dd
。
一旦掌握了基础知识(尝试过vimtutor
,还可以查看出色的内置:help
或网络上过多的Vim教程,尤其是http://vimcasts.org/ ),可以通过多种方法进行改进在此工作流程上: 文本对象 ,可以选择函数体或缩进线的插件等。
将光标放在printf("First line\\n");
,我将使用v{motion}
选择代码块,然后:move
其:move
到return 0;
之下return 0;
线。
vjj
:m?ret<CR>
没有视觉选择:
d2j
?ret<CR>
p
仅限于命令:
:,+2m?ret<CR>
要么
光标return 0;
:
:9,10m.
嗯,有一百万种方法……
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.