Ketika saya merekam makro dengan q
dan saya selesai, saya bisa mengetik:
q
untuk berhenti merekam jika saya dalam mode normal atau visual.<c-o>q
untuk berhenti merekam jika saya dalam mode sisipkan...
Bagaimana saya berhenti merekam jika makro saya berakhir di mode perintah?
command-line
register
macro
iago-lito
sumber
sumber
:'<,'>s/toBeReplaced//g
lalu letakkan kursor di antara keduanya//
sehingga yang harus saya lakukan adalah mengetiknewString<cr>
dan saya selesai. :)Jawaban:
Solusi lain adalah ketika dalam mode baris perintah, gunakan
Ctrl-f
, dan tekanq
untuk berhenti merekam.Ctrl-f
memungkinkan Anda untuk membuka jendela baris perintah, di mana Anda dapat mengedit perintah dalam mode normal. Untuk memvalidasi perintah, cukup gunakan enter.Karena itu, setelah menambahkan sesuatu seperti:
di Anda
.vimrc
, Anda dapat menggunakan<c-q>
untuk berhenti merekam makro saat dalam mode perintah.Florent
sumber
^F
) dari akhir makro, kan? Setidaknya itulah yang saya lihat.qqSTARTMACRO:STARTCOMMANDLINEPART<c-f>i<c-o>q
dan rekaman benar-benar berhenti saat Anda mengetik bagian perintah. Untuk menggunakan makro:@qFINISHYOURCOMMAND<cr>
dan Anda selesai: tidak perlu mengeditnya. Sayangnya, ini tampaknya tidak berfungsi dari mode visual (atau itu kehilangan pilihan) .. atau apakah saya melewatkan sesuatu?@q
dan rentang ditambahkan pada perintah mulai'<,'>
- selama makro dimulai dengan:
....'<,'>
) masih cocok dengan pilihan ketika memvalidasi perintah.Salah satu cara untuk melakukannya:
qq
... karakter lain)ESC
untuk keluar dari mode-cmdline,q
untuk mengakhiri makro Anda.ESC
dariq
register Anda (*): Anda dapat menempelkannya di buffer, menghapus^[
karakter, memilih seluruh barang lagi (berdasarkan karakter) dan menariknya kembali untuk mendaftarq
.@q
.Pada dasarnya, Anda sedikit "pasca-proses" makro Anda, karena disimpan dalam register :)
(*) Cara cepat untuk menghapus karakter terakhir dari makro yang disimpan dalam register
q
adalah:sumber
:let @q = @q[:-2]
? Terutama bagaimana cara[:-2]
kerjanya? :-)@q
atas). Beberapa contoh di siniSetelah membaca komentar Anda tentang use case, sepertinya Anda bisa menggunakan pemetaan kunci alih-alih makro.
Saya memiliki baris ini di .vimrc saya (tidak ingat di mana saya menemukannya):
Ini memiliki efek yang mirip dengan kasus penggunaan yang Anda gambarkan, menempatkan Anda pada baris perintah sehingga satu-satunya hal yang harus Anda lakukan adalah mengetikkan penggantian dan tekan enter, tetapi dalam kasus ini, mengganti semua kemunculan kata yang berada di bawah kursor Anda .
Untuk mengganti saja di dalam blok saat ini, saya pikir sesuatu seperti yang berikut ini akan berfungsi:
Tentu saja, Anda dapat memetakannya ke tombol apa pun yang Anda inginkan.
Apa yang dilakukan di atas: tandai posisi saat ini menggunakan penanda yang tidak disebutkan namanya, pilih secara visual blok saat ini, tinggalkan mode visual dan kembalikan kursor ke posisi yang disimpan (penanda pemilihan visual masih diatur), masukkan mode perintah dan ketik perintah pengganti , masukkan kata yang berada di bawah kursor dengan
<C-r><C-w>
, dan posisikan kursor Anda untuk mengetik pengganti.sumber
toBeReplaced
polanya tidak sesederhana "kata di bawah kursor", itulah sebabnya saya memerlukan makro kecil dan spesifik yang dapat saya buat saat bepergian. Dan sekali lagi: terlalu spesifik untuk peta: \ Terima kasih pula :)toBeReplaced
bagian (alih-alih kata saat ini di bawah kursor, yang lebih membatasi).va{:s/<C-r>0//g<Left><Left>
Dengan ini Anda dapat menarik pola apa pun yang Anda butuhkan sebelumnya, dan kemudian cukup tekan tombol yang dipetakan untuk mengganti pola itu dengan sesuatu di saat ini blok.