Я хотів би перерахувати сірники, коли потрапив:
/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
Ви можете залишити шаблон / регекс, і Vim повторно використовувати попередній пошуковий термін.
Загальна інформація : 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
Щойно навчився нового: the Location List
!
Введіть :lvim foo %
для пошуку foo
у поточному файлі та введіть усі збіги, що містяться foo
у списку місцеположень .
Введіть, :lopen
щоб відкрити список місцеположень у вікні швидкого виправлення, яке повністю перебуває як звичайно.
Використовуйте :lnext
/ :lprevious
до списку ( для найкращого досвіду використовуйте відображення tpope / unmareired 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). Див .: довідка: глобальна
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>
node_modules
? - - Як регекси perl змінюють функціонування за замовчуванням Vim? - - Нижче описано, як я розробив пошук файлів .tex askubuntu.com/a/789769/25388 Було б непогано дізнатися від вас, як його вдосконалити. Це не так інтуїтивно, тому я і сам часто забував логіку.