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"?
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.
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.
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()"
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.
/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.
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.
"Ketika kami melakukan pencarian, Vim memindai maju dari posisi kursor saat ini, berhenti pada pertandingan pertama yang ditemukannya." Seperti yang ditunjukkan oleh Vim Praktis.
:help
.:help /
menunjukkan bantuan tentang pencarian, dan jawaban untuk pertanyaan Anda muncul sedikit ke bawah halaman.Jawaban:
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
vimtutor
perintah dari terminal Anda, yang akan memulai tutorial dari perintah Vim dasar.Nasihat Rob Wells tentang *dan #juga sangat relevan.
sumber
n
seperti kebanyakan operator vim dapat diawali dengan angka untuk mengulangi perintah. Jika Anda mengetiknya10n
akan pindah ke hasil ke-10 (setelah yang pertama). Ini juga berfungsi untuk semua operator gerakan yang suka3j
turun 3 baris.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.
sumber
n
danN
membawa 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.)/Func
, minta saya untukSomeFunc
dan kemudian tekan '*' untuk pergi ke contoh berikutnyaSomeFunc
ketika contoh berikutnyaFunc
adalah diSomeOtherFunc
./\<foo\>
tidak cocok"className::foo()"
Ketika saya mulai, saya perlu menonton demo .
Cara mencari di Vim
/
sumber
*
salah. Yaitu fileaa aaa
. Cari/aa
, Anda harus mencocokkan. Pada kecocokan pertama,*
perubahan akan mengubah istilah pencarian.Anda mungkin mencari nkuncinya.
sumber
Mengetik nakan pergi ke pertandingan berikutnya.
sumber
Seperti dibahas, ada beberapa cara untuk mencari:
plus, menavigasi prev / next dengan Ndan n.
Anda juga dapat mengedit / mengingat riwayat pencarian Anda dengan menarik prompt pencarian dengan
/
dan kemudian siklus denganC-p
/C-n
. Yang lebih bermanfaat adalahq/
, yang membawa Anda ke jendela tempat Anda dapat menavigasi riwayat pencarian.Juga untuk dipertimbangkan adalah yang paling penting
'hlsearch'
(ketik:hls
untuk 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: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:Saya dengan mudah mengingat yang ini
z
karena saya biasa mengetik terus-menerus/zz<CR>
(yang merupakan tipe cepat yang jarang terjadi) untuk menghapus sorotan saya. Tapi:noh
pemetaannya jauh lebih baik.sumber
q/
, Anda juga harus bermain dengannyaq:
. Keduanya sangat berguna! (Namun, tidak benar-benar terkait dengan pertanyaan ini.)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.
sumber