Simpan tindakan terakhir (.) Di makro

9

Gunakan Kasing

Saya dalam mode normal. Saya tidak secara eksplisit berpikir tentang merekam makro, tetapi saya membuat satu perubahan perintah. Saya sekarang dapat mengulangi tindakan ini dengan menggunakan dot.

Saya sekarang menyadari itu adalah tindakan yang berguna untuk menyimpan dalam makro untuk digunakan nanti daripada mengetik seluruh perintah setiap waktu. Saya bisa menghadiri semua perubahan yang membutuhkan perintah ini sekarang dengan menggunakan titik, atau saya dapat melanjutkan dengan mengedit dan menggunakan perintah ini nanti dengan menyimpannya di makro.

Yang terakhir adalah apa yang ingin saya lakukan, tetapi cara termudah yang dapat saya pikirkan untuk melakukannya adalah tidak mudah - membatalkan perubahan saya, mulai merekam makro dan mengetik ulang perintah untuk membuat perubahan yang diperlukan dan berhenti merekam makro.

Apa yang saya sudah coba sejauh ini:

Merekam titik dalam makro tidak berfungsi karena merekam titik dan bukan perubahan yang dilakukan titik. (Misalnya, katakanlah perintah yang disimpan di titik adalah d5wJika Anda mulai merekam makro dan melakukan tindakan melalui. Berharap bahwa itu akan menghapus 5 kata setiap kali Anda menjalankan makro, maka itu tidak akan terjadi. Lain kali Anda menjalankan makro itu akan melakukan dot dan bukan perintah d5w. Ini berarti bahwa jika Anda membuat perubahan lain setelah merekam makro - katakan hapus 3 kata menggunakan d3wdan itu adalah perubahan terakhir yang Anda lakukan, maka ketika Anda menjalankan makro itu akan menghapus 3 kata-kata dan bukan 5, karena itu hanya berjalan .)

Peeyush Kushwaha
sumber
Saya berusaha memahami apa yang ingin Anda lakukan, dan mengapa Anda tidak melakukan apa pun dengan makro.
1
@DrEval OP menyadari setelah melakukan perintah mode normal bahwa mereka seharusnya menyimpannya di makro, dan tidak ingin harus mengetiknya lagi saat merekam makro.
Rich

Jawaban:

2

Vim tidak menyimpan riwayat perintah mode normal Anda. Jika Anda ingin menyimpan riwayat mode normal Anda, Anda dapat menggunakan yang berikut ini untuk menyimpannya ke file: https://vi.stackexchange.com/a/587/13848

Perintah mode normal biasanya pendek, jadi orang cukup mengetiknya dalam mode normal dan tidak mencoba membuat makro. Namun, jika Anda ingin membuat makro dari perintah mode normal, Anda dapat mengubahnya menjadi Experintah mode dan kemudian menyimpannya menjadi makro seperti yang ditunjukkan @wmmso. Anda dapat melakukan ini dengan menggunakan normperintah. Jadi jika Anda ingin menghapus 2 kata mulai dari posisi kursor saat ini, dan gunakan perintah mode normal dalam Exmode digunakan :norm d2w. (Ref: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , Jalankan perintah normal di atas jangkauan )

Lebih baik menggunakan Experintah mode jika itu adalah perintah yang rumit, karena memungkinkan Anda untuk mengetikkan perintah lengkap dalam buffer, pastikan itu benar dan menyimpannya dalam sejarah baris perintah.

Sekarang setelah Anda memiliki perintah mode normal dalam mode ex, Anda juga dapat menelusuri perintah seperti riwayat menggunakan q:, dan kemudian menyalinnya ke register menggunakan "ay$, sementara pada baris berisi baris perintah yang ingin Anda simpan ke makro. Kemudian ketika Anda ingin menjalankan makro, Anda bisa menjalankannya menggunakan@a

alpha_989
sumber
Bagaimana Anda menulis perintah mode normal di baris perintah? misalnya d2w?
Peeyush Kushwaha
Menambahkan beberapa klarifikasi dalam jawabannya .. Apakah itu membantu?
alpha_989
0

salin konten register ":" (yang baru saja Anda lakukan) ke register lain, mis., daftarkan:

:let @a = @:

Anda dapat menjalankannya lagi menggunakan

@a
wmm
sumber
Ini tidak berfungsi untuk saya dalam vim 7.4. Tampaknya register :berisi perintah yang dieksekusi terakhir :command-name-goes-herealih-alih perintah mode normal sepertid2w
Peeyush Kushwaha
2
Solusi itu hanya berfungsi untuk perintah ex, bukan perintah mode normal. Saya tidak mengetahui register yang memegang perintah mode normal terakhir. Akan bermanfaat
Steve