Apakah ada yang seperti itu?
eval("is_recording()")
bahwa saya dapat memanggil vimscript saya untuk mengetahui apakah saya sedang merekam makro? Saya akan berpikir ini bekerja:
eval("mode(1)")
tapi itu baru saja kembali "n"
.
Tidak yakin apakah itu penting, tapi saya menggunakan neovim, jadi jika itu eksklusif untuk neovim, tidak apa-apa.
Jawaban:
Pertama, saya pikir masalah Anda terutama masalah XY . Anda harus memberi kami informasi lebih lanjut tentang apa yang Anda coba lakukan pada akhirnya dan saya pikir kami bisa menemukan solusi lain.
Sekarang ini adalah solusi, mungkin tidak ideal dan tentu saja tidak terlalu kuat tetapi Anda dapat menambahkan baris ini ke
.vimrc
:Idenya adalah bahwa "mode perekaman" diaktifkan secara eksklusif ketika Anda menekan qdalam mode normal.
Berdasarkan itu Anda membuat variabel
g:isRecording
yang akan diaktifkan setiap kali Anda memulai atau menghentikan rekaman. Dengan cara ini ketika Anda mulai merekamg:isRecording
akan diatur ke1
dan0
ketika Anda berhenti merekam. Anda kemudian dapat mengakses status perekaman melalui nilai variabel."Kelemahan" adalah untuk menghindari pemetaan rekursif, Anda harus menggunakan Shit-q untuk memulai dan berhenti merekam q. (Perhatikan bahwa ini bukan masalah besar: Saya telah menggunakan shift-quntuk beralih mode rekaman untuk beberapa waktu karena saya tidak suka shift-qperilaku asli )
Masalah utama dari solusi ini adalah bahwa jika Anda lupa tentang hal itu dan menggunakan qvariabel tidak akan beralih tetapi Anda tidak dapat menonaktifkan q(misalnya dengan
nnoremap q <nop>
) karena jika Anda tidak shift-qakan bekerja lagi.sumber
Ini adalah permintaan yang cukup aneh karena tidak ada "mode" untuk merekam makro. Setelah menggali beberapa dokumen saya menemukan yang berikut di
usr_10
Yang menonjol bagi saya adalah baris tentang "Mulai merekam makro di register a"
Karena setiap makro akan disimpan ke register secara default, saya berharap kita dapat melihatnya di
:reg
daftar. Ternyata itu berfungsi seperti pesona!Contoh:
Dalam mode normal:
qaisomething<Esc>
dan di dalam
:reg
kita melihat entri!Dengan pengetahuan itu Anda harus dapat "memata-matai" register untuk mengkonfirmasi bahwa makro sedang direkam (gunakan register bernama pada setiap rekaman [peta
q
untuk selalu menggunakan register yang sama (atau sesuatu seperti itu)]Jika Anda mengalami masalah, beri tahu saya dan saya akan mencoba membantu Anda (karena fungsi ini juga baru bagi saya: D)
sunting Untuk mengatasi masalah register yang digunakan selama penarikan, saya sarankan untuk melihat jenis register khusus yang hanya dapat Anda gunakan untuk
vimL
tulisan yang Anda tulis (tidak ada yank yang akan terlibat dalam register ("ay
))Berikut adalah sedikit info dari
:help registers
register yang tersediaDengan asumsi bahwa Anda memiliki register yang akan Anda gunakan sekarang masalah menjadi "bagaimana saya tahu ketika rekaman telah berhenti?". Untuk mengatasi ini, saya akan melihat
autocmd-event
untukCursorHold
; catatan dalam dokumen bantuan terlihat cukup menjanjikan (saya akan mencoba mencari tahu bagaimana saya bisa membedakan kursor normalHold vs peristiwa idle / tidak ada yang terjadi ketika register Anda sedang ditulis untuk keperluan makro)sumber
blackhole register
itu hanya disebutkan sebagai petunjuk dan berita menarik vim yang mungkin mengarah ke sesuatu (itu tidak akan berguna untuk digunakan saat merekam makro; karena @_ tidak dapat digunakan.) Bahkan Anda bahkan tidak dapat mencoba untuk menyimpan makro untuk itu ..CursorHold
tampaknya menjadi mimpi yang mustahil karena keterlambatan yangCursorHold
sebenarnya terjadi (membuat kenaikan global sederhana terjadi setiap kali menonton ini). Masih sangat tertarik untuk menemukan cara untuk melakukan ini dan akan terus membenturkan wajah saya ke tombol sampai kami punya solusi ..q
dan membuatnya beralih variabel dan mulai / berhenti merekam. Autocomand tidak dapat diandalkan di sini karena tidak ada autocmd yang dipicu pada penekanan tombol, dan tidak mungkin membuat fungsi polling karena sifat monothread Vim. Semoga berhasil dengan eksperimen Anda di masa depan :-)