Vim에서 선택한 텍스트를 검색하는 방법은 무엇입니까?


61

나는 /정규식을 사용 하여 무언가를 검색 할 수 있다는 것을 알고 있습니다 . 그리고 ?뒤로 검색 하는 데 사용할 수 있습니다 . 그리고 사용할 수 있습니다 nN앞뒤로 검색을 반복 할 수 있습니다.

두 가지 멋진 바로 가기가 있습니다. *또는 #커서 아래에서 단어를 검색합니다 (앞으로 / 뒤로). 매우 유용합니다! (이 또한 g*g#변형)

하지만 ... 비주얼 모드 ( v)를 사용하여 텍스트를 선택한 후 Vim에게 정확히 해당 텍스트를 검색하도록 요청하려면 어떻게해야합니까? 훑어 :help보지 않아도 ... 응 ... 도와주세요.



와 팁 주셔서 감사 *하고 #! 당신의 질문이 또한 무엇 g*g#할 것인지 설명 한다면 좋을 것입니다;)
winklerrr

답변:


22

이미 선택된 텍스트 블록이 주어진 경우 다음 순서는 원하는 작업을 수행합니다.

  • y( "기본적 으로 선택된 텍스트를 레지스터에 입력)
  • / (검색 모드 입력)
  • ( \ V) (선택 사항, "매우 마술 없음"모드로 전환 *)
  • Ctrl+ r "( "레지스터 에서 텍스트 삽입 )
  • Enter (끌다!)

(*) "매우 마술 없음"모드는 다음 텍스트를 정규식 대신 일반 텍스트로 해석합니다. 것을 그러나주의 \/여전히 특별하고 다른 방법으로 처리해야합니다. 텍스트에 특수 문자로 간주되는 문자가 없으면이 단계를 건너 뛸 수 있습니다.

출처 : Vim Tips Wiki


1
감사합니다! 이것은 vim.wikia 페이지 의 "How-To"보다 훨씬 이해하기 쉽습니다
winklerrr

64

강조 표시된 텍스트를 먼저 잡아 당길 수 있습니다. 그때

  • /

  • Ctrlr

  • "

다음에 눌린 것을 붙여 넣습니다 /.


7
붙여 넣은 텍스트는 정규식으로 해석되며 원하지 않는 것을 제외하고는 좋은 생각입니다. :-(
Denilson Sá Maia

4
이것이 거의 당신에게 충분하다면 /\V<C-r>"대신에 할 수 있습니다. \V검색어 앞에 추가 하여 "매우 마술 없음"을 사용하도록 vim에 지시합니다. 백 슬래시는 여전히 문제를 일으킬 수 있습니다. 참조:help \V
idbrii

3
그것이 Ctrl+R레지스터에 액세스하는 방법이고 *시스템 클립 보드 레지스터 라는 것을 설명하는 데 도움이 될 수 있습니다 . 예를 들어, yaw단어를 레지스터 "(기본 레지스터)에 넣은 다음 /<C-r>"해당 문자열을 검색 할 수도 있습니다.
벤 데이비스

5
@ DenilsonSá-이 솔루션을 사용할 수 있지만 역방향 검색은 기본적으로 슬래시를 이스케이프 처리하기 때문에 대신 /검색을 사용하는 ?대신 사용하십시오 . 그러면 N앞으로 검색을 계속 진행할 수 있습니다 .
Brad Parks

7

그런 기능에 대한 필요성을 느낀 적이 없지만 Vim의 기능에 대한 필요성을 찾을 수 있다고 생각하면 도움이 될 것이라고 생각합니다.

시각적으로 선택된 텍스트 검색

나는 그것을 테스트하지 않았지만 코드를 보면 정확히 당신이 찾고있는 것 같습니다.


4

vim wiki 에서이 동작을 만드는 방법을 찾을 수 있습니다 .


슬래시를 피하는 버전이 도움이된다는 것을 알았습니다. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
공예

1

이 솔루션은 여러 줄 및 이스케이프 문자가 있어도 vim 검색에서 시각적으로 선택된 컨텍스트를 강화합니다.

에 다음 코드를 추가하고로 .vimrc시각적으로 선택된 콘텐츠를 검색하십시오 //. 선택한 콘텐츠를 전체적으로로 대체 할 수도 있습니다 /s. 또는 선택한 컨텍스트를 //먼저 로컬로 대체 한 다음 영역을 시각적으로 선택하십시오 :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

위의 구성은 검색에만 해당됩니다. 내 모든 vim 구성을 보려면 .vimrc 를 방문하십시오.


0

두 개의 개별 컴퓨터에 대한 구성에서 텍스트를 선택한 다음 적중 /하면 선택한 텍스트를 자동으로 검색합니다.


기본 동작이 아닙니다. 여기에서 (시각 모드에서) /를 누르면 빈 정규 표현식 프롬프트가 표시되어 무언가를 입력 할 때까지 기다립니다.
Denilson Sá Maia

내가 할 수있는 일을 한 적이 없기 때문에 홀수.
Nathan Fellman

3
많은 배포판에서 비표준 vim 구성이 기본값으로 제공됩니다 (표준 vim 구성은 대부분 vi 호환성을 위해 많은 유용한 기능을 비활성화하기 때문에).
sleske
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.