Bagaimana Anda menggunakan kembali pemilihan mode visual?

164

Seringkali saat mengedit kode, saya akan memilih blok dalam mode visual dan melakukan pencarian dan mengganti blok. Namun, setelah saya melakukan perubahan, ia meninggalkan mode visual. Bagaimana Anda menemukan dan mengganti yang baru pada pilihan yang sama?

labirin
sumber
Yah saya menemukan satu cara, tapi agak rumit:: '<,'> s / old / new / g Ada cara untuk melakukan ini tanpa harus mengetikkan '<,'>?
labirin

Jawaban:

244

Anda dapat memilih kembali area visual yang dipilih terakhir gv.

Heptite
sumber
4
Luar biasa! @Heptite cara menemukan perintah ini sendiri tanpa Stackoverflow?
Pencakar langit
6
@skywinder: help gv
Heptite
4
@Heptite: Saya tidak yakin apakah Anda sedang marah-marah di sini, tetapi perintah itu menunjukkan kepada Anda apa: gv tidak begitu Anda mengetahuinya. Tetapi bagaimana jika saya tidak melakukannya ? Ajari seorang pria untuk memancing dan semua itu.
Ben Thul
@ BenTul: Saya pikir saya salah paham pertanyaannya. Saya tahu tentang banyak fitur Vim hanya dengan membaca sebagian besar dokumentasi dari waktu ke waktu, dimulai dengan " :help".
Heptite
2
:help select-visualharus mengarahkan Anda ke manual yang benar di dalam vim @skywinder.
14

gv jelas merupakan metode tercepat (gunakan pilihan terakhir), tetapi jika Anda ingin wilayah pilihan tersimpan yang stabil (atau beberapa), Anda selalu dapat membuat makro.

Katakanlah saya ingin menyimpan pilihan metode saya saat ini, yang berjalan dari baris 25-35. Saya bisa membuat makro yang memilih seluruh metode dengan mengetik

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording

Saya kemudian bisa mendapatkan pilihan itu kembali dengan mengetik @a(jalankan makro di register a). Ulangi dengan register, garis, atau bagian mana pun dari garis, yang Anda inginkan. Tentunya jika Anda membuat perubahan pada file, pilihannya juga dapat berubah, jadi Anda mungkin ingin mempertimbangkan untuk menggunakan tanda alih-alih nomor baris "hardcoding".

AlexMA
sumber
zmuntuk memasukkan yang perlu Anda ketahui nomor baris. Saya pikir lebih baik untuk mendefinisikan dua tanda dan kemudian menggunakan: 'a,' b untuk beroperasi pada kisaran di antara mereka (atau ganti 'dengan backticks jika ingin granularity dalam satu garis)
sillyMunky
Ya, nomor baris itu bodoh - Saya hanya menggunakannya sebagai contoh untuk cara membuat makro seleksi. Menggunakan serangkaian tanda adalah ide yang menarik ...
AlexMA
6

gvberfungsi dengan baik untuk memulihkan pilihan terakhir. Tetapi kadang-kadang seseorang perlu sedikit lebih banyak.

Jika Anda membutuhkan catatan yang lebih persisten, lihat plugin ini yang sedang kami kerjakan di GitHub.

VisualMarks memungkinkan Anda untuk menyimpan dan mengembalikan area yang dipilih secara visual seperti halnya Anda menyimpan dan menandai lokasi tertentu dalam file Anda m. Setelah menginstal, dan dengan opsi default, gunakan:

ma

dalam mode visual untuk menyimpan pilihan Anda saat ini untuk ditandai a, lalu

<a

dalam mode normal untuk kembali ke pilihan ini.

iago-lito
sumber
Wow, kedengarannya sangat keren. Saya harus mencoba plugin itu! Omong-omong, bisakah VisualMark ini bertahan dengan mkview seperti yang kamu bisa dengan tanda?
labirin
@ labirin Saya tidak tahu mkviewtapi .. Saya kira ya karena tanda disimpan dalam file terpisah dan .. Saya sarankan Anda tetap mencoba :) Jika mereka tidak bertahan seperti yang Anda inginkan, kami akan senang menerima fitur Anda minta pada GitHub dan coba memprosesnya.
iago-lito
1

Misalkan saya ingin mengganti selamat tinggal dengan Hello dan kode di bawah ini dipilih:

public static void main(String[] args){
    System.out.println("Goodbye World");
}

Saya akan mengetik :s/Goodbye/Hello/dan vim akan mengganti semua contoh GoodbyedenganHello

Ini hanyalah kombinasi dari ekspresi reguler vim dan pilihan mode visual. Ketika Anda memilih, seharusnya isi ulang otomatis'<,'>

Scott Nguyen
sumber
1
Maaf, bukan itu yang saya tanyakan. Yang saya tanyakan adalah bagaimana Anda menggunakan kembali pilihan untuk melakukan pencarian lain dan mengganti pada kisaran yang sama seperti yang dipilih sebelumnya?
labirin
1
Setelah mengganti, Anda akan keluar dari mode visual. ketik gvdan mode visual Anda akan kembali ke keadaan pemilihan sebelumnya.
Scott Nguyen