Saya ingin membuat daftar pertandingan, ketika saya menekan:
/example
sehingga saya melihat di mana semua pertandingan sekaligus.
Saya ingin membuat daftar pertandingan, ketika saya menekan:
/example
sehingga saya melihat di mana semua pertandingan sekaligus.
Jawaban:
" put in your ~/.vimrc file
" START search related configs and helps
"
" ignore case when searching
set ignorecase
" search as characters are entered, as you type in more characters, the search is refined
set incsearch
" highlight matches, in normal mode try typing * or even g* when cursor on string
set hlsearch
" yank those cheat commands, in normal mode type q: than p to paste in the opened cmdline
" how-to search for a string recursively
" :grep! "\<doLogErrorMsg\>" . -r
"
" how-to search recursively , omit log and git files
" :vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`
" :vimgrep /srch/ `find . -type f -name '*.pm' -o -name '*.pl'`
"
" how-to search for the "srch" from the current dir recursively in the shell
" vim -c ':vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`'
"
" how-to highlight the after the search the searchable string
" in normmal mode press g* when the cursor is on a matched string
" how-to jump between the search matches - open the quick fix window by
" :copen 22
" how-to to close the quick fix window
" :ccl
" F5 will find the next occurrence after vimgrep
map <F5> :cp!<CR>
" F6 will find the previous occurrence after vimgrep
map <F6> :cn!<CR>
" F8 search for word under the cursor recursively , :copen , to close -> :ccl
nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>
" omit a dir from all searches to perform globally
set wildignore+=**/node_modules/**
" use perl regexes - src: http://andrewradev.com/2011/05/08/vim-regexes/
noremap / /\v
"
" STOP search related configs and helps
:g//p
Dalam bentuk yang lebih panjang:
:global/regular-expression/print
Anda dapat meninggalkan pola / regex dan Vim akan menggunakan kembali istilah pencarian sebelumnya.
Trivia: Alat grep dinamai sesuai urutan perintah ini.
:g//
- karena p (rint) adalah tindakan default, Anda juga dapat membiarkannya.
:g/
bahkan lebih pendek!
--context 9
?
:%s/regular-expression//gn
Ini akan menghasilkan sesuatu seperti ini:X matches on Y lines
Anda juga bisa melakukan:
g/pattern/#
yang akan mencetak pola yang Anda inginkan dan jumlah baris.
#
tidak diperlukan. Ini menunjukkan nomor baris secara default
jika Anda ingin melihat daftar ini dan beralih cepat di antara pertandingan, pertimbangkan untuk menggunakan
:vimgrep example %
atau
:grep example %
Ini akan mengisi "daftar kesalahan" dengan semua kecocokan sehingga Anda dapat menggunakan :copen
daftar semuanya di buffer quickfix, tekan enter pada baris tertentu untuk melompat ke kecocokan itu, atau gunakan perintah seperti :cn
dan :cp
untuk bolak-balik.
untuk penjelasan lengkap, lihat jawaban saya untuk pertanyaan serupa
E499: Empty file name for '%' or '#', only works with ":p:h"
pada MacVim 8.1
Baru saja mempelajari yang baru: the Location List
!
Ketik :lvim foo %
untuk mencari foo
di file saat ini dan masukkan semua kecocokan yang berisi foo
ke dalam daftar lokasi .
Ketik :lopen
untuk membuka daftar lokasi di jendela quickfix, yang dapat dinavigasi sepenuhnya seperti biasa.
Gunakan :lnext
/ :lprevious
untuk melalui daftar (gunakan tpope / pemetaan tanpa gangguan untuk pengalaman terbaik)
Kemungkinan lain adalah dengan menggunakan perintah pencarian file yang disertakan.
[I
Ini akan mencantumkan semua kemunculan kata di bawah kursor. Ini mungkin lebih dari yang Anda butuhkan, karena itu juga akan mencari file apa pun yang disertakan dalam file saat ini.
Tetapi hal yang menyenangkan tentang perintah ini adalah bahwa tampilan hasil pencarian juga menunjukkan hitungan jumlah pertandingan, selain nomor baris dari setiap pertandingan.
:help include-search
untuk melihat banyak varian.
Catatan tentang
:g//p
Ini dapat dikurangi lebih lanjut menjadi
:g//
karena, seperti yang dikatakan orang lain, c (rint) adalah tindakan default.
[I
dengan konteks, seperti pada grep --context 9
?
Anda bisa mendapatkan quickfix
jendela yang bagus dengan kecocokan dari pola pencarian Anda saat ini
:vim // %
:copen
sangat berguna jika sebelumnya Anda membuat pola pencarian yang kompleks menggunakan just /pattern
Sunting : baru tahu ini juga berfungsi untuk semua buffer terbuka
:bufdo vimgrepadd // %
:copen
Menggunakan :set hlsearch
akan menyorot semua kecocokan dengan warna kuning memungkinkan Anda untuk memindai file dengan mudah untuk kecocokan. Itu mungkin bukan yang Anda inginkan, setelah mencari,: g // p akan memberi Anda kecocokan yang terdaftar
:nohl
untuk menghapus sorotan saat Anda tidak membutuhkannya lagi.
Untuk menguraikan ini ... daripada
/example
:g//p
Anda juga bisa menulis langsung
:g/example/p
atau, karena p (rint) adalah aksi default untuk perintah: g (lobal), ini dapat disingkat menjadi
:g/example
Dan alih-alih p (rint), tindakan lain dimungkinkan, misalnya d (elete). Lihat: bantuan: global
g/pattern
Jika sudah :set number
, perintah di atas juga menampilkan nomor baris.
Jika belum :set number
, maka
g/pattern/#
akan menampilkan nomor baris.
Saya telah menulis sepotong kode untuk ini. Ini sebenarnya menghindari masalah di vimgrep
. Ia bekerja bahkan dengan file tanpa nama. Dan lebih mudah digunakan.
function! Matches(pat)
let buffer=bufnr("") "current buffer number
let b:lines=[]
execute ":%g/" . a:pat . "/let b:lines+=[{'bufnr':" . 'buffer' . ", 'lnum':" . "line('.')" . ", 'text': escape(getline('.'),'\"')}]"
call setloclist(0, [], ' ', {'items': b:lines})
lopen
endfunction
Ketika Anda menyebutnya dengan pola, itu membuka jendela lokasi dengan semua kecocokan.
Ini bisa menjadi perintah
command! -nargs=1 Mat call Matches(<f-args>)
Jadi yang perlu Anda lakukan hanyalah mengetik :Mat pattern
Saya juga menggunakan pemetaan berikut untuk mendapatkan kecocokan dari pemilihan visual saat ini.
vnoremap Y "xy:call Matches(@x)<CR>
node_modules
? - - Bagaimana regex perl mengubah fungsi default Vim? - - Berikut ini adalah bagaimana saya merancang pencarian saya terhadap file .tex askubuntu.com/a/789769/25388 Alangkah baiknya belajar dari Anda bagaimana memperbaikinya. Itu tidak begitu intuitif jadi saya sendiri sering lupa logikanya.