編集 – Vimで選択した行の順序を逆にするには?

editing text-editing text-editors vim

例えば、以下のように4行あるとします

一行目…二行目…三行目…四行目

にリバースさせたい

4行目 3行目 2行目 1行目

Vimではどうすればいいのでしょうか?

  104  Jichao  2010-09-17


ベストアンサー

ファイル内のすべての行を反転させるには、次のようにします

:g/^/m0

説明はこちらをご覧ください

:help 12.4

これはまた、線の範囲だけを反転させる方法を示しています

96  garyjohn  2010-09-18


目的の行を選択して ! を押し、その結果表示されるプロンプトで :'<,'>!tac のように tac を使って行をパイプする。詳細は man tac を参照してください

79  Rhys Ulerich  2012-08-16


Mac OS Xではtacは存在しませんが、tail -rを使っても同じ効果が得られます

:%!tail -r

これもビジュアルモードではうまく機能しています

:'<,'>!tail -r

tail(1)のマンページより抜粋

r オプションは、入力を行ごとに逆順に表示します。さらに、このオプションは -b, -c, -n オプションの意味を変更します。r オプションが指定された場合、これらのオプションは、表示するバイト数、行数、または 512 バイトブロックを指定する。r オプションのデフォルトは、入力のすべてを表示することである

37  Thomas Perl  2013-06-03


コマンド :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 )

4  Aaron Thoma  2012-02-09


ビジュアルモードをより快適にお使いいただくために。 1.反転させたい選択範囲の上の行番号を :set nu で指定します。 2.Shift-V で反転させたい選択範囲を強調表示 (ビジュアルモード)。 3.:g/^/m <Line number from step 1>

ビジュアルモードでは、3からコマンドを入力すると自動的に:'<,'>g/^/m <Line number>と表示されることに注意してください

このコマンドは選択範囲を一行ずつ指定した行番号に移動させることで動作します。2 番目の項目が指定された行番号に押し込まれると、 1 番目の項目が行番号 + 1 に押し込まれます。次に 3 番目のコマンドが 1 番目と 2 番目の項目を押し下げ、 リスト全体が 1 行目の行番号に押し込まれるまで続けます

3  horta  2016-06-13


あなたが3行目にいるとしましょう。と入力してください

:3,6g/^/m2

1  SergioAraujo  2018-02-17


タイトルとURLをコピーしました