Subversif menyediakan dua gerakan operator baru untuk memudahkan melakukan substitusi cepat. Ini tidak berisi pemetaan default dan tidak akan berpengaruh sampai Anda menambahkan peta Anda sendiri ke dalamnya.
Lihat juga di sini jika Anda lebih suka menonton video penjelasan plugin ini daripada teks di bawah.
Contoh konfigurasi:
" s for substitute
nmap s <plug> (SubversiveSubstitute)
nmap ss <plug> (SubversiveSubstituteLine)
nmap S <plug> (SubversiveSubstituteToEndOfLine)
Perhatikan bahwa dalam kasus ini Anda akan membayangi perubahan karakter key s
sehingga Anda harus menggunakan bentuk cl
yang lebih panjang
Setelah menambahkan peta ini, Anda kemudian dapat menjalankan s<motion>
untuk mengganti objek teks yang disediakan oleh gerakan dengan konten register default (atau register eksplisit jika disediakan). Misalnya, Anda dapat menjalankan siw
untuk mengganti kata saat ini di bawah kursor dengan yank saat ini, atau sip
untuk mengganti paragraf, dll.
Operator menarik lainnya yang disediakan oleh subversif memungkinkan menentukan teks yang akan diganti dan rentang garis untuk menerapkan perubahan dengan menggunakan beberapa gerakan berturut-turut.
Contoh konfigurasi:
nmap <leader> s <plug> (SubversiveSubstituteRange)
xmap <leader> s <plug> (SubversiveSubstituteRange)
nmap <leader> ss <plug> (SubversiveSubstituteWordRange)
Setelah menambahkan peta ini, jika Anda menjalankan <leader>s<motion1><motion2>
lalu memasukkan beberapa teks ke dalam prompt di bilah status, maka teks yang diberikan oleh motion1
harus diganti dengan teks yang kita masukkan di prompt untuk setiap baris disediakan oleh motion2
. Alternatifnya, kita juga dapat memilih motion1
dalam mode visual lalu menekan <leader>s<motion2>
untuk efek yang sama.
Ini bisa menjadi sangat ampuh. Misalnya, Anda dapat menjalankan <leader>siwip
untuk mengganti semua contoh kata saat ini di bawah kursor yang ada dalam paragraf di bawah kursor. Atau <leader>sl_
untuk mengganti semua karakter di bawah kursor pada baris saat ini.
Pemetaan <leader>ss
digunakan sebagai pintasan untuk menggantikan kata saat ini di bawah kursor. Hal ini memungkinkan Anda misalnya menjalankan <leader>ssip
untuk mengganti kata di bawah kursor pada paragraf saat ini. Perhatikan bahwa ini cocok dengan kata-kata lengkap sehingga berbeda dengan <leader>siwip
(yang tidak mengharuskan ada batasan kata pada setiap kecocokan)
Mari kita lihat aksinya:
Dalam gif ini, pertama-tama kita mengganti nama parameter foo
lokal dengan menjalankan <leader>ssom
lalu memasukkan bar
di prompt (perhatikan bahwa om
adalah gerakan khusus yang merupakan singkatan dari 'metode c# luar' dan tidak disediakan oleh plugin ini). Perhatikan juga bahwa karena kita menggunakan <leader>ss
, teks _foos
tidak terpengaruh karena tidak cocok dengan kata lengkapnya. Ini berguna dalam hal ini karena kita hanya ingin mengganti nama parameter di dalam fungsi.
Setelah itu kita beralih ke mode visual dan memilih bagian foo
_foos
lalu jalankan <leader>sie
dan sekali lagi masukkan bar
ke dalam prompt. ie
sekali lagi merupakan gerakan khusus yang mewakili entire buffer
(lihat bagian selanjutnya untuk detailnya)
Setelah itu kita pindah ke bagian Foo
dari AddFoo
dan jalankan <leader>seie
dan sekali lagi masukkan Bar
. Lalu terakhir lakukan hal yang sama untuk FOOS
yang bermodal penuh.
Perhatikan bahwa jika Anda menggunakan neovim, Anda dapat mengaktifkan opsi inccommand
untuk mendapatkan pratinjau pengganti secara real-time saat Anda mengetiknya (setara dengan menyetel g:subversivePromptWithActualCommand
ke 1
)
Perhatikan juga bahwa gerakan ini dapat diulang. Jika Anda menjalankan <leader>siwip
dalam satu paragraf, lalu berpindah ke paragraf lain, lalu tekan .
maka substitusi yang sama akan diterapkan pada paragraf baru di bawah kursor.
Perhatikan bahwa untuk benar-benar memanfaatkan pemetaan ini, akan sangat membantu jika menambahkan objek teks khusus selain yang sudah ada di dalamnya seperti paragraf saat ini ( ip
), kalimat saat ini ( is
), atau baris saat ini ( _
). Objek teks khusus seperti level indentasi saat ini, metode saat ini, kelas saat ini, seluruh buffer, halaman gulir saat ini, dll. semuanya dapat banyak membantu di sini.
Misalnya, beberapa gerakan sederhana yang berguna untuk subversif adalah:
" ie = inner entire buffer
onoremap ie :exec "normal! ggVG" <cr>
" iv = current viewable text in the buffer
onoremap iv :exec "normal! HVL" <cr>
Ada juga plugin lain yang menyediakan banyak objek teks khusus yang saya sarankan untuk Anda lihat.
Untuk banyak pergantian pemain, Anda dapat mengandalkan pratinjau sorotan untuk memahami apa yang diganti. Namun jika Anda melakukan penggantian yang lebih besar di seluruh file, Anda mungkin ingin mengonfirmasi satu per satu. Anda dapat melakukannya dengan peta berikut:
nmap <leader> cs <plug> (SubversiveSubstituteRangeConfirm)
xmap <leader> cs <plug> (SubversiveSubstituteRangeConfirm)
nmap <leader> css <plug> (SubversiveSubstituteWordRangeConfirm)
Cara kerjanya sama seperti peta <leader>s
di atas, kecuali peta tersebut akan menelusuri setiap penggantian satu per satu.
Jika Anda memberikan register eksplisit untuk salah satu gerakan pengganti di atas, maka ia tidak akan meminta dan malah akan menggunakan konten register yang diberikan. Misalnya, "a<leader>siwip
akan segera mengganti semua contoh kata saat ini di bawah kursor dengan isi register a
yang ada dalam paragraf saat ini.
Jika ini belum cukup, Anda juga dapat menggunakan colokan berikut:
nmap <leader> s <plug> (SubversiveSubstituteRangeNoPrompt)
xmap <leader> s <plug> (SubversiveSubstituteRangeNoPrompt)
nmap <leader> ss <plug> (SubversiveSubstituteWordRangeNoPrompt)
Yang akan bekerja sama dengan colokan sebelumnya kecuali alih-alih meminta, ia akan menggunakan register default.
Anda dapat melakukan ini dengan meneruskan register lubang hitam ke salah satu perintah pengganti jarak jauh. Misalnya: "_<leader>siwip
atau "_<leader>csiwip
jika Anda ingin mengonfirmasi setiap penghapusan.
Sayangnya Anda tidak bisa begitu saja memasukkan nilai kosong ke dalam prompt karena tidak ada cara untuk membedakan input ini dari pembatalan melalui escape (kecuali jika Anda menyetel g:subversivePromptWithActualCommand
ke 1
dalam hal ini akan berfungsi dengan baik)
g:subversivePromptWithCurrent
- Jika disetel ke 1
, prompt akan menyertakan teks yang diganti. Ini bisa berguna jika Anda hanya ingin mengeditnya. Bawaan: 0
g:subversiveCurrentTextRegister
- Jika disetel, register tertentu akan diisi dengan teks yang diganti. Ini dapat berguna sebagai alternatif dari g:subversivePromptWithCurrent
, sehingga Anda dapat menekan <cr>r
di prompt (dengan asumsi Anda menyetelnya ke 'r'
) ketika Anda ingin mengeditnya dan jika tidak, langsung ketikkan kapan Anda ingin melakukannya penggantian penuh.g:subversivePromptWithActualCommand
- Jika disetel ke 1
, alih-alih hanya meminta teks pengganti, ia akan menampilkan perintah pengganti vim asli. Pengguna vim veteran mungkin lebih memilih ini sehingga mereka dapat menyesuaikan sendiri berbagai tanda substitusi. Bawaan: 0
g:subversivePreserveCursorPosition
- Jika disetel ke 1
, kursor tidak akan bergerak saat substitusi diterapkan. Defaultnya adalah 0
untuk mencocokkan perilaku vim normal. Jika Anda juga telah menginstal vim-abolish, Anda mungkin mempertimbangkan untuk menambahkan sesuatu yang mirip dengan pemetaan berikut juga:
nmap <leader> <leader> s <plug> (SubversiveSubvertRange)
xmap <leader> <leader> s <plug> (SubversiveSubvertRange)
nmap <leader> <leader> ss <plug> (SubversiveSubvertWordRange)
Ini akan berperilaku sama seperti <leader>s
kecuali bahwa ia akan melakukan penghapusan 'menumbangkan' alih-alih menggunakan perintah pengganti bawaan vim. Ini akan menerapkan substitusi dan juga mempertahankan huruf apa pun dari kata aslinya. Misalnya:
Dalam hal ini, kita gerakkan kursor ke atas foo
lalu jalankan <leader><leader>seie
lalu masukkan bar
, yang menggantikan semua instance foo
apa pun hurufnya.
Ini bisa menjadi cara yang sangat mudah untuk melakukan penggantian nama dengan cepat.
Seperti yang Anda harapkan, pemetaan <leader><leader>ss
bekerja dengan cara yang sama kecuali hanya mencocokkan kata lengkap yang menyertakan batas kata.
Dan sekali lagi ada juga colokan alternatif yang akan menggunakan register default daripada prompt jika Anda menginginkannya:
nmap <leader> <leader> s <plug> (SubversiveSubvertRangeNoPrompt)
xmap <leader> <leader> s <plug> (SubversiveSubvertRangeNoPrompt)
nmap <leader> <leader> ss <plug> (SubversiveSubvertWordRangeNoPrompt)
Perhatikan bahwa jika Anda menginstal vim-yoink bersama vim-subversif, maka fitur pertukaran yoink pasca-tempel akan secara otomatis bekerja dengan substitusi subversif (gerakan tunggal). Dengan kata lain, dengan asumsi pemetaan default, Anda dapat menjalankan siw
lalu menekan <cn>
/ <cp>
untuk bertukar antara yanks berbeda dari riwayat yoink.
Subversif juga menyediakan plug untuk menggantikan mode visual paste untuk menyediakan pertukaran post paste di sana juga:
xmap s <plug> (SubversiveSubstitute)
xmap p <plug> (SubversiveSubstitute)
xmap P <plug> (SubversiveSubstitute)
Sekarang jika Anda menekan p
saat dalam mode visual, Anda dapat bertukar antar sentakan seperti saat menempelkan dalam mode normal.