시각적 선택 내에서만 교체하는 방법?


27

시각적 선택 에서만 문자를 바꾸고 다른 줄은 아닌 vim을 얻는 방법은 무엇입니까? 예:

  • 선: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
  • 시각적 선택 : { 00 01 02 03 04 05 05 /*... lots more like this*/}
  • 명령: :'<,'>s/\ /\,0x/g
  • 예상 : int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};

그러나 이러한 조치를 수행 한 후 실제 결과는 다음과 같습니다.

int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so on*/};

예상 결과를 생성하기 위해 위의 명령을 수정하는 방법이 있습니까? 하지 않습니다 '<'>명령 작동 범위에서 검색을 정의 (및 대체)?


2
나는 대답을 모른다. 그러나 나는 :substitute연산자를 한 줄씩 보여줌으로써 당신의 예에서 무엇을보고 있는지 설명한다.
Karl Yngve Lervåg

답변:


32
:'<,'>s/\%V\ /\,0x/g

%V시각적 영역 내에서 일치합니다. 참조하십시오 :help %V.


1
이 솔루션 은 일치시작이 시각적 선택 내부에 있는지 확인 만합니다 .
Christian Brabandt

7

거기에 \%V대한 내용은 :h %V다음을 참조하십시오 .

\%V

시각적 영역 내에서 일치시킵니다. 비주얼 모드가 이미 중지 된 경우 gv가 다시 선택할 영역에서 일치합니다. 이것은 너비가 0 인 일치 항목입니다. 전체 패턴이 시각적 영역 안에 있는지 확인하려면 패턴의 시작과 끝에 배치하십시오 ( 예 :> /\%Vfoo.*bar\%V).

교체하기 foobar선택에만 사용 :

:'<,'>s/\%Vfoo\%V/bar/
:'<,'>s/\%Vfoo\%V/bar/g
:'<,'>s/\%Vfoo\%V/bar/cg

이 특별한 경우 :

:'<,'>s/\%V\ \%V/\,0x/g

4

시각적 블록 내에서 대체하려는 경우 vis.vim플러그인을 사용할 수 있습니다 .

http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block

설치하기 위해서:

http://www.drchip.org/astronaut/vim/index.html#VIS 에서 vis.vba.gz를 다운로드 하십시오.

# Open vis.vba.gz in Vim 7.1 or later.
vim vis.vba.gz

# Source the open file.
:so %

# Quit Vim
:q

설치 한 후 :

ctrl-v to enter visual-block mode
Move to select the block you want
:B s/pattern/newtext/

를 입력 :B하면이 내용이 표시됩니다

:'<,'>B 

괜찮습니다. 명령이 현재 선택된 시각적 블록에 적용된다고 말하는 것은 vim입니다.

더 좋은 방법은 대체물뿐만 아니라 시각적 블록에서 Ex 명령을 수행 할 수 있다는 것입니다. 예를 들면 :B !sort.

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