Saya mencoba mendefinisikan makro yang dengan cepat menghasilkan daftar kata-kata acak.
Saya ingin makro mengubahnya menjadi daftar seperti
a
b
c
d
e
dalam hal ini
arezzo
bywords
czars
détente
eyrie
Apa yang saya miliki sejauh ini:
- letakkan kursor di atas huruf
a
- mulai merekam makro
qq
a
masuk ke mode insert<C-x><C-k> - perform dictionary completion on the character before cursor - in this case the letter
a`<C-p>
pilih item terakhir dalam daftar penyelesaian yang muncul, di sistem saya kataarezzo
. (NB Saya telahlongest
memasukkan dalam'completeopt'
pengaturan saya , yang diperlukan untuk<C-p>
bekerja dengan cara ini selama penyelesaian:)'set completeopt=longest,menuone,preview'
.<C-y>
terima penyelesaiannya^[^[
keluar dari mode penyisipanj
pindah ke baris berikutnya, siap untuk melakukan operasi yang sama pada baris berikutnyaq
berhenti merekam
ketika saya membuat makro dan melalui langkah-langkah secara manual, semuanya berfungsi dengan baik, namun ketika saya menjalankan makro, saya melihat pesan yang berkedip di baris perintah, seperti:
memindai file kamus
dan tidak ada yang terjadi, dari perintah-perintah di makro hanya j
dijalankan, yaitu kursor bergerak ke bawah baris, tetapi tidak ada perintah penyelesaian berjalan.
Apakah mungkin untuk menggunakan penyelesaian mode penyisipan di makro, dan jika demikian, bagaimana saya bisa melakukannya?
autocompletion
macro
the_velour_fog
sumber
sumber
<C-p>
langkah Anda ... ketika saya melakukannya di vim saya, itu hanya memberikan pesanback at original
- tidak memilih item terakhir .. Saya menggunakan tombol panah dua kali untuk memilih kata terakhir (kasus sayaazures
), tekan enter dan laluEsc+j+q
.. itu kemudian bekerja dengan sangat baik dalam menjalankan makroset completeopt=longest,menuone,preview
nya yanglongest
pilihan yang menyebabkan<C-p>
untuk segera memasukkan. Jika saya menghapuslongest
daricompleteopt
string, saya mendapatkan perilaku yang sama seperti Anda. Juga, ya tombol panah berfungsi! terima kasih (saya lupa Anda dapat menggunakannya untuk menavigasi daftar penyelesaian):set completeopt=
dana<c-x><c-k><esc>j
sebagai makro Anda.Jawaban:
EDIT : Benar-benar Anda setelah kamus selesai; Anda tidak perlu memasukkan mode (mode Ctrl + X) untuk melakukan ini. Ketika Anda menemukan, itu membuat bekerja dengan makro benar-benar menyakitkan. Skrip di bawah ini dapat digunakan untuk menyelesaikan kamus tanpa memasukkan mode, sehingga Anda dapat dengan mudah mengulanginya di dalam makro.
Tambahkan kode di bawah ini ke
.vimrc
file Anda , tutup dan buka kembali jendela vim apa pun untuk mendapatkan fungsi baru, dan kemudian rekam diri Anda secara bergantian dengan menekan<C-k>
untuk melakukan penyelesaian danj
untuk pindah ke baris berikutnya. Saya menambahkan tanda centang untuklongest
opsi dan jika dinonaktifkan, ia memilih entri acak menggunakan waktu acak sistem. Jika menemukanlongest
opsi, itu secara manual mencari entri yang paling cocok dari kamus, dan memasukkannya.Jika Anda tidak menyukai
<C-k>
pemetaan, silakan mengubahnya sesuai keinginan Anda. Ini harus bekerja dengan pemetaan apa pun yang Anda suka.Juga, perintah untuk mengembalikan ekspresi pemetaan untuk mengevaluasi menambahkan
\<esc>
karakter ke akhir sehingga kita meninggalkan mode penyisipan secara otomatis setelah setiap penyisipan, dan sebuah0cw
di depan untuk masuk ke mode penyisipan untuk memulai dan memastikan kita menimpa seluruh kata benar. Bergantung pada perilaku persis yang Anda inginkan (jika kata-kata Anda tidak bagus di depan setiap baris) Anda dapat menggunakanbcw
sebagai gantinya untuk menemukan kata awal yang sebenarnya. Namun, kemudian Anda akan melihat beberapa keanehan ketika kembali ke kata-kata yang memulai garis tersebut. Mungkin ada perintah yang lebih maju untuk mengabaikan akhir baris dan melakukan keduanya sekaligus, tetapi saya tidak dapat menemukannya.Selain itu, tidak akan sulit untuk memperluas logika di sini untuk membuat pemetaan alternatif (menggunakan, misalnya, parameter fungsi) yang melakukan fungsi apa pun yang disediakan oleh mode insert. Saya akan dengan senang hati membantu dengan persyaratan seperti itu dan memperbarui skrip ini karena saya punya waktu.
sumber
sleep
perintah itu juga?completeopt
seperti yang dijelaskan di komentar (sekali lagi, bukan oleh saya). sunting : Ups,'longest'
diperlukan untukctrl-p
langkah: tidakctrl-y
. Masih langkah-langkah yang dijelaskan oleh penanya bekerja untuk sayavim -Nu NONE
dengancompleteopt
diedit.