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

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)

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

  • 关于确切帮助部分的重要提示!总结: 1. 在你想要反转的最后一行设置一个标记(我使用 `ma` 将标记命名为 'a'), 2. 将光标移动到块的第一行, 3. 输入 `:'a,。 g/^/m 'a` (16认同)

Rhy*_*ich 86

选择所需的行, hit !,然后在结果提示中将行通过tacla管道化:'<,'>!tac。有关man tac更多详细信息,请参阅。

  • 要选择线条,请使用 `shift+v` 进入视线模式,然后使用 `j` 将线条添加到选择中。 (4认同)
  • (当有选择时,点击 `!` 会自动填充 `:'&lt;'&gt;!`。) (2认同)

小智 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 选项的默认设置是显示所有输入。

  • 你也可以`brew install coreutils` 和使用`gtac`。 (4认同)
  • 优秀!所以要在 OS X 下提供 'tac':`alias tac='tail -r'` (3认同)

hor*_*rta 7

对于那些更熟悉可视模式的人:
1. 使用 确定要翻转的选择上方的行号:set nu
2.Shift-V突出显示要翻转的选择(视觉模式)。
3. :g/^/m <Line number from step 1>.

请注意,在可视模式下,:'<,'>g/^/m <Line number>当您输入 3 中的命令时,它将自动显示 。

此命令的工作原理是将所选内容一次一行移动到您提供的行号中。当第二个项目被推入给定的行号时,它将第一个向下推到行号 + 1。然后第三个将第一个和第二个向下推,依此类推,直到整个列表被推入单个行号,导致反向排序列表。

  • 您可以使用 `'&lt;` 代替手动输入行号。只需提前一行开始选择并执行`:'&lt;,'&gt;g/^/m'&lt;`。 (7认同)

Aar*_*oma 6

您的 的命令: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