Di Vim, saya memiliki teks berikut:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
Saya ingin menambahkan "," di akhir setiap baris. Teks sebelumnya akan menjadi berikut:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
Apakah ada yang tahu bagaimana melakukan ini? Apakah mungkin menggunakan mode blok visual untuk melakukannya?
Jawaban:
Ini akan melakukannya ke setiap baris di file:
Jika Anda ingin membuat subset baris alih-alih seluruh file, Anda dapat menentukannya sebagai pengganti
%
.Salah satu caranya adalah dengan melakukan pemilihan visual dan kemudian ketik
:
. Ini akan mengisi:'<,'>
untuk Anda, lalu Anda mengetik sisanya (Perhatikan Anda hanya perlu menambahkans/$/,/
)sumber
'
, seharusnya:'<,'>s/$/,/
.g
? (:'<,'>s/$/,/g
)/$/
cocok hanya sekali.Sebenarnya ada cara untuk melakukan ini menggunakan mode blok Visual. Cukup menekan
$A
dalam mode blok Visual menambahkan ke akhir semua baris dalam pemilihan. Teks yang ditambahkan akan muncul di semua baris segera setelah Anda menekan Esc.Jadi ini adalah solusi yang mungkin:
Yaitu, dalam mode Normal, Visual pilih paragraf
vip
, alihkan ke mode blok Visual CTRLV, tambahkan$A
koma ke semua baris,
, lalu tekan Escuntuk mengonfirmasi.Dokumentasi ada di
:h v_b_A
. Bahkan ada sebuah ilustrasi tentang cara kerjanya di bagian contoh::h v_b_A_example
.sumber
C-V
) lalu pindahkan kursor ke akhir baris$
dan tambahkan ke semuanyaA
. Anda akan menyukai:h v_b_A
, yang sangat teliti.<C-V>ip
sebagai gantivip<C-V>
.'virtualedit'
- Saya mengujinya.) Saya mengonfirmasi bahwa itu tidak berfungsi di vim yang bersih. Terima kasih atas catatannya!Solusi lain, menggunakan fitur hebat lainnya:
Lihat
:help :normal
.sumber
:normal
. Saya merasa informatif!mode ex paling mudah:
sumber
Perintah pengganti dapat diterapkan ke pilihan visual. Membuat blok visual selama garis yang Anda ingin perubahan, dan ketik :, dan pemberitahuan bahwa baris perintah diinisialisasi seperti ini:
:'<,'>
. Ini berarti bahwa perintah pengganti akan beroperasi pada pemilihan visual, seperti:Dan ini adalah substitusi yang seharusnya bekerja untuk contoh Anda, dengan asumsi Anda benar-benar menginginkan koma di akhir setiap baris seperti yang Anda sebutkan. Jika ada spasi tambahan, Anda mungkin perlu menyesuaikan perintah sesuai:
Ini akan menggantikan spasi kosong yang ada sebelum akhir baris dengan koma, yang secara efektif menghapus spasi kosong.
Perintah yang sama dapat beroperasi pada berbagai jalur, misalnya untuk 5 baris berikutnya:
:,+5s/$/,/
, atau untuk seluruh buffer::%s/$/,/
.sumber
Jika Anda ingin menambahkan ',' di akhir baris yang dimulai dengan 'key', gunakan:
sumber
:g/key/s/$/,
. Lihat:help :global
.Saya memiliki
<M-DOWN>
(panah bawah alt) yang dipetakan<DOWN>.
sehingga saya dapat mengulangi perintah terakhir pada serangkaian baris dengan sangat cepat. dengan pemetaan ini saya bisa:Dan kemudian tahan alt sambil menekan berulang kali untuk menambahkan koma ke akhir setiap baris.
Ini bekerja dengan baik untuk saya karena memungkinkan kontrol yang sangat baik atas apa yang dilakukan dan tidak mendapatkan perubahan.
(Saya juga memiliki panah lain yang dipetakan dengan cara yang sama untuk memungkinkan pengulangan yang mudah
.
)Berikut garis pemetaan untuk ditempelkan ke vimrc Anda:
sumber
$ cocok dengan akhir baris
sumber
$
garis, bukan hanya,
./g
digunakan untuk melakukan substitusi pada setiap kemunculan dalam satu baris. Karena hanya ada satu$
baris yang dapat Anda jatuhkan dengan aman.Mengikuti Makro juga dapat digunakan untuk menyelesaikan tugas Anda.
sumber