如何在vim中翻转可视选择的行?

kxkpmulp  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(204)

我想要取得视觉选取范围并翻转它,让选取范围的第一行位于底部。来自:

<other_stuff>
The
wheels
go
round.
<more_stuff>

视觉选择句子,然后翻转:

<other_stuff>
round.
go
wheels
The
<more_stuff>

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

9vw9lbht

9vw9lbht1#

当您进行可视选择时,Vim会自动在块的开始和结束处分别创建书签'<'>,因此您可以通过多种方式完成您想要的操作。
在正常模式下:'>dd'<P
作为ex命令::'>d | '<-1 put
注意,书签在您退出可视模式后仍然存在,因此您不必停留在可视模式下使用这些书签。

编辑

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

:'<,'>!tac

这将通过unix的“reverse cat”程序传输这些行。

ghhkc1vu

ghhkc1vu2#

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

htrmnn0y

htrmnn0y3#

对于那些更熟悉视觉模式的用户:
1.使用:set nu标识要翻转的选区上方的行号。
2.使用Shift-V高亮显示要翻转的选择(可视模式)。
3. :g/^/m <Line number from step 1> .
请注意,在可视模式下,当您从3键入命令时,它将自动显示为:'<,'>g/^/m <Line number>
此命令的工作方式是将选定内容一次移动一行到给予的行号。当第二个项目被推入指定的行号时,它会将第一个项目向下推入到行号+ 1处。然后第三个项目将第一个和第二个项目向下推入,依此类推,直到整个列表都被推入到单个行号处,从而生成一个逆序列表。

4ktjp1zp

4ktjp1zp4#

除了Dave Kirby的回答和解决“如何简单地执行此操作”的要求之外,您可以在.vimrc文件中创建一个快捷方式。以下示例将F5键Map到该快捷方式:
map <F5> :'<,'>!tail -r<CR>
或对于OS X:
map <F5> :'<,'>!tac<CR>

相关问题