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.