문자 사이의 공백(또는 특히 개행 문자)을 무시하고 vim에서 문자열을 검색하려면 어떻게 해야 합니까?
그리고 어쩌면 모든 공백을 무시하고 검색할 수 있는 함수를 만들 수도 있습니다.
정규식에서 공백을 무시하는 방법을 찾았습니다. 진정한 우아함은 없습니다. \s*
문자 사이에 삽입하면 됩니다 . 그래서 그것은 정말로 함수가 되어야 합니다.
https://stackoverflow.com/questions/4590298/how-to-ignore-whitespace-in-a-regular-expression-subject-string
또한 vim에서 개행 문자를 검색하는 방법도 찾았습니다.
vim 개행 주위 검색
그러나 마지막 링크는 개행 문자에 공백이 있는 경우에만 솔루션을 제공합니다. 하지만 모든 공백을 무시하고 싶습니다.
그래서 여기에서 helloworld를 검색하면 다음과 같습니다.
blabla blalba hell
oworld bla bla h
elloworl bla bla
줄 바꿈에도 불구하고 두 번 일치해야 합니다.
기본적으로 vim 링크의 기능을 약간 변경하여 검색을 다음과 같이 변경해야 한다고 생각합니다.
h\n?e\n?l\n?l\n?o\n? \n?w\n?o\n?r\n?l\n?d
또는:
h\s_?e\s_?l\s_?l\s_?o\s_? \s_?w\s_?o\s_?r\s_?l\s_?d
하지만 이 기능을 어떻게 변경하는지 모르겠습니다.
답변1
이것시각적으로 선택된 텍스트 검색Vim Tips Wiki의 주제에는 단어 사이의 공백의 양과 유형에 관계없이 현재 시각적 선택을 검색하는 지도가 있습니다. *
현재 선택 항목을 검색(공백 무시)하기 위해 내장된 매핑처럼 사용할 수 있습니다 . 매우 편리합니다!
그러나 공백에 더 무관심하고 텍스트의 어느 위치에서나 줄 바꿈(및 기타 공백?)을 허용하고 싶습니다. 이것도 가능합니다. 다음을 사용하여 현재 검색 모드( /
Vimscript를 통해 액세스할 수 있는 레지스터에 저장됨 @/
)를 조정할 수 있습니다.
:let @/ = join(split(@/, '\zs'), '\_s*')
첫 번째는 현재(리터럴) 검색을 단일 문자 목록으로 잘라낸 다음( 또는 ! split()
와 같은 기존 정규 표현식에서는 제대로 작동하지 않음 ) 이를 다시 합치고 (모든 수의 공백과 일치) 다음으로 반환합니다. 검색 레지스터.\+
\|
join()
\_s*
this()를 기반으로 지도를 만들 :nnoremap <Leader>/ :let ...<CR>
거나 위에서 언급한 시각적 모드 지도에 통합할 수 있습니다.
답변2
이 솔루션https://stackoverflow.com/questions/20053907/how-can-i-get-vim-find-to-ignore-whitespace귀하의 상황에 맞는 시각적 솔루션을 지적하십시오.