如何在 Vim 中反转选定行的顺序?

如何在 Vim 中反转选定行的顺序?

例如,如果我有如下四行:

第一行
第二行
第三行
第四行

我想把它们反转为

第四行
第三行
第二行
第一行

我怎样才能在 Vim 中做到这一点?

答案1

要反转文件中的所有行,

:global/^/move 0

缩写:

:g/^/m0

解释

:help 12.4

它还显示了如何反转一系列的行。

答案2

选择所需的行,点击!,然后在出现的提示符中将这些行通过tacla 管道传输:'<,'>!tacman tac有关更多详细信息,请参阅。

答案3

在 Mac OS X 上tac不存在,但您可以使用tail -r达到相同的效果:

:%!tail -r

这对于视觉模式也很好用:

:'<,'>!tail -r

摘自的tail(1)手册页:

-r 选项使输入按行反向显示。此外,此选项还会更改 -b、-c 和 -n 选项的含义。指定 -r 选项时,这些选项指定要显示的字节数、行数或 512 字节块数,而不是从输入的开头或结尾开始显示的字节数、行数或块数。 -r 选项的默认设置是显示所有输入。

答案4

您的命令:Rev[erse]和可选映射vimrc,这样您就不必记住并执行此配方中不太明显的步骤:

" Reverse the lines of the whole file or a visually highlighted block.
    " :Rev is a shorter prefix you can use.
    " Adapted from http://tech.groups.yahoo.com/group/vim/message/34305
command! -nargs=0 -bar -range=% Reverse
    \       let save_mark_t = getpos("'t")
    \<bar>      <line2>kt
    \<bar>      exe "<line1>,<line2>g/^/m't"
    \<bar>  call setpos("'t", save_mark_t)

nmap <Leader>r :Reverse<CR>
xmap <Leader>r :Reverse<CR>

:xmap映射视觉模式但不映射选择模式,如:help mapmode-x建议映射可打印字符。)

(基于:http://tech.groups.yahoo.com/group/vim/message/34305

相关内容