Jic*_*hao 112 text-editing vim text-editors editing
例如,如果我有四行如下:
第一行
第二行
第三行
第四行
我想将它们反转为
第四行
第三行
第二行
第一行
我怎么能在 Vim 中做到这一点?
gar*_*ohn 103
要反转文件中的所有行,
:g/^/m0
Run Code Online (Sandbox Code Playgroud)
解释见
:help 12.4
Run Code Online (Sandbox Code Playgroud)
它还显示了如何只反转一系列行。
Rhy*_*ich 86
选择所需的行, hit !,然后在结果提示中将行通过tacla管道化:'<,'>!tac。有关man tac更多详细信息,请参阅。
小智 37
在 Mac OS X 上,tac不存在,但您可以使用tail -r相同的效果:
:%!tail -r
Run Code Online (Sandbox Code Playgroud)
这也适用于视觉模式:
:'<,'>!tail -r
Run Code Online (Sandbox Code Playgroud)
摘自tail(1)的联机帮助页:
-r 选项使输入以相反的顺序按行显示。此外,此选项会更改 -b、-c 和 -n 选项的含义。当指定 -r 选项时,这些选项指定要显示的字节、行或 512 字节块的数量,而不是从开始显示的输入的开头或结尾的字节、行或块。 -r 选项的默认设置是显示所有输入。
对于那些更熟悉可视模式的人:
1. 使用 确定要翻转的选择上方的行号:set nu。
2.Shift-V突出显示要翻转的选择(视觉模式)。
3. :g/^/m <Line number from step 1>.
请注意,在可视模式下,:'<,'>g/^/m <Line number>当您输入 3 中的命令时,它将自动显示
。
此命令的工作原理是将所选内容一次一行移动到您提供的行号中。当第二个项目被推入给定的行号时,它将第一个向下推到行号 + 1。然后第三个将第一个和第二个向下推,依此类推,直到整个列表被推入单个行号,导致反向排序列表。
您的 的命令: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>
Run Code Online (Sandbox Code Playgroud)
(:xmap映射为 Visual 而不是 Select 模式,作为:help mapmode-x映射可打印字符的建议。)
(基于:http : //tech.groups.yahoo.com/group/vim/message/34305)