vim 개행 주위 검색

vim 개행 주위 검색

Vim에서 LaTeX 문서를 편집할 때 문구를 검색하고 싶은 경우가 종종 있습니다. 줄 바꿈을 위해 LaTeX를 설정했기 때문에 때로는 구문의 절반이 한 줄에 있고 나머지 절반은 다음 줄에 있습니다. 이 경우에는 검색 결과 내가 원하는 것을 찾지 못했습니다. 예를 들어

blah blah blah hello
world blah blah blah

검색을 사용할 때 /hello world원하는 내용을 찾을 수 없습니다 . 원하는 위치로 이동하기 위해 이 검색을 수정하는 빠르고 쉬운 방법이 있습니까? 아니면 검색 문자열에서 공백(공백, 탭, 개행 문자)을 공백과 일치시키도록 vim에 지시하는 방법이 있습니까?

답변1

더 많이 검색해 보면 가장 쉬운 방법은 다음과 같습니다 \_s.

/hello\_sworld

답변2

이 문제는 이미http://vim.wikia.com/wiki/Search_across_multiple_lines. 나에게 필요한 기능을 포함합니다.

function! SearchMultiLine(bang, ...)
  if a:0 > 0
    let sep = (a:bang) ? '\_W\+' : '\_s\+'
    let @/ = join(a:000, sep)
  endif
endfunction
command! -bang -nargs=* -complete=tag S call SearchMultiLine(<bang>0, <f-args>)|normal! /<C-R>/<CR>

그런 다음 다음을 사용하여 여러 줄 검색을 수행 :S hello world하면 변환되어 hello\s\+world검색됩니다. 또 다른 좋은 기능은 이 새로운 검색이 검색 기록에 추가된다는 것입니다. 이를 통해 q/필요한 경우 돌아가서 검색을 수정할 수 있습니다 . 대체용으로도 사용할 수 있습니다 :%s//new thing/g. 단점은 incsearch활성화하면 사용되지 않는다는 것입니다.

답변3

내가 아는 방법은 어렵지는 않지만 좀 지루하다. 검색 쿼리의 모든 공백을 다음으로 바꿉니다.

[ \t\n]\+

(후행 공백에 유의하십시오 [.) 이는 정규식 일치 구문입니다. 이를 분해하면 다음을 의미합니다.

  • [...]대괄호 안의 모든 문자와 일치합니다.
  • \t탭 문자입니다
  • \n개행 문자입니다
  • ...\+이전 항목 이상과 일치함을 나타냅니다.

정규식에 대한 더 많은 정보를 원하시면 vim에게 물어보세요:

:help regexp
:help usr_27

답변4

개인적으로 저는 공백을 대신 사용하겠습니다 [ \t\n]*. 이는 0개 이상의 " ", 탭 및 줄 바꿈과 일치합니다. 이렇게 하면 검색 패턴의 한 인스턴스가 개행 문자에 걸쳐 있지만 다른 인스턴스는 그렇지 않은 경우 둘 다 일치합니다.

관련 정보