Berikut ini kira-kira apa yang saya coba lakukan di vim
:let g:ID = 1
:%s/^/\= g:ID | let g:ID = g:ID * 1.2/
Sekarang, sepertinya vim tidak menyetujui semuanya setelah bilah (itu adalah let g:ID = g:ID * 1.2
bagiannya.
Tentu saja saya bisa menulis fungsi yang mengalikan g: ID dengan 1.2 dan mengembalikan nilai g: ID, tetapi saya ingin melupakannya.
Terima kasih Rene
edit untuk kejelasan:
Dalam vim-script, saya bisa menulis banyak pernyataan dalam satu baris jika saya menggunakan bilah (|) untuk membuat rantai. Jadi, bukannya
let g:ID = 20
let g:ID = g:ID * 1.2
let g:ID = g:ID * 1.2
Saya juga bisa menulis
let g:ID = 20 | let g:ID = g:ID * 1.2 | let g:ID = g:ID * 1.2
Sekarang, \ = thingy memungkinkan saya untuk mengganti ekspresi reguler dengan ekspresi skrip vim. Sebagai contoh, saya bisa melakukan
:%s/ABC/\=line(".")/
yang akan menggantikan setiap kemunculan ABC di buffer saya saat ini dengan nomor baris yang ditemukan.
Demikian pula a
:%s/^/\=g:ID/
akan menulis nilai g: ID di awal setiap baris di buffer saya.
Itu semua bagus dan keren, tetapi saya ingin memiliki lebih dari satu ekspresi di bagian pengganti dan bertanya-tanya apakah saya bisa mencapainya dengan merantai ekspresi seperti itu dengan bilah. Dalam kasus saya, saya ingin memanipulasi g: ID setelah setiap panggilan substitusi, karenanya
:let g:ID=20
:s/^/\=g:ID|let g:ID=g:ID * 1.2/
akan menghasilkan tulisan 20 di awal baris pertama di buffer saya, 24 di awal baris kedua di buffer saya, 28,8 di awal baris ketiga di buffer saya dan seterusnya.
Saya harap saya membuat diri saya lebih jelas sekarang.
\=
. Atau tepat satu ungkapan.|
adalah pembatas perintah, dan jika Anda perlu menggunakanlet
Anda juga memerlukan fungsi (misalnya jika Anda perlu menggunakannyas/RE/\=EXPRESSION/g
) atau:g
seperti yang disarankan @peth. Apakah ini pertanyaan golf vim? ;-)Jawaban:
Anda dapat menggunakan
:global
karena perintahnya dijalankan untuk setiap baris.Jika Anda ingin membatasi penggantian, baik dibatasi oleh
:global
pola, atau awalan:global
dengan rentang, atau keduanya.Itu harus menambahkan pertambahan
g:ID
untuk setiap baris yang cocokfoo
dari baris 10 hingga 20 (inklusif).sumber
Anda mungkin perlu mendefinisikan suatu fungsi:
dan gunakan seperti ini:
sumber
Coba
<bar>
alih-alih|
lihat:http://vim.wikia.com/wiki/Best_Vim_Tipssumber