Misalnya, jika saya memiliki empat baris sebagai berikut:
baris pertama baris
kedua baris
ketiga baris
keempat
Saya ingin membalikkannya
baris keempat, baris
ketiga, baris
kedua, baris
pertama
Bagaimana saya bisa melakukan ini di Vim?
vim
editing
text-editors
text-editing
Jichao
sumber
sumber
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1
vi.stackexchange.com/a/2107/10254Jawaban:
Untuk membalikkan semua baris dalam file,
Untuk penjelasan, lihat
yang juga menunjukkan cara membalikkan hanya serangkaian garis.
sumber
ma
), 2. pindahkan kursor ke baris pertama blok, 3. ketik:'a,.g/^/m 'a
Pilih garis yang diinginkan, tekan
!
, dan pada prompt pipa hasilkan garis melaluitac
a la:'<,'>!tac
. Lihatman tac
untuk lebih jelasnya.sumber
shift+v
untuk masuk ke mode garis visual, laluj
untuk menambahkan garis ke pilihan.gvim
! Kalau tidak, Anda harus menggunakan angka garis absolut (mungkin Anda dapat menggunakan relatif, tetapi Anda harus berhati-hati) dengan:g/^/m0
(yang juga sangat sulit diingat) ... Jadi, pada dasarnya, tac harus dengan vim tidak peduli platform apa pun Anda sedang aktif, TAPI bukan 100% vimscript, TETAPI yang peduli: P:.,'a!tac
bekerja dengan sedikit usaha.shift+v
, Anda dapat menggunakan}
untuk mencapai paragraf berikutnya, atau ruang vertikal kosong. Jugaman tac: concatenate and print files in reverse
,.Pada Mac OS X,
tac
tidak ada, tetapi Anda dapat menggunakantail -r
efek yang sama:Ini juga berfungsi dengan baik untuk mode visual:
Kutipan dari
tail(1)
halaman manual:sumber
alias tac='tail -r'
brew install coreutils
dan menggunakannyagtac
.Bagi mereka yang lebih nyaman dengan mode Visual:
1. Identifikasi nomor baris di atas pilihan yang ingin Anda gunakan
:set nu
.2.
Shift-V
untuk menyorot pilihan yang Anda ingin membalik (mode visual).3
:g/^/m <Line number from step 1>
..Perhatikan bahwa dalam mode visual itu akan muncul secara otomatis
:'<,'>g/^/m <Line number>
ketika Anda mengetik perintah dari 3.Perintah ini berfungsi dengan memindahkan pilihan satu baris sekaligus ke nomor baris yang Anda berikan. Ketika item kedua didorong ke nomor baris yang diberikan, itu mendorong yang pertama turun ke nomor baris + 1. Kemudian yang ketiga mendorong yang pertama dan kedua ke bawah dan seterusnya sampai seluruh daftar telah didorong ke dalam nomor baris tunggal yang menghasilkan daftar terbalik urutan.
sumber
'<
alih - alih memasukkan nomor baris secara manual. Mulailah seleksi satu baris sebelumnya dan jalankan:'<,'>g/^/m'<
.Perintah
:Rev[erse]
dan pemetaan opsional untuk Andavimrc
, sehingga Anda tidak perlu mengingat dan melakukan langkah-langkah yang tidak jelas dari resep ini:(
:xmap
peta untuk mode Visual tetapi tidak Pilih, seperti yang:help mapmode-x
disarankan untuk memetakan karakter yang dapat dicetak.)(Berdasarkan: http://tech.groups.yahoo.com/group/vim/message/34305 )
sumber
:'<,'>g/^/m'<
:):-1,+1Rev
apa yang Anda cari? Ketahuilah bahwa Anda secara visual dapat memilih jangkauan Anda ingin membalikkan, misalnya:V7j:Rev
. Jika itu tidak menjawab pertanyaan Anda, saya belum memahaminya, jadi Anda perlu menjabarkan atau menyusunnya kembali untuk saya.Katakanlah Anda berada di baris 3, maka kami memiliki rentang 3 hingga 6. Cukup ketik.
sumber
:,6g/^/m2
; atau ketika pada baris terakhir kisaran ini::3,g/^/m2
; dan:3,6g/^/m2
bekerja dari mana saja di file.