Bagaimana cara saya menggabungkan dua baris dalam vi?


169

Saya memiliki dua baris dalam file teks seperti di bawah ini:

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

Saya ingin menambahkan dua baris di vi seperti di bawah ini:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

Baris kedua terhapus dan isi baris kedua ditambahkan ke baris pertama.

Bagaimana saya bisa melakukannya dengan menggunakan mode perintah in vi?

Jawaban:


310

Shift+ Jmenghapus karakter perubahan garis dari baris saat ini, jadi dengan menekan "J" di sembarang tempat di baris Anda dapat menggabungkan baris saat ini dan baris berikutnya dengan cara yang Anda inginkan.


9
huruf besar J bergabung garis, huruf kecil bergerak kursor

4
Itu adalah huruf kapital J, bukan huruf kecil J; maka Shift-J.
Jonathan Leffler

28
"menghapus karakter perubahan baris dari baris saat ini" adalah cara yang cukup canggung untuk menggambarkan apa yang dilakukan J, dan juga tidak benar-benar benar. "Bergabung" dengan baris ini ke baris berikutnya. Dalam prosesnya menghapus baris baru, tetapi juga memanipulasi ruang putih dengan cara lain.
Laurence Gonsalves

5
Ha ha. GJdi vimakan pindah ke baris terakhir dan kemudian mencoba untuk bergabung ke baris berikutnya, satu-satunya tempat perintah bergabung tidak masuk akal. Ya, saya menemukan ini lucu :-)
Alok Singhal

2
Saya masih tidak menyadari bahwa saya perlu menggunakan StackOverflow untuk bergabung dengan dua baris menggunakan editor ini!
Manitra Andriamitondra

59

Vi atau Vim?

Lagi pula, perintah berikut ini berfungsi untuk Vim dalam mode 'nocompatible'. Itu, saya kira, hampir murni vi.

:join!

Jika Anda ingin melakukannya dari penggunaan perintah normal

gJ

Dengan 'gJ' Anda bergabung dengan garis apa adanya - tanpa menambahkan atau menghapus spasi putih:

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

Hasil:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

Dengan perintah 'J' Anda akan memiliki:

S<Switch_ID>_F<File type> _ID<ID number>_T<date+time>_O<Original File name>.DAT

Catat ruang antara type>dan _ID.


2
Hanya ingin menunjukkan yang g/pattern/joinberfungsi di VIM sementara g/pattern/Jtidak. Dapat membantu beberapa orang di masa depan.
jisaacstone

Saya suka Anda bergabung dengan pola, namun, ia bergabung dengan dua garis dengan ruang putih. Pokoknya bergabung dengan dua garis dengan pola tanpa spasi putih?
David.Chu.ca

g / pola / gabung! sepertinya melakukan itu.
fortboise

1
Bisakah ini menjadi lebih rumit! :-)
Johannes Overmann

22

Ini harus dilakukan:

J


6
'J' memberi ruang ekstra saat bergabung dengan garis.
Maxim Kim

3
@ MaximKim: Dan ini sebabnya . Catatan yang :h Jakan memberi tahu Anda cara menonaktifkan fitur itu.
sebelum

2
Gunakan gJjika Anda tidak ingin vim menambahkan spasi saat bergabung dengan garis
qwertzguy

17

In vi, J(itu Shift+ J) atau :joinharus melakukan apa yang Anda inginkan, sebagian besar. Perhatikan bahwa mereka menyesuaikan spasi putih. Secara khusus, Anda akan berakhir dengan spasi di antara dua baris yang bergabung dalam banyak kasus, dan jika baris kedua indentasi bahwa lekukan akan dihapus sebelum bergabung.

Di Vim Anda juga dapat menggunakan gJ( G, lalu Shift+ J) atau :join!. Ini akan bergabung dengan garis tanpa melakukan penyesuaian spasi putih.

Di Vim, lihat :help Juntuk informasi lebih lanjut.


Satu peringatan ketika menggunakan gJdan Jadalah bahwa keduanya mengubah kursor ke titik bergabung, tetapi :join!dan :joinjangan.
SergioAraujo

4

Ganti saja " \n" dengan "".

In vi / Vim untuk setiap baris dalam dokumen:

%s/>\n_/>_/g

Jika Anda ingin mengonfirmasi setiap penggantian:

%s/>\n_/>_/gc

3

Jika Anda ingin bergabung dengan garis yang dipilih (Anda berada dalam mode visual), maka cukup tekan gJuntuk bergabung dengan garis Anda tanpa spasi sama sekali.

Ini dijelaskan secara lebih rinci di situs vi / Vim Stack Exchange .


1

Tekan Shift+ 4("$") pada baris pertama, lalu Shift+ j("J").

Dan jika Anda ingin bantuan, masuk ke vi, lalu tekan F1.


3
$ bergerak ke akhir baris, tetapi tidak perlu untuk J

1
Anda tidak harus berada di akhir baris agar J dapat bergabung.
Jonathan Leffler

1
Menekan $ tidak perlu, sebenarnya.
Laurence Gonsalves

1
@laurence .pressing $ memastikan bahwa kursor ditempatkan tepat di samping charter baris baru dan ini adalah suatu keharusan.
Vijay


1

Cara lain untuk menggabungkan dua baris tanpa menempatkan kursor ke baris itu adalah:

:6,6s#\n##

Di sini 6 adalah nomor baris di mana baris lain akan bergabung. Untuk menampilkan nomor baris, gunakan :set nu.

Jika kita berada di kursor tempat baris berikutnya harus digabungkan, maka:

:s#\n##

Dalam kedua kasus kita tidak perlu gsuka :s#\n##g, karena pada satu baris hanya \nada satu .


Lebih mudah digunakan Shift+Vuntuk memilih semua garis yang akan digabungkan, kecuali yang terakhir, dan kemudian :'<,'>s/\n/, /dalam contoh ini bergabung dengan garis sambil meletakkan koma dan spasi di akhir masing-masing. Perhatikan bahwa ketika sesuatu dipilih dan kita ketik: dalam mode normal, maka '<,'>muncul pada baris perintah secara otomatis.
Evgeni Sergeev

Baik untuk beberapa baris terpilih, gabungkan dengan pembatas yang disukai. Ditemukan satu kesalahan ketik ... dalam mode normal atau dalam mode visual?
vusan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.