Saya memiliki file yang penuh teks (mis. Markdown atau LaTeX). Saya ingin menghitung jumlah kata di bagian file ini.
Saya tahu saya bisa lakukan :! wc -w %untuk menjalankan wc -w pada buffer saat ini. Dan saya tahu bahwa saya dapat menarik bagian yang menarik ke dalam register bernama. Saya menduga ada cara untuk mengirim register bernama ke sistem operasi untuk digunakan dalam perintah atau pipa, tetapi saya belum dapat menemukannya. Atau adakah cara yang lebih baik untuk menghitung kata-kata dalam register?
Kasus penggunaan saya adalah bahwa saya melakukan banyak penulisan non-pemrograman (catatan, tesis, dll) dalam vim, dan saya ingin menghitung berapa banyak kata yang telah saya tambahkan ke bagian file tertentu di tengah pengeditan sidang.
sumber
g<C-g>
cara itu. Luar biasa!Ada dua cara ini dapat dicapai, cara penulisan naskah murni dan
wc
cara.Cara vim murni
Anda dapat menggunakan perintah pencarian dan ganti untuk melakukan ini. Sebagai contoh:
Apa yang dilakukan adalah alih-alih mengganti pola yang diberikan dengan sesuatu, itu hanya menghitung kemunculan pola tersebut. Ini karena
n
benderanya. Untuk menghitung kata-kata di bagian tertentu (dalam hal ini baris 5 hingga 15), Anda dapat melakukan sesuatu seperti ini:Ini menghilangkan kebutuhan untuk menarik konten pilihan ke dalam register. Untuk melihat lebih banyak kemungkinan untuk apa yang dapat dilakukan
5-15
, baca topik bantuan untukcmdline-ranges
. Jika Anda ingin sering melakukan ini, mungkin baik untuk membuat pemetaan (atau perintah) untuk itu. Juga, jika Anda telahhlsearch
mengaktifkan, Anda mungkin ingin menjalankan:nohlsearch
sesudahnya untuk menghapus sorotan.The
wc
caraHal yang sama dapat dicapai
wc
. Dengan cara yang sama Anda dapat menggunakancmdline-ranges
untuk memilih area dengan:s
perintah, Anda dapat menggunakannya dengan perintah eksternal. Sebagai contoh:Ini menjalankan baris 5 hingga 15 melalui
wc
perintah. Kelemahan dari ini adalah bahwa ia mengganti rentang garis dengan output dari perintah. Anda dapat membatalkan perubahan ini dengan menekanu
. Perhatikan juga bahwa solusi vimscript mungkin tidak berfungsi dengan bahasa yang berbeda, karena\w
tidak cocok dengan apa yang biasanya menjadi karakter kata dalam bahasa lain.wc
mungkin lebih baik dalam hal ini daripada\w
. Juga, ini adalah perintah mewah untuk membuatnya lebih cepat untuk melakukan ini:Perhatikan bahwa ini akan menghalangi
a
register.Catatan
Tampaknya ini juga dapat dilakukan dalam mode visual dengan
g<C-g>
kombinasi tombol. Lihat jawaban Carpetsmoker untuk penjelasannya.sumber
\w
suara seperti ide bagus pada awalnya, tapi setelah pengujian itu saya menemukan sejumlah masalah. Yang terbesar adalah bahwa itu tidak akan cocok dengan karakter non-ascii, jadi kata sepertiüber
hanya dilewati (ada pertanyaan tentang ini kemarin). Juga, kata sepertie-mail
dihitung sebagai 2 kata, karena-
tidak ada dalam\w
(menggunakan-
agak jarang dalam bahasa Inggris, tetapi sangat umum di Belanda misalnya). Mungkin ada karakter lain yang diabaikan dalam mode ini, yang membawa kita ke poin terakhir saya: konvensi tentang apa yang dianggap sebagai "kata" mungkin berbeda ...wc
dapat mengambil di tempat (saya tidak tahu apakah GNUwc
benar-benar berurusan dengan ini, alat GNU tidak terkenal dengan dukungan unicode mereka yang luar biasa).wc
solusi.Untuk kata-kata gunakan:
.
menunjukkan garis saat ini.Saya juga memasukkan yang berikut ini di file .vimrc saya:
Saya bisa mengetik:
dan
zzcw
akan berkembang menjadis/\i\+/&/g
Itu
zzcw
hanya nama aneh yang tidak cocok dengan apa pun (untuk saya).Efek sampingnya adalah seluruh file dipilih dan disorot.
Saya ingin dapat mengetik tweet multi-baris dalam sebuah file, memastikan tidak ada terlalu banyak karakter, dan menempelkan tweet di twitter.
sumber