Ulangi perintah mode normal terakhir, termasuk bergerak, di Vim

25

Dalam Vim, with ., saya dapat mengulangi perintah mode normal terakhir; sebagai contoh:

dd.

menghapus garis dua kali.
Tapi, kalau saya mengetik

5j.

kursor tidak bergerak 10 baris ke bawah. Bagaimana cara saya mengulang perintah mode normal terakhir, terutama yang bergerak?

juanpablo
sumber

Jawaban:

14

vimsayangnya tidak melakukan ini. Yang terbaik yang dapat Anda lakukan adalah menginstal plugin repmo.vim , yang mengulangi perintah gerakan yang memiliki hitungan.

Paul
sumber
11

itu bisa dilakukan bahkan dalam vim vanila, tetapi penerapannya tergantung pada kasus penggunaan Anda, yaitu. seberapa sering Anda harus mengulanginya, karena perlu beberapa kali penekanan tombol agar dapat diulang.


Opsi 1: ubah menjadi operasi mode perintah

menggunakan bergerak ke bawah 5 baris sebagai contoh, Anda dapat melakukan:

  1. masukkan :norm 5j, itu akan memindahkan kursor ke bawah 5 baris
  2. gunakan @:untuk mengulangi gerakan

:norm singkatan normal, string berikut dianggap sebagai penekanan tombol Anda dalam mode normal


Opsi 2: Gunakan makro

  1. qa(simpan makro ke dalam register a, Anda dapat memilih register sendiri seperti qb, qc)
  2. 5j
  3. q (selesai merekam makro)
  4. @auntuk mengulang operasi yang direkam (ganti adengan nama register yang Anda pilih, mis. @b, @c)

makro membutuhkan lebih banyak kekuatan spiritual untuk mengatur tetapi itu lebih berulang dalam arti bahwa Anda dapat menyimpan beberapa operasi dalam register yang berbeda tanpa ditimpa oleh operasi terbaru.

JK ABC
sumber
7

Sebenarnya .mengulangi perubahan terakhir , bukan perintah mode normal terakhir. Seperti kata Paul, Anda akan membutuhkan plugin untuk memungkinkan Anda mengulangi gerakan.

Lihat " :help .".

Heptite
sumber
4

Anda dapat mengulangi perubahan dengan .. Gerakan dapat diulang dengan ;perintah. Perintah ini tampaknya baru dan melakukan hal yang mirip dengan skrip repmo.vim yang disebutkan dalam jawaban lain.

Misalnya, untuk pindah ke yang berikutnya berikutnya c, tekan 2fc. Kemudian untuk melakukannya lagi, ketikkan saja ;.

tiga puluh tiga puluh
sumber
11
;bukan hal baru. Ini adalah perintah vi standar. Vi ingat jenis dan sasaran karakter (tapi argumen tidak numerik) yang terakhir f/ F/ t/ Tgerak dan ;mengulangi itu. Namun, itu tidak mengulangi gerakan lain.
pyrocrasty
Ini mencapai apa yang ingin saya lakukan! Terima kasih. dan terima kasih @pyrocrasty untuk klarifikasi!
Paul
0

Anda dapat memilih garis yang ingin Anda ubah dan menjalankan perintah titik normal terakhir

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
SergioAraujo
sumber