A One Liner
Saya menemukan pengganti ekspresi reguler sederhana (dengan asumsi 'sihir' diatur):
:s/ \([a-zA-Z]\)/\u\1/g
Ini cocok dengan satu huruf setelah spasi, menyimpan surat itu. Kemudian, itu menggantinya dengan huruf yang disimpan membuat huruf besar ( \u
= huruf besar, \1
= pertandingan yang disimpan pertama), untuk setiap pertandingan di baris.
Terapkan di seluruh file dengan menempatkan %
antara :
dan s
.
Kelemahan dari solusi ini adalah bahwa itu adalah linewise (yang berfungsi untuk contoh Anda), tetapi akan gagal jika Anda hanya ingin unta huruf beberapa kata keluar dari banyak dalam satu baris.
Solusi yang lebih lengkap
map <leader>g~ :set opfunc=MyCamelCase<CR>g@
function! MyCamelCase(type, ...)
let searchsave=@/
silent s/\%>'\[ \([a-zA-Z]\)\%<']/\u\1/g
let @/=searchsave
endfunction
Ini menciptakan operator baru yang dapat beroperasi dengan gerakan. Jika sudah <leader>
seperti itu \
, maka berikan teks berikut (dengan |
kursor):
This is some |example text to work with.
Mengetik \g~3w
memberi
This is some exampleTextTo work with.
Artinya, kita unta lebih dari 3 kata.
Deskripsi substitusi itu:
s/
memulai substitusi.
\%>'\[
Agak menyakitkan. Kata \%>'m
mengatakan untuk mencocokkan dengan hak tanda. Kami ingin tanda [
, tetapi itu juga harus lolos dalam pola ini. Jadi, ini memulai pertandingan setelah gerakan diberikan kepada operator.
\([a-zA-Z\)
sama dengan dari one-liner di atas.
\%<']
ini adalah ujung yang lain, cocok sebelum akhir gerakan.
/\u\1/g
adalah pengganti dari one-liner di atas.
Untuk alternatif saya menggunakan plugin vim-abolish yang menawarkan fitur paksaan:
sumber
Anda bisa membuat makro rekursif yang melakukan ini untuk satu baris dengan penekanan tombol berikut:
(Perhatikan bahwa ruang antara
f
danx
adalah ketukan bilah spasi, bukan jeda)Secara terperinci:
Kosongkan daftar q. Ini diperlukan karena kami sedang membuat makro rekursif. (Lihat langkah 5.):
qqq
Mulai merekam makro dalam register, q:
qq
Anda tidak dapat menggunakan
w
gerakan di sini, karena Anda ingin makro untuk dibatalkan ketika sampai ke akhir baris, daripada melompat ke baris berikutnya. Sebagai gantinya, lompat ke karakter spasi berikutnya di telepon dengan menekanf
tombol diikuti oleh bilah spasi:f<space>
Hapus spasi dan huruf besar huruf berikut:
xgUl
Perulangan. Karena kami membersihkan
q
register di langkah 1, belum ada apa-apa di dalamnya, jadi ini tidak akan menghasilkan apa-apa:@q
Simpan makro:
q
Anda kemudian dapat menerapkan makro ini ke beberapa baris dengan menggunakan rentang:
Terapkan makro ke setiap baris dalam file:
Terapkan makro ke baris 2–5 inklusif:
Buat pilihan visual, lalu ketik
:normal @q
. Ini akan mengisi lebih dulu baris perintah ketika Anda menekan:
tombol, menghasilkan perintah yang menerapkan makro untuk setiap baris dalam seleksi:sumber
q
register, sepertiqq
halnya sebelum mulai merekam penekanan tombol. Bahkan, itulah sebabnya mengapaqqq
bekerja untuk menghapusq
register :)q
register (yaitu menggunakanqQ
) maka membersihkannya terlebih dahulu mungkin akan diperlukan.vim -u NONE
). Karenanya, konten yang ada hanya dihapus ketika Anda menyimpan register, pada langkah 6. Membersihkan register sebelum Anda mulai karena itu perlu jika Anda ingin recurse.Lihat http://vim.wikia.com/wiki/Changing_case_with_regular_expressions Ini menjelaskan pengubah \ U, \ L, \ u, \ l dengan sangat jelas dan ringkas!
Esensinya adalah sebagai berikut:
Ada saat-saat Anda mungkin ingin menelusuri file dan mengubah huruf besar-kecil karakter yang cocok dengan beberapa kriteria sewenang-wenang. Jika Anda memahami ekspresi reguler dengan baik, Anda sebenarnya dapat melakukannya dengan cukup mudah.
Ini semudah menempatkan \ U atau \ L di depan referensi yang ingin Anda ubah kasusnya, dan \ E di akhir. Vim akan membuat teks dalam backreference huruf besar atau kecil (masing-masing). Gunakan \ u dan \ l (tanpa \ E di akhir) untuk hanya mengubah huruf karakter pertama di referensi belakang.
("Referensi-ulang" adalah bagian dari ekspresi reguler yang merujuk ke bagian sebelumnya dari ekspresi reguler. Referensi yang paling umum adalah &, \ 1, \ 2, \ 3, ..., \ 9).
Beberapa contoh yang menunjukkan kekuatan teknik ini:
Huruf kecil seluruh file
(& adalah referensi balik praktis yang merujuk pada teks lengkap pertandingan.)
Huruf besar semua kata yang diawali dengan <(yaitu membuka nama tag HTML):
Perhatikan juga perintah gu dan gU.
Misalnya, ggguG akan mengurangi seluruh file. (gg = pergi ke atas, gu = huruf kecil, G = pergi ke EOF).
Dengan menggunakan \ 0 backref umum alih-alih yang namanya (\ 1, \ 2 dll) Anda dapat menyimpan beberapa pengetikan untuk menggantikan bait dari regex.
Regex ini huruf besar set kata-kata eksplisit untuk huruf besar dalam file:
Bukan ilmu roket, tetapi Anda harus melakukan ini:
sumber