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

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 자, 때로는 줄의 끝까지입니다. 따라서 하드 코딩 된 매크로는 내가 원하는 유연성을 제공하지 않습니다.



답변

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

예.

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


답변

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

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

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


답변

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

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


답변

선택 검색 :

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

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


답변

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


답변