Baru-baru ini saya menyadari !
teknik penyaringan , dan saya menyukainya. Sayangnya, saya tidak dapat menggunakannya dalam mode blok visual. Semoga beberapa ahli di sini akan membantu saya.
Pada dasarnya, saya ingin mengurutkan kolom seperti yang ketiga di bawah ini (hanya MWE). Dan saya tidak ingin mengganggu kolom lainnya ketika saya menyortir.
Saya mencoba memfilter ( !
) kolom ketiga yang dipilih secara visual (mode blok) melalui sort
utilitas. Tetapi jenisnya agak melampaui seleksi yaitu semua baris ditukar, bukan hanya seleksi, yang juga mengurutkan berdasarkan kolom pertama !
1. LARGEST 40
2. SECOND-LARGEST 168
3. MID 2.8
4. MID 540
5. MID 14.84
6. MID 40
7. SECOND-LEAST 64
8. LEAST 8
Saya memilih kolom terakhir menggunakan blok visual, dan mengatakan !sort --reverse
yang muncul sebagai
'<,'>!sort --reverse
Dan hasilnya aneh berlawanan dengan apa yang saya harapkan. Hasilnya adalah seluruh baris diurutkan / ditukar, bukan hanya satu kolom, dan itu juga, berdasarkan kolom pertama terlepas dari pemilihan kolom ketiga saya!
8. LEAST 8
7. SECOND-LEAST 64
6. MID 40
5. MID 14.84
4. MID 540
3. MID 2.8
2. SECOND-LARGEST 168
1. LARGEST 40
Kecuali jika tidak mungkin, saya ingin solusi vim + sort murni, daripada alat yang relatif canggih seperti sed
/ awk
. Lebih penting untuk mengetahui sendiri, betapa terbatasnya mode blok visual, dibandingkan dengan mengatakan, mode visual.
sumber
sort
perintah internal vim yang tersedia, jadi Anda tidak perlu memanggil eksternal!sort
untuk melakukan pengurutan reguler.:help filter
) tetapi juga terstandarisasi (maaf, saya tidak tahu bagaimana cara menautkan POS itu). Anda tidak dapat mengeluh jika Anda tidak RFTM.Jawaban:
Saya pikir harapan terbaik Anda adalah plugin vis.vim . Plugin ini menyediakan perintah
B
yang memungkinkan untuk menerapkan perintah ke blok.Di sini setelah menginstal plugin, Anda akan memilih blok Anda dan kemudian gunakan:
Perhatikan bahwa perintah itu bisa apa saja, jadi alih-alih
!sort
Anda bisa melakukan banyak pemrosesan lain di blok seperti menyimpannya ke file lain (:'<,'>B w foo.txt
) atau menerapkan substitusi (:'<,'>B s/foo/bar/g
)sumber
$
digunakan dalam mode visual blockwise.