Anda juga dapat melakukan ini dengan Ex
perintah menggunakan sed
sebagai filter eksternal:
:%!sed -n 'h;n;G;h;n;G;h;n;G;p'
Versi ini akan mengabaikan (menghapus) setiap baris tambahan di luar kelipatan 4. Untuk mempertahankan set terakhir kurang dari 4 baris (terbalik), gunakan:
:%!sed -n '$p;h;n;G;$p;h;n;G;$p;h;n;G;p'
Di %
sini berarti "Setiap baris dalam buffer."
The !
berarti perintah "Jalankan perintah berikut dengan garis ditetapkan sebagai masukan, dan menggantikan garis-garis yang ditentukan dengan output dari perintah." (Ini disebut filter; sangat berguna untuk hal-hal seperti menyortir, misalnya, :%!sort
akan mengurutkan semua baris dalam file Anda; :2,8!sort
akan mengurutkan baris 2-8, dll.)
sed
adalah alat editor aliran dan ditemukan di semua sistem mirip Unix. Konsep kunci yang sed
digunakan di sini adalah "pola ruang" (yang secara default hanya berisi setiap baris input pada gilirannya), dan "ruang pegang" (di mana Anda dapat menempel teks tambahan saat menggunakan sed
untuk menyimpannya saat memproses lainnya jalur input).
-n
adalah opsi untuk sed
perintah untuk menekan tindakan standar mencetak ruang pola (karena dalam hal ini kami hanya ingin mencetak ketika kami secara eksplisit mengatakannya.)
$p
dalam sed
perintah berarti "Jika Anda berada di baris terakhir dari sed
input, cetak (ruang pola)."
h
berarti "menempelkan isi saat ini dari 'ruang pola' di 'ruang tahan', menimpa apa pun yang ada di sana."
n
berarti "ganti isi dari 'ruang pola' dengan baris berikutnya dari input."
G
berarti "menambahkan ke 'ruang pola': baris baru diikuti dengan isi 'ruang tahan'."
Secara keseluruhan, sed
perintah menyimpan empat baris output, membalikkannya saat menyimpannya, dan kemudian mencetaknya. The $p
perintah ditambahkan dalam versi kedua memastikan bahwa jika baris terakhir dari file telah dicapai selain di kelipatan dari 4 baris, baris masih dicetak.
Untuk alternatif, pendekatan interaktif masih tanpa menggunakan fitur spesifik Vim dan juga tanpa menggunakan filter eksternal:
:4
untuk menuju ke baris keempat.
:.m -4 | +3m . | +2m . | +5
untuk membalikkan empat baris sebelumnya (1-4) dan biarkan kursor Anda berada di jalur 8.
.m -4
memindahkan garis saat ini tepat setelah garis empat garis kembali (meninggalkan kursor pada garis yang dipindahkan).
+3m .
memindahkan garis yang 3 baris setelah garis saat ini, hanya setelah garis saat ini, meninggalkan kursor pada garis yang dipindahkan. +2m .
tentu saja kerjanya sama.
+5
menempatkan kursor lima baris ke bawah dari tempatnya.
Ulangi sesuai yang diinginkan.
Di Vim Anda dapat mengulangi seluruh perintah ini dengan @:
, lalu ulangi lagi dengan @@
. Dalam POSIX vi
atau ex
Anda perlu memasukkan :.m -4 | +3m . | +2m . | +5
sebagai baris teks, hapus itu ke buffer bernama (register), dan kemudian jalankan buffer bernama itu (register).
Jadi dalam ex
mode, membalikkan garis secara interaktif hanya menggunakan fitur yang ditentukan POSIX, dan mulai dengan 17 baris teks:
Entering Ex mode. Type "visual" to go to Normal mode.
:0a # Append following text after "line 0" (i.e. insert at start of file).
.m -4 | +3m . | +2m . | +5
. # End text insertion
:d k # Delete that line to register k
line1 # This is a printout of the current line
:4 # Move to line 4
line4
:@k # Execute register k to reverse lines 1-4
line8
:@@ # Execute register k again
line12
:@@ # Execute register k again
line16
:@@ # Execute register k again
line17
:%p # Print the whole buffer (just to see what was done)
line4
line3
line2
line1
line8
line7
line6
line5
line12
line11
line10
line9
line16
line15
line14
line13
line17
:wq # Save and quit
Bacaan lebih lanjut: