Konteks
Saya menggunakan vifm
sebagai manajer file saya (itu di luar topik di sini, saya tahu, tetapi terus membaca) yang memungkinkan saya untuk mengedit nama file di dalam vim
buffer.
Salah satu masalah yang membuat saya jengkel adalah file bernomor tempat saya ingin tetap memimpin nol (mis movie0001.webm
.). Saya tidak bisa mendapatkan vim untuk memformatnya dengan benar.
Pertanyaan
Saya memiliki vim
buffer yang berisi:
mov70.webm
mov71.webm
mov72.webm
mov73.webm
mov74.webm
mov75.webm
mov76.webm
mov77.webm
mov78.webm
mov79.webm
Dan kursor saya dimulai pada m
baris pertama. Saya kemudian lakukan VG
untuk menandai semuanya dan 69<C-x>
mengubahnya menjadi:
mov1.webm
mov2.webm
mov3.webm
mov4.webm
mov5.webm
mov6.webm
mov7.webm
mov8.webm
mov9.webm
mov10.webm
Tapi saya benar-benar ingin mencapai ini sebagai gantinya:
mov01.webm
mov02.webm
mov03.webm
mov04.webm
mov05.webm
mov06.webm
mov07.webm
mov08.webm
mov09.webm
mov10.webm
Apa yang saya coba
Masalah dengan angka-angka dengan nol di depan adalah yang vim
akan memperlakukan mereka sebagai octal
, oleh karena itu saya berubah nrformats
menjadi string kosong:
:set nrformats=
Namun, itu tidak membantu. Saya telah mencari-cari :h nrformats
tanpa menemukan sesuatu yang bermanfaat.
sumber
:subsitute
+printf
Jawaban:
Ini dapat dilakukan dalam dua langkah yang relatif sederhana:
ctrl-x
'[,']s/\d\@<!\d\>/0\0/
Anda bisa mengubahnya menjadi perintah / fungsi jika Anda pikir Anda harus sering melakukannya.
Cara lain adalah melakukan seperti yang disebutkan muru dan menggunakan
substitute
+printf
, yang dapat mempertahankan panjang string dari digit yang diganti:Ini juga bisa diubah menjadi perintah yang dapat digunakan kembali:
Yang bisa Anda jalankan dengan
:'<,'>Decr 69
mengurangi garis visual sebanyak 69.sumber
viscript
tetapilen(submatch(0))
merupakan trik yang bagus. Menambahkannya ke sayavimrc
, dan juga menambahkanIncr
perintah.Meskipun saya pasti akan menggunakan
:s
+printf
untuk penggantian kompleks, saya bisa mendapatkan efek yang Anda inginkan jika saya mulai dari00
, dan sudahset nrformats-=octal
. Itu adalah:Pilih angka dalam blok visual:
Perhatikan bahwa saya telah menambahkan
mov76.webm
- Anda sebenarnya tidak memiliki sepuluh file dalam daftar contoh Anda.Ganti dengan nol dan pilih wilayah yang sama lagi:
r0gv
Gunakan
g<c-a>
:Tanpa
set nrformats-=octal
, Anda akan melihat010
,011
dllsumber
0
lihat seperti mata. Mengerikan.mov76.webm
, saya menggunakan direktori yang buruk. Saya mengedit pertanyaan. Yay, untuk font andale .