Vim의 검색 결과를 어떻게 나열 할 수 있습니까?


101

다음을 치면 일치 항목을 나열하고 싶습니다.

/example

모든 경기가 한 번에 어디에 있는지 볼 수 있습니다.

답변:


3
    " 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

1
나는 당신의 F5-F8 아이디어를 많이 좋아합니다. 여기에 해당 명령의 시각화 / 출력이 있으면 좋을 것입니다. F8은 어떻게 작동하도록 설계 되었습니까? 현재 디렉토리 만 검색합니까? --dir의 생략은 관습입니다--왜 node_modules? --Perl 정규식이 Vim의 기본 기능을 어떻게 변경합니까? --다음은 내가 .tex 파일 검색을 설계 한 방법입니다. askubuntu.com/a/789769/25388 개선하는 방법을 배우면 좋을 것입니다. 너무 직관적이지 않아서 나도 논리를 자주 잊어 버렸습니다.
Léo Léopold Hertz 준영

node_modules는 프론트 엔드를 개발할 경우 npm 모듈의 많은 js 코드를 포함하는 dir입니다 ... 이것은 단지 예일뿐입니다 ...
Yordan Georgiev

1
.vimrc를 백업하고 해당 설정을 추가하고, : so %로로드하고 명령에서 "helps"를 실행하는 것보다 ... vim은 어렵습니다.이 작업을 수천 번 반복해야합니다. 그들의 새로운 UI IDE 기능을 지적하는 @ 모든 사람이 웃을 것입니다 ...
Yordan Georgiev

226
:g//p

더 긴 형태 :

:global/regular-expression/print

패턴 / 정규식을 생략 할 수 있으며 Vim은 이전 검색어를 재사용합니다.

하찮은 일이 : 그렙 도구는이 명령 시퀀스의 이름을 따서 명명되었다.


18
:g//-p (rint)가 기본 동작이므로 생략해도됩니다.
dekeguard

6
:g/더 짧습니다!
Sparhawk 2011

2
grep에서와 같이 여기에서 컨텍스트를 볼 수 --context 9있습니까?
Vitaly Zdanevich

@VitalyZdanevich Try :%s/regular-expression//gn It은 다음 라인을 따라 무언가를 생산합니다 :X matches on Y lines
Alexej Magura

@AlexejMagura 내 말은-문자열 앞뒤로 몇 줄을 보는 방법?
Vitaly Zdanevich

50

다음을 수행 할 수도 있습니다.

g/pattern/#

원하는 패턴과 줄 번호를 인쇄합니다.


2
멋지네요. 그러나 행 번호가 이미 활성화되어 있으면 #필요하지 않습니다. 기본적으로 줄 번호를 보여줍니다
Pavan Manjunath

44

이 목록을보고 경기 사이를 빠르게 이동하려면

:vimgrep example %

또는

:grep example %

이렇게하면 "오류 목록"이 모든 일치 항목으로 채워 :copen지므로 빠른 수정 버퍼에 모두 나열하는 데 사용할 수 있고 특정 줄에서 Enter 키를 눌러 해당 일치 항목 으로 이동 하거나 :cn및 같은 명령을 사용 :cp하여 앞뒤로 이동할 수 있습니다.

자세한 설명 은 비슷한 질문에 대한 내 답변을 참조하십시오.


이것은 E499: Empty file name for '%' or '#', only works with ":p:h"MacVim 8.1에서 제공합니다
Lincoln Bergeson

35

방금 새로운 것을 배웠습니다 : Location List!
입력 :lvim foo %을 검색 foo현재 파일과 포함 된 모든 일치 입력 foo위치 목록을 . 평상시처럼 완전히 탐색 할 수있는 빠른 수정 창에서 위치 목록을 열려면
입력 :lopen합니다. / to를
사용 하여 목록을 살펴 봅니다 ( 최상의 경험을 위해 tpope / unimpaired 매핑 사용 ).:lnext:lprevious


2
좋은 팁! 이로 인해 커서 아래의 단어가 자동으로 확장되고 한 번의 스위프에서 lopen을 수행하는 매핑을 만들었습니다. nnoremap <leader> f : lvim / <cr> = expand ( "<cword>") <cr> / % <cr> : lopen <CR>
요르겐

16

또 다른 가능성은 포함 파일 검색 명령을 사용하는 것입니다.

[I

그러면 커서 아래에있는 모든 단어가 나열됩니다. 현재 파일에 포함 된 모든 파일도 검색하므로 필요한 것보다 많을 수 있습니다.

그러나이 명령의 좋은 점은 검색 결과 디스플레이에 각 일치 항목의 행 번호와 함께 일치 항목 수도 표시된다는 것입니다.

:help include-search

많은 변형을 볼 수 있습니다.

에 대한 참고 사항

:g//p

이것은 더 줄일 수 있습니다

:g//

다른 사람들이 말했듯이 p (rint)가 기본 작업이기 때문입니다.


[Igrep과 같은 컨텍스트 에서 결과를 얻을 수 --context 9있습니까?
Vitaly Zdanevich

10

quickfix현재 검색 패턴과 일치 하는 멋진 창을 얻을 수 있습니다.

:vim // %
:copen

이전에 복잡한 검색 패턴을 만든 경우 매우 편리합니다. /pattern

편집 : 이것은 모든 열린 버퍼에서도 작동한다는 것을 알았습니다.

:bufdo vimgrepadd // %
:copen

10

를 사용 :set hlsearch하면 모든 일치 항목이 노란색으로 강조 표시되어 파일에서 일치 항목을 쉽게 검색 할 수 있습니다. 하지만 검색 후 원하는 것이 아닐 수도 있습니다. : g // p는 나열된 일치 항목을 제공합니다.


2
': hlsearch'가 아닌 ': set hlsearch'여야합니다.
너무 많은 PHP

:nohl더 이상 필요하지 않을 때 하이라이트를 지우도록 매핑하는 것도 유용합니다 .
Kos

9

이것에 대해 자세히 설명하려면 ... 대신

/example
:g//p

직접 쓸 수도 있습니다.

:g/example/p

또는 p (rint)가 : g (lobal) 명령의 기본 작업이므로 다음과 같이 단축 할 수 있습니다.

:g/example

그리고 p (rint) 대신 d (elete)와 같은 다른 작업이 가능합니다. 참조 : help : global


6
g/pattern

가있는 경우 :set number위의 명령은 줄 번호도 표시합니다.

당신이하지 않은 경우 :set number, 다음

g/pattern/#

줄 번호가 표시됩니다.


0

이에 대한 코드를 작성했습니다. 실제로 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>

-1

모든 검색 결과를 나열하려면 Ctrl-f :

nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.