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


61

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

두 가지 멋진 바로 가기가 있습니다. *또는 #커서 아래에서 단어를 검색합니다 (앞으로 / 뒤로). 매우 유용합니다! (이 또한 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.