vim에서 현재 줄과 일치하는 줄을 찾는 방법


11

나는 보통로 단어 :/string를 검색하지만 현재 줄 전체를 검색 해야하는 경우 어떻게해야합니까?

event: 1  beacon: 0x02              //line 1
event: 19 beacon: 0x02              //line 2
event: 1  beacon: 0x03              //line 3
event: 1  beacon: 0x02              //line 4
event: 8  beacon: 0x01              //line 5
event: 19 beacon: 0x02              //line 6
event: 1  beacon: 0x02              //line 7

예를 들어, cursor현재 전체 줄을 포함하는 텍스트 line 1와 유사하게 검색하는 방법 이 있다면 입니다 :/. 커서가 일치하는 line 4로 이동하고 다시line 7

답변:


7

내가하는 방법은 다음과 같습니다.

  1. 끝에 줄 바꿈을 포함하지 않고 줄을 (명명되지 않은 레지스터로) 줄입니다. 0y$
  2. 매우 독창적 인 검색을 시작하십시오 ./\V
  3. 줄 바꿈을 추가하십시오. <c-r>"
  4. 검색을 종료하십시오. <cr>

으로 @EvergreenTree 코멘트에 지적 , 당신은 물론 한 번에 모든 단계를 수행하기 위해 매핑을 만들 수 있습니다 :

nnoremap <leader>* 0y$/\V<c-r>"<cr>

관련 도움말 주제 :

:help registers
:help /magic
:help c_CTRL-R

NB 검색하는 줄에 백 슬래시가 포함되어 있으면 매우 역설적 인 검색을 수행 하더라도 여전히 다른 백 슬래시를 추가하여 해당 줄을 이스케이프하고 이스케이프해야합니다 .


4
물론 이것에 대한 매핑을 만들 수도 있습니다. nnoremap {key} 0y$/\V<c-r>"<cr>
EvergreenTree

9

특히 매핑 목적으로, 나는 getline()직접 king 킹을하는 것보다 더 우아한 것을 사용 합니다. getline()문자열 '.'로 호출 하면 커서 아래의 행이 반환됩니다. 이것을 사용하는 두 가지 좋은 옵션이 있습니다.

:exec '/' . getline('.')

문자열을 구문 분석하고 함께 '/'반환 된 내용을 getline()vim 명령으로 실행합니다.

또는

/<C-r>=getline('.')<CR>

표현식 레지스터를 사용합니다 @=. 다음 표현식 =은 첫 번째 이후에 평가 <CR>되어 명령 행에 배치됩니다.


좋은! 줄에 문자가 포함되어 /있거나 '잘 작동하지 않는 경우 어쨌든, 나는 오늘 무언가를 배웁니다! 감사합니다
Luc M

4

개인적으로는 얻을 것 시각적 스타 (플러그인을 몇 가지 알아가있다 ). Vimcast가 있습니다 : 선택한 텍스트를 검색하십시오 . 즉, 선을 시각적으로 선택하고을 누를 수 *있습니다.

플러그인이 아닌 경우 다음에 매핑을 추가 할 수 있습니다 vimrc.

xnoremap * :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>

참고 : <c-v>이 매핑에는 비주얼 블록 ( )이 지원되지 않습니다.


매핑을 추가했지만 실제로 첫 번째 일치하는 단어로 점프하고 전체 줄을 선택하지 않습니다.
manav mn

단어와 일치하면 *일반 모드에서 사용 중이 거나 매핑이 올바르게 설치되지 않은 것으로 가정 합니다.
Peter Rincker

4

라인에 패턴의 일부로 해석되는 특정 항목이 포함되어 있으면 기존 답변이 모두 실패합니다. \V점은이 방법의 대부분을 얻을 수 있지만, 여전히 백 슬래시로 망쳐 놨어요.

백 슬래시를 피하려면 이것을 시도하십시오 ...

/\V<C-R>=escape(getline('.'), '\')

그리고 매핑에서 사용하는 경우 <Enter>작동 방식에 따라 끝에 하나 또는 두 개가 필요 합니다.


훌륭한 답변! 행에는 종종 두 가지 슬래시가 포함되어있어 다른 답변과 혼동됩니다. 탈출의 마지막 주장 에는 슬래시도 포함되어야합니다.escape(…, '/\')
bobbogo

2

VIM-별표 (*)가 바로 사용 설치된 V$*(또는 0v$*) 현재 행을 선택하고 검색합니다.

0커서가 이미 행의 시작에있는 경우 두 번째 명령에서 필요하지 않습니다.


1
하지 않습니다 *만 현재 비주얼 선택 커서 아래에있는 단어를 검색, 그리고?
EvergreenTree

1
@EvergreenTree 플러그인 언급을 잊어 버렸습니다. 공지 주셔서 감사합니다
adelarsq

2

이를 수행하는 또 다른 방법은 명령 행 창을 사용하는 것입니다. yy/<Ctrl-F>p<Enter>

  • 필요한 줄을 모두 잡아 yy
  • 를 누른 /다음 Ctrl-F를 눌러 명령 행 창을여십시오.
  • 눌러 p선을 붙여
  • 검색을 시작하려면 Enter 키를 누르십시오

5
q//<c-f>
evilsoup

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