줄 바꿈 주위의 vim 검색


12

vim에서 LaTeX 문서를 편집 할 때 종종 문구를 검색하려고합니다. LaTeX가 줄을 감싸도록 설정되어 있기 때문에 문구의 절반은 한 줄에 있고 다른 절반은 다음 줄에 있습니다. 이 경우 검색에서 원하는 것을 찾지 못합니다. 예를 들어

blah blah blah hello
world blah blah blah

을 사용하여 검색 할 때 찾고 /hello world있는 것을 찾지 못했습니다. 원하는 위치로 이동하기 위해이 검색을 수정하는 빠르고 쉬운 방법이 있습니까? 또는 더 나은 방법은 vim에게 공백 (탭, 줄 바꿈, 새 줄)을 검색 문자열의 공백과 일치하도록 지시하는 방법입니까?

답변:


15

더 많은 검색을 한 후이 작업을 수행하는 가장 쉬운 방법은입니다 \_s. 예를 들어 :

/hello\_sworld

4
당신은 할 수 있습니다 hello\_s\+world물론 그들 사이에 하나 개 이상의 공백 문자가있을 수 있다면.
Wodin

5

이 문제는 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

1

나는 [ \t\n]*공백 대신 개인적으로 사용할 것입니다. 이것은 '', 탭 및 줄 바꿈 중 0 이상에서 일치합니다. 이렇게하면 검색 패턴의 한 인스턴스가 줄 바꿈에 걸쳐 있지만 다른 인스턴스는 그렇지 않으면 둘 다 일치합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.