如何使用vim在V线模式下移动/移动几行。两行相隔两行
例如,我想在B28行中使用Shift+v选择以B28、B29和B30开头的行,然后选择B29行,依此类推,然后按“d”,然后移动到第1行,在第一行中按“Shift-p”将所有这些行粘贴到那里如何使用vim在V线模式下移动/移动几行。两行相隔两行,vim,Vim,例如,我想在B28行中使用Shift+v选择以B28、B29和B30开头的行,然后选择B29行,依此类推,然后按“d”,然后移动到第1行,在第一行中按“Shift-p”将所有这些行粘贴到那里 ROW 1 A26 51.00824 D26 35.94841 D27 35.94841 B28 7.07486 A28 35.95497 D28 179.99932 B29 4.15400
ROW 1
A26 51.00824
D26 35.94841
D27 35.94841
B28 7.07486
A28 35.95497
D28 179.99932
B29 4.15400
A29 90.00068
D29 179.99932
B30 7.07490
视觉模式只能选择连续区域(这适用于字符、行和块视觉模式,而与virtualedit
的值无关)。唯一的例外是不规则的行尾,比如说,vip$
但你可以通过其他方式实现你的目标。例如:
:global/^B\d+/move /ROW 1/-
应将所有以B
开头的行以及后面的数字移动到第1行之后的行。(它们可能会反转;在您的情况下,可能会执行简单的:sort n
,但通常:[range]!tac
或:[range]global//move
可以反转行。)
或者,您可以这样录制宏:
- 标记插入点:
:/ROW 1/标记a
- 在寄存器
q
中启动递归宏:qqq
(前三个清除寄存器)
- 转到下一个事件以移动
/^B\d+
- 移动它
dd'ap
- 调整标记
ma
- 递归调用
@q
- fini
q
现在点击@q
观看魔术
如果您需要为不同的事情重复上述多次,我将编写一系列命令使其工作一次,然后将其转换为一个函数并概括可变的事情。瞧,自动化。视觉模式只能选择连续区域(这适用于字符、行和块视觉模式,而不管virtualedit
的值如何)。唯一的例外是不规则的行尾,比如说,vip$
但你可以通过其他方式实现你的目标。例如:
:global/^B\d+/move /ROW 1/-
应将所有以B
开头的行以及后面的数字移动到第1行之后的行。(它们可能会反转;在您的情况下,可能会执行简单的:sort n
,但通常:[range]!tac
或:[range]global//move
可以反转行。)
或者,您可以这样录制宏:
- 标记插入点:
:/ROW 1/标记a
- 在寄存器
q
中启动递归宏:qqq
(前三个清除寄存器)
- 转到下一个事件以移动
/^B\d+
- 移动它
dd'ap
- 调整标记
ma
- 递归调用
@q
- fini
q
现在点击@q
观看魔术
如果您需要为不同的事情重复上述多次,我将编写一系列命令使其工作一次,然后将其转换为一个函数并概括可变的事情。瞧,自动化。另一种方法,只是为了好玩:
:g/^B/normal! dd1G}P
:g/^B/
对以aB
开头的每一行执行
正常代码>执行正常模式宏
dd
将行剪切到未命名寄存器
1G
将光标移动到第1行
}
将光标移动到当前段落后的空行,这是关键,因为它允许我们将下一行放在最后一行的下方,从而尊重顺序
P
将未命名寄存器的内容置于当前行上方
参考:
:help :global
:help :normal
:help /^
:help dd
:help G
:help }
:help P
---编辑---
有很多方法可以实现您的目标,即使它不在第1行
- 使用行号:
:g/^B/normal! dd23G}P
- 带有标记:
ma
:g/^B/normal! dd'a}P
- 通过搜索:
:g/^B/normal! dd?ROW1^M}P " ^M is obtained with <C-v><CR>
:g/^B/正常!dd?ROW1^M}P“^M是用
另一种方法,只是为了好玩:
:g/^B/normal! dd1G}P
:g/^B/
对以aB
开头的每一行执行
正常!
执行正常模式宏
dd
将行剪切到未命名寄存器
1G
将光标移动到第1行
}
将光标移动到当前段落后的空行,这是关键,因为它允许我们将下一行放在最后一行的下方,从而尊重顺序
P
将未命名寄存器的内容置于当前行上方
参考:
:help :global
:help :normal
:help /^
:help dd
:help G
:help }
:help P
---编辑---
有很多方法可以实现您的目标,即使它不在第1行
- 使用行号:
:g/^B/normal! dd23G}P
- 带有标记:
ma
:g/^B/normal! dd'a}P
- 通过搜索:
:g/^B/normal! dd?ROW1^M}P " ^M is obtained with <C-v><CR>
:g/^B/normal!dd?第1行^M}P“^M是用
这个解决方案非常有效,知道“第1行”匹配的行号(如果它在文件中的不同位置而不是开头),您可以用1G
代替行号G
并将行粘贴到那里。这个解决方案非常有效,知道“第1行”匹配的行号(如果它在文件中的不同位置,而不是文件的开头)您可以用1G
替换行号G
,并将行粘贴到那里。我尝试过…move/ROW 1/;'}
但这不起作用,出于某些原因,我尝试过…move/ROW 1/;'}
但由于某些原因,这不起作用