ฉันต้องการแสดงรายการการแข่งขันเมื่อฉันกด:
/example
เพื่อให้ฉันเห็นว่าการแข่งขันทั้งหมดอยู่ที่ใดในคราวเดียว
ฉันต้องการแสดงรายการการแข่งขันเมื่อฉันกด:
/example
เพื่อให้ฉันเห็นว่าการแข่งขันทั้งหมดอยู่ที่ใดในคราวเดียว
คำตอบ:
" 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
ในรูปแบบที่ยาวขึ้น:
:global/regular-expression/print
คุณสามารถละทิ้งรูปแบบ / regex และกลุ่มจะใช้คำค้นหาก่อนหน้านี้ซ้ำ
Trivia: grepเครื่องมือที่ได้รับการตั้งชื่อตามลำดับคำสั่งนี้
:g//
- เนื่องจาก p (rint) เป็นการกระทำเริ่มต้นคุณสามารถปล่อยให้มันออกไปได้เช่นกัน
:g/
ยิ่งสั้น!
--context 9
?
:%s/regular-expression//gn
มันจะสร้างบางสิ่งบางอย่างตามบรรทัดเหล่านี้:X matches on Y lines
คุณยังสามารถทำสิ่งต่อไปนี้
g/pattern/#
ที่จะพิมพ์รูปแบบที่คุณต้องการและจำนวนบรรทัด
#
ไม่จำเป็นต้องใช้ มันแสดงหมายเลขบรรทัดโดยค่าเริ่มต้น
หากคุณต้องการดูรายการนี้และข้ามไปมาระหว่างการแข่งขันอย่างรวดเร็วให้พิจารณาใช้
:vimgrep example %
หรือ
:grep example %
การดำเนินการนี้จะเติมข้อมูล "รายการข้อผิดพลาด" พร้อมกับรายการที่ตรงกันทั้งหมดเพื่อให้คุณสามารถใช้:copen
เพื่อแสดงรายการทั้งหมดในบัฟเฟอร์แก้ไขด่วนกด Enter ที่บรรทัดใดบรรทัดหนึ่งเพื่อข้ามไปยังรายการที่ตรงกันหรือใช้คำสั่งเช่น:cn
และ:cp
เพื่อย้อนกลับไปมา
สำหรับคำอธิบายอย่างละเอียดโปรดดูคำตอบของฉันสำหรับคำถามที่คล้ายกัน
E499: Empty file name for '%' or '#', only works with ":p:h"
ใน MacVim 8.1
เพิ่งเรียนรู้ใหม่: Location List
!
พิมพ์:lvim foo %
เพื่อค้นหาfoo
ในแฟ้มปัจจุบันและป้อนการแข่งขันทั้งหมดที่มีfoo
เข้ามาในรายการสถานที่
พิมพ์:lopen
เพื่อเปิดรายการตำแหน่งในหน้าต่างแก้ไขด่วนซึ่งสามารถนำทางได้อย่างสมบูรณ์ตามปกติ
ใช้:lnext
/ :lprevious
เพื่อผ่านรายการ (ใช้tpope / unimpaired mappings เพื่อประสบการณ์ที่ดีที่สุด)
ความเป็นไปได้อีกประการหนึ่งคือการใช้คำสั่งรวมไฟล์ค้นหา
[I
ซึ่งจะแสดงรายการที่เกิดขึ้นทั้งหมดของคำที่อยู่ใต้เคอร์เซอร์ อาจมากกว่าที่คุณต้องการเนื่องจากจะค้นหาไฟล์ที่รวมอยู่ในไฟล์ปัจจุบันด้วย
แต่สิ่งที่ดีเกี่ยวกับคำสั่งนี้ก็คือการแสดงผลการค้นหายังแสดงจำนวนการแข่งขันนอกเหนือจากหมายเลขบรรทัดของการแข่งขันแต่ละรายการ
:help include-search
เพื่อดูรูปแบบต่างๆมากมาย
หมายเหตุเกี่ยวกับ
:g//p
ซึ่งสามารถลดลงได้อีกถึง
:g//
เพราะอย่างที่คนอื่นพูด p (rint) เป็นการกระทำเริ่มต้น
[I
บริบทเช่นบน grep --context 9
?
คุณจะได้quickfix
หน้าต่างที่สวยงามพร้อมการจับคู่จากรูปแบบการค้นหาปัจจุบันของคุณ
:vim // %
:copen
มีประโยชน์มากหากคุณเคยสร้างรูปแบบการค้นหาที่ซับซ้อนโดยใช้เพียง /pattern
แก้ไข : เพิ่งค้นพบว่าสิ่งนี้ใช้ได้กับบัฟเฟอร์ที่เปิดอยู่ทั้งหมด
:bufdo vimgrepadd // %
:copen
การใช้:set hlsearch
จะเน้นการแข่งขันทั้งหมดเป็นสีเหลืองช่วยให้คุณสแกนไฟล์เพื่อหาการแข่งขันได้อย่างง่ายดาย นั่นอาจไม่ใช่สิ่งที่คุณต้องการหลังจากค้นหา: g // p จะให้รายการที่ตรงกัน
:nohl
เพื่อล้างไฮไลต์เมื่อคุณไม่ต้องการอีกต่อไป
เพื่ออธิบายรายละเอียดเกี่ยวกับเรื่องนี้ ... แทนที่จะเป็น
/example
:g//p
คุณยังสามารถเขียนโดยตรง
:g/example/p
หรือเนื่องจาก p (rint) เป็นการกระทำเริ่มต้นสำหรับคำสั่ง: g (lobal) จึงสามารถย่อให้สั้นลงได้
:g/example
และแทนที่จะเป็น p (rint) สามารถดำเนินการอื่น ๆ ได้เช่น d (elete) โปรดดู: help: global
g/pattern
หากคุณมี:set number
คำสั่งด้านบนจะแสดงหมายเลขบรรทัดด้วย
หากคุณไม่ได้:set number
แล้ว
g/pattern/#
จะแสดงหมายเลขบรรทัด
ฉันได้เขียนโค้ดสำหรับสิ่งนี้แล้ว มันช่วยหลีกเลี่ยงปัญหาในvimgrep
. ใช้งานได้แม้กับไฟล์ที่ไม่มีชื่อ และใช้งานง่ายกว่า
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
เมื่อคุณเรียกมันด้วยรูปแบบระบบจะเปิดหน้าต่างตำแหน่งที่ตรงกันทั้งหมด
นี่อาจเป็นคำสั่ง
command! -nargs=1 Mat call Matches(<f-args>)
ดังนั้นสิ่งที่คุณต้องทำคือพิมพ์ :Mat pattern
ฉันยังใช้การแมปต่อไปนี้เพื่อจับคู่การเลือกภาพปัจจุบัน
vnoremap Y "xy:call Matches(@x)<CR>
Ctrl-f เพื่อแสดงรายการผลการค้นหาทั้งหมด:
nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>
node_modules
? - - regexes perl เปลี่ยนการทำงานเริ่มต้นของ Vim อย่างไร? - - ต่อไปนี้เป็นวิธีที่ฉันออกแบบการค้นหาไฟล์. tex askubuntu.com/a/789769/25388มันจะเป็นการดีที่จะเรียนรู้วิธีปรับปรุงจากคุณ มันไม่ได้ใช้งานง่ายดังนั้นฉันจึงลืมตรรกะของตัวเองบ่อยเกินไป