Vim-검색 레지스터로 끌어 당김


81

vim의 "마지막 검색"레지스터 ( "/)에"당김 "하는 쉽고 빠른 방법이 있습니까?

vim 문서에서 대답은 '아니요'인 것처럼 보이지만 "let"명령을 통해 할당 할 수 있습니다.

It is writable with ":let", you can change it to have 'hlsearch' highlight
other matches without actually searching.  You can't yank or delete into this
register.

이상적으로 내가하고 싶은 것은 다음과 같습니다.

"/5yw

커서 아래의 다음 5 개 단어를 잡아 당기고 마지막 검색 버퍼에 넣습니다.

또는 명명 된 레지스터의 내용을 검색하는 방법이있는 경우에도 작동합니다. 즉, 내가 할 수 있다면 :

"A5yw

그런 다음 레지스터 A에있는 항목을 검색하면 작동합니다.

내가 올 수있는 가장 가까운 방법은 명명 된 레지스터에 yank 한 다음 해당 레지스터를 마지막 검색 레지스터에 복사하는 것입니다.

"A5yw
:let @/=@A

긴 질문을 더 길게 만들 위험을 감수하면서 "끌어서 검색"하고 싶은 단어가 항상 5 개는 아니라고 말하고 싶습니다. 때로는 17 자, 때로는 줄의 끝까지입니다. 따라서 하드 코딩 된 매크로는 내가 원하는 유연성을 제공하지 않습니다.

답변:


110

를 눌러 /검색 문자열을 입력 한 후 사용 Ctrl-R하고 사용하려는 레지스터를 나타내는 문자를 입력 할 수 있습니다.

예.

  • 먼저 "Ayw 레지스터 A에 단어를 잡아 당기려면
  • 그런 다음 / ^R A 레지스터 A의 내용을 검색 문자열에 넣습니다.

1
이것은 물론 작동하지만 OP가 실제로 검색하고 싶지 않은 것처럼 들립니다. 이 경우 맞춤 연산자를 사용하는 것이 좋습니다.
— Cascabel

1
슈퍼-고마워요 아 ... 그게 바로 제가 필요로했던 것입니다. (음, 처음에는 완벽한 솔루션이 실제로 불가능하다는 제약 하에요.) 간결한 솔루션에 감사드립니다.
— Dan

11
그냥 코멘트 ... "Ayw는 'A'레지스터에 단어를 잡아 당기지 않습니다 .... 'a'레지스터에 잡아 당기는 것을 추가합니다.
— jkerian

1
+1은 내가 해결하려고했던 문제에 대한 완벽한 해결책을 잠시 찾고있었습니다. 감사합니다.
— iblamefish 2011

8
명확성을 위해-vim은 레지스터의 케이스를 사용하여 내용을 추가할지 또는 교체할지 여부를 결정하므로 "ayw(소문자) 레지스터 'a'의 내용을 교체하고 레지스터 'a'에 "Ayw추가합니다
— Peter Gibson

40

얀크 텍스트를 저장하는 데 레지스터를 사용하지 않은 경우 vim은 0레지스터를 사용합니다 . Ctrl-R 0뒤에 입력하여 검색 할 수 있습니다 /.

더 복잡한 예. 현재 커서 아래에있는 따옴표 안의 텍스트를 다른 버퍼에서 검색하고 싶다고 가정 해보십시오.

  • yi"(yank inner quote)로 할 수 있습니다.
  • 검색하려는 버퍼로 이동
  • 유형 /Ctrl-R 0

1
나는 반복 수행 이후 a'r의 이상이 솔루션이 더 유용하다고 "Ayw 레지스터 A에 추가 된 문자열을 생산하지만 단순히 입력 yw한 후 입력 Ctrl-R 0한 후 /항상 내가 꼴 정확하게 제공합니다.
— 데이빗 정

10

이를 위해 다음 코드를 사용하고 있습니다.

vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR>
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR>

    function! VisualSearch(dirrection)
        let l:register=@@
        normal! gvy
        let l:search=escape(@@, '$.*/\[]')
        if a:dirrection=='/'
            execute 'normal! /'.l:search
        else
            execute 'normal! ?'.l:search
        endif
        let @/=l:search
        normal! gV
        let @@=l:register
    endfunction

명확하지 않은 경우 시각적 모드에서 일부 텍스트를 선택하고 * 또는 #을 사용하여 해당 텍스트를 검색 할 수 있습니다.
— Edward Anderson

6

선택 검색 :

선의 한 부분을 먼저 잡아 당기려면 "v"를 사용하고 원하는 항목을 표시 할 때까지 커서로 이동 한 다음 y를 눌러 잡아 당기면 선택이 레지스터 0에 있습니다.

그런 다음 입력 할 수 있습니다. /Ctrl-R 0


5

기본적으로 # 및 * 명령의 확장 버전이 맞습니까? 사용자 정의 연산자 (동작을 예상하는 명령)를 정의하려는 것 같습니다. 나는 실제로 이것을 한 적이 없지만 그렇게하기 쉽게 만드는 플러그인 을 찾았습니다 . 제공된 몇 가지 예가 있습니다.

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