“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"?

Yktula
sumber
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.

Xavier T.
sumber
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.

Rob Wells
sumber
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 )
iamnotsam
sumber
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
17

Anda mungkin mencari nkuncinya.

sam hocevar
sumber
16

Mengetik nakan pergi ke pertandingan berikutnya.

Jim Deville
sumber
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.

Micah Elliott
sumber
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.

bass chuck
sumber
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