Edited at

Vim で 選択した領域を逆順にする方法

More than 3 years have passed since last update.

例えば、Vim で箇条書きでメモをしていて、一部だけを逆順にしたいときってありますよね?ありますよね?

こんな風にメモを取っていたときに

欲しい機能

- カメラ機能が欲しい
- 写真をアップロードしたい
- 写真にコメントをつけたい
予算xx万

こんな風に変更したいとかいうときですね。

欲しい機能

- 写真をアップロードしたい
- 写真にコメントをつけたい
- カメラ機能が欲しい
予算xx万

辞書順にソートしたいときは、ビジュアルモードで選択したあと次のコマンドでソートできます。

:'<,'>sort        # ソート(a->z)

:'<,'>sort! # 逆ソート(z->a)

けれど、今回やりたいのは単純に元の順番の逆にしてほしいです。

そんなときは、同じくソートしたい領域をビジュアルモードで選択したあとにtail/tacコマンドを呼び出して逆順に並び変えることができました。


MacOSX/*BSD

:'<,'>!tail -r



GNU/Linux

:'<,'>!tac    # tac: reverse cat


OSのコマンドを利用しない方法としては次がありました。

:g/^/m0       # 0 は、ビジュアルモードで選択し始めた行-1 の数値

後者のほうがスマートなのかもしれませんが、ちょっと覚えにくいのとビジュアルモードで選択し始めた行を確認しないといけないので、たぶん tail/tac 版を利用すると思います。

ほかにいい方法があればぜひ教えてください。


参考

http://superuser.com/questions/189947/how-reverse-selected-lines-order-in-vim