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개 이상의 " ", 탭 및 줄 바꿈과 일치합니다. 이렇게 하면 검색 패턴의 한 인스턴스가 개행 문자에 걸쳐 있지만 다른 인스턴스는 그렇지 않은 경우 둘 다 일치합니다.