Saya tahu saya dapat bergabung dengan baris dalam Vim dengan J
dan beberapa varian daripadanya ( gJ
, dll.); J
akan "Hapus indentasi dan masukkan hingga dua spasi" .
Tetapi apakah ada juga cara mudah untuk memasukkan karakter lain alih-alih dua spasi? Misalnya koma ( ,
) atau koma & spasi ( ,
)?
Diberikan:
8
9
10
32
Saya ingin mengakhiri dengan:
8, 9, 10, 32
atau:
8,9,10,32
line-breaks
Martin Tournoij
sumber
sumber
Jawaban:
Saya menulis plugin Gabung, dapat melakukan apa yang Anda inginkan, dan banyak lagi.
lebih detail dan tangkapan layar:
https://github.com/sk1418/Join
sumber
Cara sederhana adalah ini: cukup pilih baris Anda (semua kecuali yang terakhir) - atau gunakan
%
- dan jalankan:atau
(di mana, tentu saja,
'<,'>
bagian itu sudah dimasukkan setelah:
oleh Vim, untuk menargetkan pemilihan)(2) Pembaruan:
Membangun di atas (dan komentar Sato Katsura ), berikut ini kemungkinan implementasi "gabung interaktif", dengan jumlah dan dukungan pengulangan opsional:
Dan pemetaan aktual:
Ini agak (*) seperti
J
, tetapi interaktif - ini akan meminta string pemisah. String default adalah spasi - jadi, misalnya, untuk bergabung dengan garis tanpa pemisah, tekanBackspace
saat diminta, untuk menghapus karakter spasi default, danEnter
untuk menerima pemisah kosong (sekarang). Hitung, misalnya3J
, juga berfungsi. Jikatpope/vim-repeat
plugin diinstal, ulangi dengan '.' juga akan berfungsi, menggunakan kembali pemisah terakhir dan (jika tidak diubah - mis.10.
) hitungan terakhir atau rentang garis visual.(*) Ini tidak persis seperti
J
, meskipun: sementara itu akan menghapus lekukan, itu tidak akan memeriksa.!?
(akhir frase) untuk memasukkan 2 spasi, bukan satu, atau menyisipkan spasi hanya jika itu hilang (sulit untuk melakukan sesuatu seperti ini, karena string pemisah dapat berupa apa saja sekarang). Ini juga akan menghapus spasi tambahan (lebih masuk akal).Saya pikir ini mungkin cara yang bagus untuk membebani ruang surat operator yang terbatas :)
Yah, secara teknis
J
bukan operator, tetapi dekat dengan satu - misalnya, Anda tidak dapat melakukanJaw
, untuk bergabung dengan "sepatah kata".(saran dipersilahkan)
sumber
:'<,'>-1s/\n/, /
untuk baris yang ditandai, atau:1,$-1s/\n/, /
untuk seluruh file.-1
?'<,'>-s/\n/, /
atau1,$-s/\n/, /
sebagai-
sama dengan-1
.l:sep
adalah&
, maka penggantian Anda akan bekerja secara salah, karena&
ajaib dalam penggantian. Mungkin lebih baik menggunakan\=
menggunakan string literal -let l:subst = 's/\n\+/\=' . "'" . l:sep . "'/"
- daripada mencoba menangani melarikan diri.Berikut ini contoh menggunakan perintah eksternal:
di mana
%!
menggantikan buffer saat ini (konten file) dengan perintah:paste -sd,
(parameter-s
digunakan untuk bergabung dengan beberapa baris dan-d
mengatur karakter pembatas,
).sumber
Hanya dalam kasus seseorang tidak suka mengetik Regex dan menghafal lebih banyak Perintah Ex Plugin:
Visual-block Append
Visual-block Append tersedia dalam mode Visual Block (
<C-v>
) dan dapat melakukan blok A ppend (dan block I nsert for prepend). (ref::help v_b_A
,:help v_b_I
)Dan jika gerakan terakhir dalam Block Visual Mode adalah
$
, append akan dilakukan di akhir semua pilihan; atau spasi akan dimasukkan sebelum teks yang Anda tambahkan (bayangkan menyelaraskan penutupan)
di akhir beberapa panggilan metode dalam kode).Dengan contoh teks di bawah ini dan kursor aktif
8
:<C-v>}$A,<C-c>
. Setelah kembali ke mode normal, kita dapat melihat,
ditambahkan ke semua baris yang dipilih. (Coba tanpa$
)Kemudian lakukan
gv
untuk memilih kembali area danJ
ataugJ
. Kami memiliki jejak,
:8,9,10,12,
dan$x
kami selesai.Gunakan Sisipan untuk Tidak Membuntuti
,
Mari batalkan teks kita (baik itu
uu..u
mewah:ea 1d<cr>:lat 1
), dan coba Visual Sisipkan:j<C-v>}I, <C-c>
dan kemudian kita bisa bergabung dengan garisgJ
tanpa spasi.Tunggu tunggu tunggu, ada yang hilang. Bagaimana cara memilih ulang seluruh "array"? Kali ini kami tidak memilih baris pertama ... jadi
gv
tidak membantu.- Atau mungkin membantu,
gvok
pilih kembali (gv
),o
sudut pposite dank
atas.PS saya pinky tidak cepat dan cukup akurat untuk mengetik
/\
untuk/\n
, jadi saya seperti menggabungkan Vim built-in operasi dan gerakan untuk menghindari menggunakan Regex. Namun jika saya cukup sering melakukan ini, menggunakan pemetaan - mungkin yang memetakan ke plugin harus lebih baik.sumber
Cara yang jauh lebih sederhana tanpa plugin atau perintah eksternal untuk memetakan kembali join (
J
) dari sebuah ruang ke karakter apa pun yang Anda suka. Misalnya, untuk bergabung dengan koma dan spasi:Untuk baris baru karakter khusus di akhir (
^M
) tekanCtrl-V
dan kemudian Kembali / Enter. Sama halnya jika Anda ingin mengganti dengan tab (^I
), ketikCtrl-I
kemudianTab
.Apa yang dilakukan adalah mengganti baris baru dengan tab pada baris saat ini dan memetakan kembali perilaku itu ke karakter J.
Ini juga berfungsi dengan kombinasi, seperti
4J
untuk bergabung dengan 4 baris berikutnya.sumber
Anda dapat merekam makro untuk bergabung dengan garis dengan koma. Ini berguna jika ini adalah tugas yang jarang atau sekali saja, dan Anda tidak dapat mengingat bagaimana menulis perintah pengganti dan ekspresi reguler untuk melakukan tugas tersebut, tetapi Anda ingat bagaimana cara merekam dan menjalankan makro.
Untuk bergabung dengan baris dengan koma, ketik qjgJi,Escquntuk merekam makro dalam register
j
. Kemudian Anda dapat menjalankan makro dengan @j. Anda dapat menjalankan kembali makro dengan @@, yang menghemat saat mengetik ketika menjalankannya beberapa kali berturut-turut — Anda bahkan dapat menahannya @hingga mendekati akhir baris yang ingin Anda gabungkan. Anda juga dapat menggunakan awalan angka @jatau @@mengulanginya beberapa kali. Ini membiarkan spasi terdepan dan tertinggal, jadi akan ada spasi sebelum atau setelah koma jika teks asli Anda memiliki spasi di sana.Untuk bergabung dengan koma dan spasi, masukkan Spaceantara ,dan Escsaat merekam makro.
Anda juga dapat menggunakan Jalih-alih gJsaat merekam makro, yang biasanya akan bergabung dengan baris dengan koma dan spasi. Namun, jika baris saat ini memiliki spasi spasi, koma akan muncul setelah spasi tanpa spasi mengikutinya. Juga, tidak termasuk ruang jika baris berikutnya dimulai dengan
)
, dan menempatkan dua spasi setelah koma jikajoinspaces
diatur dan garis ujung saat ini dengan.
,!
atau?
. Peringatan ini dijelaskan di bawah:help J
.sumber