Tôi muốn liệt kê các trận đấu, khi tôi nhấn:
/example
để tôi biết vị trí của tất cả các trận đấu cùng một lúc.
Tôi muốn liệt kê các trận đấu, khi tôi nhấn:
/example
để tôi biết vị trí của tất cả các trận đấu cùng một lúc.
Câu trả lời:
" 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
Ở dạng dài hơn:
:global/regular-expression/print
Bạn có thể bỏ mẫu / regex và Vim sẽ sử dụng lại cụm từ tìm kiếm trước đó.
Thông tin bên lề: Công cụ grep được đặt tên theo chuỗi lệnh này.
:g//
- vì p (rint) là hành động mặc định, bạn cũng có thể bỏ qua.
:g/
thậm chí còn ngắn hơn!
--context 9
không?
:%s/regular-expression//gn
Nó sẽ tạo ra một cái gì đó dọc theo những dòng:X matches on Y lines
Bạn cũng có thể thực hiện:
g/pattern/#
sẽ in ra mẫu bạn muốn và số dòng.
#
không bắt buộc. Nó hiển thị số dòng theo mặc định
nếu bạn muốn xem danh sách này và chuyển nhanh giữa các trận đấu, hãy cân nhắc sử dụng
:vimgrep example %
hoặc là
:grep example %
Thao tác này sẽ điền vào "danh sách lỗi" với tất cả các kết quả phù hợp để bạn có thể sử dụng :copen
để liệt kê tất cả chúng trong bộ đệm Quickfix, nhấn enter trên một dòng cụ thể để chuyển đến kết quả phù hợp đó hoặc sử dụng các lệnh như :cn
và :cp
để quay lại.
để được giải thích cặn kẽ, hãy xem câu trả lời của tôi cho một câu hỏi tương tự
E499: Empty file name for '%' or '#', only works with ":p:h"
trên MacVim 8.1
Chỉ cần học một cái mới: cái Location List
!
Nhập :lvim foo %
để tìm kiếm foo
trong tệp hiện tại và nhập tất cả các kết quả phù hợp có chứa foo
vào danh sách vị trí .
Gõ :lopen
để mở danh sách vị trí trong cửa sổ QuickFix, đó là đầy đủ điều hướng như bình thường.
Sử dụng :lnext
/ :lprevious
đến thông qua danh sách (sử dụng ánh xạ tpope / không ghép nối để có trải nghiệm tốt nhất)
Một khả năng khác là sử dụng các lệnh tìm kiếm tệp bao gồm.
[I
Điều này sẽ liệt kê tất cả các lần xuất hiện của từ dưới con trỏ. Tuy nhiên, nó có thể nhiều hơn những gì bạn cần, vì nó cũng sẽ tìm kiếm bất kỳ tệp nào có trong tệp hiện tại.
Nhưng cái hay ở lệnh này là màn hình kết quả tìm kiếm cũng hiển thị số lượng kết quả phù hợp, ngoài số dòng của mỗi trận đấu.
:help include-search
để xem nhiều biến thể.
Một lưu ý về
:g//p
Điều này có thể được giảm thêm xuống
:g//
bởi vì, như những người khác đã nói, p (rint) là hành động mặc định.
[I
ngữ cảnh, như trên grep --context 9
không?
bạn có thể có một quickfix
cửa sổ đẹp với các kết quả phù hợp tạo thành mẫu tìm kiếm hiện tại của bạn
:vim // %
:copen
siêu tiện dụng nếu trước đây bạn đã tạo một mẫu tìm kiếm phức tạp chỉ bằng cách sử dụng /pattern
Chỉnh sửa : vừa phát hiện ra điều này cũng hoạt động cho tất cả các bộ đệm mở
:bufdo vimgrepadd // %
:copen
Việc sử dụng :set hlsearch
sẽ đánh dấu tất cả các kết quả phù hợp bằng màu vàng cho phép bạn quét tệp dễ dàng để tìm các kết quả phù hợp. Tuy nhiên, đó có thể không phải là những gì bạn muốn, sau khi tìm kiếm,: g // p sẽ cung cấp cho bạn các kết quả phù hợp được liệt kê
:nohl
để xóa các điểm nổi bật khi bạn không cần chúng nữa.
Để nói rõ hơn về điều này ... thay vì
/example
:g//p
bạn cũng có thể viết trực tiếp
:g/example/p
hoặc, vì p (rint) là hành động mặc định cho lệnh: g (lobal), điều này có thể được rút ngắn thành
:g/example
Và thay vì p (rint), các hành động khác có thể thực hiện được, ví dụ như d (elete). Xem: help: global
g/pattern
Nếu bạn có :set number
, lệnh trên cũng hiển thị số dòng.
Nếu bạn chưa :set number
, thì
g/pattern/#
sẽ hiển thị số dòng.
Tôi đã viết một đoạn mã cho việc này. Nó thực sự tránh được các vấn đề trong vimgrep
. Nó hoạt động ngay cả với các tệp không tên. Và nó dễ sử dụng hơn.
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
Khi bạn gọi nó bằng một mẫu, nó sẽ mở cửa sổ vị trí với tất cả các kết quả phù hợp.
Đây có thể là một lệnh
command! -nargs=1 Mat call Matches(<f-args>)
Vì vậy, tất cả những gì bạn cần làm là nhập :Mat pattern
Tôi cũng sử dụng ánh xạ sau để lấy các kết quả phù hợp của lựa chọn hình ảnh hiện tại.
vnoremap Y "xy:call Matches(@x)<CR>
Ctrl-f để liệt kê tất cả kết quả tìm kiếm:
nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>
node_modules
? - - Perl regexes thay đổi chức năng mặc định của Vim như thế nào? - - Sau đây là cách tôi thiết kế tìm kiếm tệp .tex askubuntu.com/a/789769/25388 Rất vui được học hỏi từ bạn cách cải thiện nó. Nó không trực quan lắm nên bản thân tôi cũng thường quên logic.