Apakah ada cara untuk menambah / mengurangi digit pertama setelah / di bawah kursor, bukan seluruh angka.
Saya tahu ini bukan cara vim bekerja, tetapi apakah ada plugin yang melakukan itu? Saya tidak dapat menemukannya.
Ini sangat berguna saat mengedit css dan dalam kasus lain juga.
Diberikan:
▐margin: 10px
Ketika saya menekan CTRL-A
saya ingin melihat:
▐margin: 20px
Sebenarnya:
▐margin: 11px
key-bindings
arithmetic
dipecat
sumber
sumber
10<C-a>
dapat menambahkan 10 ataur2
mengganti 1 dengan 2.Jawaban:
Ini tampaknya bekerja dengan cukup baik, dan melakukan hal-hal yang cukup waras ketika menggunakan
<C-a>
angka 9 (95 menjadi 105), atau menggunakan<C-x>
angka 0 (105 menjadi 95):search()
memiliki keuntungan tidak mengatur ulang@/
.a <Esc>h
- Pergi ke mode insert, tambahkan spasi setelah digit, dan pergi ke kiri sehingga kursor berada di atas digit.<C-a>
atau<C-x>
.lxh
untuk menghapus ruang yang kami tambahkan.Saya telah memetakan ini ke
g<C-a>
dang<C-x>
, jadi Anda masih dapat memanggil yang asli.Versi yang sedikit berbeda yang hanya akan mencari angka pada baris saat ini (tetapi akan meninggalkan ruang yang menggantung jika tidak ada angka di baris saat ini):
Dan inilah versi lain yang menggunakan konsep yang sama seperti sebelumnya, tetapi juga menambahkan spasi sebelum digit. Ini akan membuat
g<C-a>
mengabaikan tanda munis sebelum nomor (secara default,<C-a>
pada-42
akan 'bertambah' menjadi-41
.Itu juga menerima hitungan, sehingga
5g<C-a>
akan menambah angka dengan 5:sumber
Peningkatan dasar
Berikut ini adalah makro sederhana untuk melakukan tindakan:
Dalam mode normal Anda
m`
Tandai lokasi Andal
pindahkan satu karakter ke kananv$x
potong sampai akhir garish
kembali ke posisi semula<c-a>
increment (atau decrement)p
tempelkan kembali potongan Anda``
kembali ke tanda AndaLompat ke nomor berikutnya
Jika Anda ingin melompat ke nomor berikutnya (atau tetap di posisi Anda saat ini jika pada nomor), Anda memerlukan fungsi yang memeriksa karakter yang sedang dikutuk dan mungkin melompat ke nomor berikutnya.
NextNum
mendapatkan karakter di bawah kursor, memeriksa apakah nomornya dan jika tidak mencari nomor berikutnya. Setelah itu sisanya sama. Jika Anda ingin pemetaan berbeda, ubah sajannoremap <leader>a
sesuai keinginan, misalnyannoremap <c-a>
.Mengabaikan negatif dan angka lebih tinggi dari 9
Jika Anda ingin hanya menggilir angka dan tidak menjadikannya bertindak sebagai bilangan bulat yang ditandatangani, fungsi-fungsi berikut akan bertambah dan berkurang dan berguling pada 0 dan 9.
Sekarang ketika Anda aktif
8
dan ketik yang<leader>a
Anda dapatkan9
. Melakukannya lagi menghasilkan0
. Jika Anda menekan<leader>x
pada0
Anda mendapatkan9
. Hal yang sama berlaku untuk angka negatif. Fungsi memotong satu karakter, increment, decrement atau roll over dan kemudian tempelkan pada tempatnya.sumber
<c-a>/<c-x>
juga.<c-a>
dan<c-x>
untuk sesuatu yang lain karena perilaku default tidak begitu berguna.<c-a>
dan<c-x>
banyak. Setiap kali saya memperbarui versi atau menambah variabel rentang, saya hanya[N]<c-a>
menghapus dan mengganti.<c-a>
dan<c-x>
yang perlu dijatuhkan untuk fungsi yang melakukan hal yang sama tetapi mengabaikan tanda hubung.Ini adalah versi yang saya tulis menggunakan ekspresi pengganti:
Masing-masing hanya mencari karakter digit pertama pada baris, dan menambahkan atau mengurangi satu jika masing-masing berada dalam kisaran [0-8] atau [1-9]. Ada tiga masalah:
"/
:, dan jika Anda mengaktifkan pencarian, maka semua angka dalam buffer saat ini akan disorot ketika Anda menggunakan ini. Anda dapat menambahkan:noh<CR>
ke masing-masingmap
perintah di atas untuk menghentikan penyorotan, tapi saya tidak tahu bagaimana menghentikan register agar tidak musnah.Juga, jika itu saya, saya akan memetakan di atas ke
<leader>a
dan<leader>x
, bukan keCTRL-A/X
. Dengan cara ini, Anda memiliki kedua perilaku yang tersedia untuk Anda.<leader>
adalah, secara default, tombol backslash (\
).sumber
:noh
juga. Tetapi masalah sebenarnya adalah bahwa ia tidak dapat menggunakan posisi kursor sebagai basis dan dengan demikian Anda hanya dapat menambah angka pertama dalam baris.noremap
) dan tidak pernahmap
. Lihat halaman ini untuk penjelasan lebih rinci tentang itu.