例如,如果我有如下四行:
第一行
第二行
第三行
第四行
我想把它们反转为
第四行
第三行
第二行
第一行
我怎样才能在 Vim 中做到这一点?
答案1
答案2
选择所需的行,点击!
,然后在出现的提示符中将这些行通过tac
la 管道传输:'<,'>!tac
。man 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
建议映射可打印字符。)