커서가 현재 단어에 있을 때 및 를 사용하여 Vim 단어 검색을 배우기 시작했습니다 *
. #
그러나 이 검색은 현재 파일 버퍼로 제한됩니다.
이 검색을 다음으로 확장할 수 있는 명령이나 바로가기가 있습니까?
- 열려 있는 탭이 모두 열려 있나요?
- 모든 오픈 버퍼?
답변1
이는 실제로 기본 동작이지만 알아차리기 어려울 수 있습니다. *
그런 다음 다른 탭으로 변경하고 명령 모드에서 n
ans를 사용하여 N
검색 항목 사이에서 앞뒤로 이동해 보세요.
먼저 모든 히트에 대해 강조 표시를 켜면 더 의미가 있을 수 있습니다.
:set hlsearch
답변2
나는 귀하의 문제에 대한 정확한 해결책을 갖고 있지 않으며 내 것보다 더 나은 답변을 찾고 싶습니다. 하지만 이것이 모든 버퍼에서 단어를 찾는 문제를 해결한 방법입니다.
" enables to search in all open buffers with :Search <pattern>
command! -nargs=1 Search call setqflist([]) | silent bufdo grepadd! <args> %
nnoremap <left> :cprev<cr>zvzz
nnoremap <right> :cnext<cr>zvzz
첫 번째 줄은 Search
검색 패턴을 인수로 사용하고 결과를 빠른 수정 목록에 기록하는 명령을 만듭니다. 다른 두 줄은 (적어도 나에게는) 쓸모 없는 화살표 키를 유용한 항목에 매핑하며 다음/이전 검색 또는 다음/이전 컴파일 오류 등으로 이동하도록 매핑되며 목록을 단계별로 실행하기 위한 빠른 수정일 뿐입니다. . 다음과 같이 사용할 수 있습니다.
:Search foobar
<right>
<right>
…
답변3
:bufdo vimgrepadd yoursearchterm % | copen
답변4
나는 이 일을 많이 하고 있기 때문에 (개선 가능한) 스크립트를 혼합했습니다.
귀하 또는 다른 사람들이 유용하다고 생각할 수 있습니다.
간단한 설명:
기본적으로 버퍼 목록을 검색하여 빠른 수정 창에 결과를 표시합니다.
기본 명령어 2개가 추가되었습니다.
Search <pattern>
: 모든 버퍼를 검색합니다<pattern>
.Search1 <pattern>
: 모든 버퍼에서 검색<pattern>
하지만 각 버퍼의 첫 번째 결과만 표시합니다. 일반적으로foo
함수, 변수(또는 기타 항목)를 사용하는 모든 버퍼를 나열하는 데 유용합니다 .
:Search! foo
결과에 추가하려면 앞머리( )를 사용하세요 .
GSearch
또한 및 추가 GSearch1
, 차이점은 Search
스크립트가 정규식 구분 기호를 추가한다는 것입니다. 예를 들면 다음과 같습니다.
foo -> /foo/
GSearch
예상대로 그 자리는 닫혀 있었습니다.
j
점프를 방지하려면 항상 이 플래그를 추가하세요.
암호:
코드를 짧게 유지하면서 오류가 나열되는 것을 방지하는 몇 가지 요령이 있습니다. try / catch
조금 귀찮습니다 bufdo
.
let s:not_idents = split("/!#$%&\"`´¨'¯()*+,-.:;<=>?¿@[\]^{|}µ¶·¸~±×÷®©«»¬ª°º¹²³¼½¾", '\zs')
" Create a delimited pattern. "
fun! s:Parse_pat(pat)
for c in s:not_idents
if stridx(a:pat, c) == -1
return c . a:pat . c
endif
endfor
echohl Error
echom "Could not delimit pattern '". a:pat ."'"
echohl None
return ''
endfun
fun! s:AllBufSearch(pat, bang, uno, isg)
if a:isg
let pat = a:pat
else
let pat = s:Parse_pat(a:pat)
endif
if pat == ''
return
endif
cclose
let [_buf, _view] = [bufnr("%"), winsaveview()]
let _foldenable = &foldenable
set nofoldenable
" Copy of current qflist. "
let qfc = getqflist()
" Hack to prevent error if no matches. "
call setqflist([{}])
silent execute "bufdo vimgrepadd! " . pat . "j %"
" Restore "
exec "buffer " . _buf
let &foldenable = _foldenable
call winrestview(_view)
" Fix "
let qf = getqflist()
call remove(qf, 0)
" Only one listing per buffer. "
if a:uno
let bn = {}
let i = 0
for m in qf
if has_key(bn, m["bufnr"])
call remove(qf, i)
else
let bn[m["bufnr"]] = 1
call remove(qf[i], "valid")
let i += 1
endif
endfor
endif
if a:bang == "!"
let qf = qfc + qf
endif
" If any matches, copen. "
if len(qf)
call setqflist(qf)
copen
endif
endfun
command! -nargs=1 -bang Search call s:AllBufSearch(<q-args>, "<bang>", 0, 0)
command! -nargs=1 -bang Search1 call s:AllBufSearch(<q-args>, "<bang>", 1, 0)
command! -nargs=1 -bang GSearch call s:AllBufSearch(<q-args>, "<bang>", 0, 1)
command! -nargs=1 -bang GSearch1 call s:AllBufSearch(<q-args>, "<bang>", 1, 1)