我想要取得视觉选取范围并翻转它,让选取范围的第一行位于底部。来自:
<other_stuff> The wheels go round. <more_stuff>
视觉选择句子,然后翻转:
<other_stuff> round. go wheels The <more_stuff>
如何简单地做到这一点?我宁愿没有安装插件来做这件事。
9vw9lbht1#
当您进行可视选择时,Vim会自动在块的开始和结束处分别创建书签'<和'>,因此您可以通过多种方式完成您想要的操作。在正常模式下:'>dd'<P作为ex命令::'>d | '<-1 put注意,书签在您退出可视模式后仍然存在,因此您不必停留在可视模式下使用这些书签。
'<
'>
'>dd'<P
:'>d | '<-1 put
编辑:
哎呀,我误解了问题,以为你只想把最后一行放在开头,但你想把整个块颠倒过来。如果你是在unix系统上,最简单的解决方案是:
:'<,'>!tac
这将通过unix的“reverse cat”程序传输这些行。
ghhkc1vu2#
根据:help 12.4,您可以使用mt标记第一行,移动到要反转的最后一行,然后使用命令:'t+1,.g/^/m 't
:help 12.4
mt
:'t+1,.g/^/m 't
htrmnn0y3#
对于那些更熟悉视觉模式的用户:1.使用:set nu标识要翻转的选区上方的行号。2.使用Shift-V高亮显示要翻转的选择(可视模式)。3. :g/^/m <Line number from step 1> .请注意,在可视模式下,当您从3键入命令时,它将自动显示为:'<,'>g/^/m <Line number>。此命令的工作方式是将选定内容一次移动一行到给予的行号。当第二个项目被推入指定的行号时,它会将第一个项目向下推入到行号+ 1处。然后第三个项目将第一个和第二个项目向下推入,依此类推,直到整个列表都被推入到单个行号处,从而生成一个逆序列表。
:set nu
Shift-V
:g/^/m <Line number from step 1>
:'<,'>g/^/m <Line number>
4ktjp1zp4#
除了Dave Kirby的回答和解决“如何简单地执行此操作”的要求之外,您可以在.vimrc文件中创建一个快捷方式。以下示例将F5键Map到该快捷方式:map <F5> :'<,'>!tail -r<CR>或对于OS X:map <F5> :'<,'>!tac<CR>
.vimrc
F5
map <F5> :'<,'>!tail -r<CR>
map <F5> :'<,'>!tac<CR>
4条答案
按热度按时间9vw9lbht1#
当您进行可视选择时,Vim会自动在块的开始和结束处分别创建书签
'<
和'>
,因此您可以通过多种方式完成您想要的操作。在正常模式下:
'>dd'<P
作为ex命令:
:'>d | '<-1 put
注意,书签在您退出可视模式后仍然存在,因此您不必停留在可视模式下使用这些书签。
编辑:
哎呀,我误解了问题,以为你只想把最后一行放在开头,但你想把整个块颠倒过来。如果你是在unix系统上,最简单的解决方案是:
这将通过unix的“reverse cat”程序传输这些行。
ghhkc1vu2#
根据
:help 12.4
,您可以使用mt
标记第一行,移动到要反转的最后一行,然后使用命令:'t+1,.g/^/m 't
htrmnn0y3#
对于那些更熟悉视觉模式的用户:
1.使用
:set nu
标识要翻转的选区上方的行号。2.使用
Shift-V
高亮显示要翻转的选择(可视模式)。3.
:g/^/m <Line number from step 1>
.请注意,在可视模式下,当您从3键入命令时,它将自动显示为
:'<,'>g/^/m <Line number>
。此命令的工作方式是将选定内容一次移动一行到给予的行号。当第二个项目被推入指定的行号时,它会将第一个项目向下推入到行号+ 1处。然后第三个项目将第一个和第二个项目向下推入,依此类推,直到整个列表都被推入到单个行号处,从而生成一个逆序列表。
4ktjp1zp4#
除了Dave Kirby的回答和解决“如何简单地执行此操作”的要求之外,您可以在
.vimrc
文件中创建一个快捷方式。以下示例将F5
键Map到该快捷方式:map <F5> :'<,'>!tail -r<CR>
或对于OS X:
map <F5> :'<,'>!tac<CR>