如何在vim中翻转视觉选择的线条?

问题描述 投票:0回答:4

我想进行视觉选择并翻转它,使选择的第一行位于底部。来自:

<other_stuff>
The
wheels
go
round.
<more_stuff>

视觉选择句子然后翻转:

<other_stuff>
round.
go
wheels
The
<more_stuff>

如何简单地做到这一点?我宁愿不必安装插件来做到这一点。

vim
4个回答
37
投票

当你进行视觉选择时,Vim 会自动在块的开头和结尾分别创建书签

'<
'>
,因此你可以通过多种方式执行你想要的操作。

正常模式下:

'>dd'<P

作为 ex 命令:

:'>d | '<-1 put

注意,退出可视模式后书签仍会保留,因此您不必保持可视模式即可使用这些书签。

编辑

哎呀,我误读了这个问题,以为你只想把最后一行放在开头,但你希望整个块颠倒过来。如果您使用的是 UNIX 系统,最简单的解决方案是:

:'<,'>!tac

这通过 unix“反向猫”程序 - tac,coreutils的一部分来传输线路。


5
投票

根据

:help 12.4
,您可以用
mt
标记第一行,移动到要反转的最后一行,然后使用命令
:'t+1,.g/^/m 't


4
投票

对于那些更熟悉视觉模式的人:
1. 使用

:set nu
识别要翻转的选择上方的行号。
2. 使用
Shift-V
突出显示要翻转的选择(可视模式)。
3.
:g/^/m <Line number from step 1>
.

请注意,在视觉模式下,它会自动显示为

:'<,'>g/^/m <Line number>
当您输入 3 中的命令时。

此命令的工作原理是将所选内容一次一行移动到您指定的行号中。当第二个项目被推入给定的行号时,它将第一个项目向下推到行号+1。然后第三个项目向下推第一个和第二个,依此类推,直到整个列表被推入单个行号,从而产生逆序列表。


2
投票

除了 Dave Kirby 的回答并解决“如何简单地做到这一点”的要求之外,您可以在

.vimrc
文件中创建快捷方式。以下示例将
F5
键映射到此快捷键:

map <F5> :'<,'>!tail -r<CR>

或对于 OS X:

map <F5> :'<,'>!tac<CR>

© www.soinside.com 2019 - 2024. All rights reserved.