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!