“Temukan selanjutnya” di Vim


536

Untuk mencari maju di Vim cake, saya mengetik /cake, tetapi kursor melompat ke pertandingan pertama ketika saya menekan kembali. Apakah ada perintah Vim analog dengan "temukan selanjutnya"?


33
Biasakan menggunakan :help. :help /menunjukkan bantuan tentang pencarian, dan jawaban untuk pertanyaan Anda muncul sedikit ke bawah halaman.
Chris Morgan

Jawaban:


877

Ini nuntuk selanjutnya dan Nsebelumnya.

Dan jika Anda menggunakan pencarian terbalik dengan ?(misalnya, ?cake) alih-alih /, itu sebaliknya.

Jika diinstal pada sistem Anda, Anda harus mencoba menjalankan vimtutorperintah dari terminal Anda, yang akan memulai tutorial dari perintah Vim dasar.

Nasihat Rob Wells tentang *dan #juga sangat relevan.


1
lihat juga indeks pencarian plugin vim.org/scripts/script.php?script_id=1682
SergioAraujo

Apakah ada cara untuk melompat ke pertandingan berikutnya (bukan di baris saat ini)?
user13107

@ user13107: n dan N bekerja pada seluruh buffer / file. Anda tidak terbatas pada garis saat ini.
Xavier T.

@ XavierT. ide apa pun, bagaimana saya bisa melompati sejumlah hasil pencarian tetap. Maksud saya misalnya melompat ke garis pencocokan 10
GP cyborg

@ GPcyborg: nseperti kebanyakan operator vim dapat diawali dengan angka untuk mengulangi perintah. Jika Anda mengetiknya 10nakan pindah ke hasil ke-10 (setelah yang pertama). Ini juga berfungsi untuk semua operator gerakan yang suka 3jturun 3 baris.
Xavier T.

211

Pintasan paling berguna di Vim, IMHO, adalah *kuncinya.

Letakkan kursor pada kata dan tekan *tombol dan Anda akan melompat ke contoh kata berikutnya.

The #key melakukan hal yang sama, tetapi melompat ke contoh sebelumnya kata.

Ini benar-benar penghemat waktu.


6
Dan jika itu tidak jelas, ndan Nmembawa Anda maju dan mundur melalui *pertandingan setelah Anda menekan *. (Atau Anda dapat terus menekan *untuk maju atau #mundur, tetapi menggunakan tombol bergeser itu umumnya kurang optimal.)
Herbert Sitz

3
@Herbert, sebenarnya n dan N tidak membawa Anda "maju" dan "mundur" resp. Seperti @Xavier catat di atas, n adalah berikutnya dan N adalah sebelumnya . Kontrol pencarian maju dan mundur dilakukan dengan menyatakan pencarian dengan tombol '/' dan '?' atau dengan tombol '*' dan tombol '#'.
Rob Wells

Saya tidak berpikir * apakah itu berguna ... sebagian besar waktu saya mencari sebuah fragmen kata (misalnya, bagian dari nama fungsi). Saya tidak mau /Func, minta saya untuk SomeFuncdan kemudian tekan '*' untuk pergi ke contoh berikutnya SomeFuncketika contoh berikutnya Funcadalah di SomeOtherFunc.
weberc2

Lebih buruk lagi, dengan C ++ saya merasa itu tidak berubah dari metode pemanggilan ke implementasi metode karena /\<foo\>tidak cocok"className::foo()"
puk

84

Ketika saya mulai, saya perlu menonton demo .

Cara mencari di Vim

  1. Tipe /
  2. ketik istilah pencarian mis. "var"
  3. tekan enter
  4. untuk contoh selanjutnya tekan n(untuk sebelumnya N )

2
Mengetik *salah. Yaitu file aa aaa. Cari /aa, Anda harus mencocokkan. Pada kecocokan pertama, *perubahan akan mengubah istilah pencarian.
Bernhard

1
n bukan 'berikutnya' tetapi "ulangi pencarian terakhir". Jadi masuk? Var akan mulai mencari ke atas dari posisi Anda saat ini untuk 'var'. Dan 'N' sebenarnya "ulangi pencarian terakhir di arah yang berlawanan" jadi untuk contoh ini yang akan mencari ke bawah untuk 'var' dari posisi saat ini.
Rob Wells



13

Seperti dibahas, ada beberapa cara untuk mencari:

/pattern
?pattern
* (and g*, which I sometimes use in macros)
# (and g#)

plus, menavigasi prev / next dengan Ndan n.

Anda juga dapat mengedit / mengingat riwayat pencarian Anda dengan menarik prompt pencarian dengan /dan kemudian siklus dengan C-p/ C-n. Yang lebih bermanfaat adalah q/, yang membawa Anda ke jendela tempat Anda dapat menavigasi riwayat pencarian.

Juga untuk dipertimbangkan adalah yang paling penting 'hlsearch'(ketik :hlsuntuk mengaktifkan). Ini membuatnya lebih mudah untuk menemukan banyak contoh dari pola Anda. Anda bahkan mungkin ingin membuat korek api Anda ekstra cerah dengan sesuatu seperti:

hi Search ctermfg=yellow ctermbg=red guifg=...

Tapi kemudian Anda mungkin menjadi gila dengan korek kuning konstan di seluruh layar Anda. Jadi, Anda akan sering menemukan diri Anda menggunakan :noh. Ini sangat umum sehingga pemetaan dilakukan secara berurutan:

nmap <leader>z :noh<CR>

Saya dengan mudah mengingat yang ini zkarena saya biasa mengetik terus-menerus /zz<CR>(yang merupakan tipe cepat yang jarang terjadi) untuk menghapus sorotan saya. Tapi :nohpemetaannya jauh lebih baik.


2
Jika Anda merasa terinspirasi oleh q/, Anda juga harus bermain dengannya q:. Keduanya sangat berguna! (Namun, tidak benar-benar terkait dengan pertanyaan ini.)
Micah Elliott

Terima kasih, Mikha. Saya sudah tahu tentang 'q:', meskipun saya tidak menggunakannya sebanyak itu. Tapi 'q /' sepenuhnya terlewatkan dalam pendidikan vim saya, dan saya pikir akan banyak digunakan.
Stabledog

2

Jika Anda menekan Ctrl+ Entersetelah Anda menekan sesuatu seperti "/ wordforsearch", maka Anda dapat menemukan kata "wordforsearch" di baris saat ini. Kemudian tekan nuntuk pertandingan berikutnya; tekan Nuntuk pertandingan sebelumnya.


1
"Ketika kami melakukan pencarian, Vim memindai maju dari posisi kursor saat ini, berhenti pada pertandingan pertama yang ditemukannya." Seperti yang ditunjukkan oleh Vim Praktis.
bass chuck
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.