Saya memiliki garis seperti
abcdefgjoin!
abcdef
no join
abcdefgjoin!
Jika sebuah baris cocok dengan regex ^a.+g$ maka saya ingin mereka bergabung, jadi itu akan menjadi:
abcdefgjoin!
abcdef
no join
abcdefgjoin!
Apakah ada cara untuk melakukannya di VIM ?
Jawaban yang Diterima:
Dalam mode normal, J (berbeda dari j , yang memindahkan kursor ke bawah satu baris) digunakan untuk menggabungkan satu baris dengan yang tepat di bawahnya. Namun, secara default itu menambahkan spasi ke akhir baris pertama; untuk mendapatkan hasil yang Anda inginkan (menggabungkan baris tanpa memasukkan spasi tambahan), seseorang harus menggunakan gJ .
Untuk menggunakan perintah mode normal dalam mode lama (yang Anda masukkan dengan menekan : saat dalam mode normal), seseorang harus menggunakan normal memerintah. Lihat :h normal dalam vim. Jadi, untuk bekerja dengan baris berikutnya yang cocok dengan pola, seseorang akan menggunakan (perhatikan bahwa secara default, Anda harus keluar dari + untuk membuatnya bekerja dengan regex vim, konsekuensi dari menjaga kompatibilitas dengan mesin regex kuno vi asli):
:/^a.\+g$/normal gJ
Untuk mengerjakan setiap baris yang cocok dengan pola, seseorang akan menggunakan :global perintah (lihat :h :g dalam vim) seperti ini:
:global/^a.\+g$/normal gJ
Atau, lebih ringkasnya:
:g/^a.\+g$/norm gJ
Anda juga dapat menggunakan perintah ex join (lihat :h :join ) untuk mencapai hal yang sama dengan pengetikan yang sangat sedikit (! pada akhirnya, dalam hal ini, beri tahu join untuk tidak menyisipkan spasi di akhir baris pertama).
:g/^a.\+g$/join!