vi / vim에서 괄호를 잡거나 삭제할 수 있습니까?


128

C에 다음 코드 줄이 주어지면 :

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));

첫 번째 굵은 괄호에서 일치하는 괄호로 삭제하거나 취소하는 방법이 있습니까? 나는 df) 에 대해 생각 했지만 9.0 이후에야 얻을 수 있습니다.

줄 바꿈에 관계없이 vim이 일치하는 괄호 사이의 모든 것을 잡을 수있는 비슷한 방법이 있습니까?

답변:


167

다양한 동작 : %

%명령은 커서 아래 항목의 일치로 이동합니다. 커서를 여는 (또는 닫는) Paren 에 놓고 커서에서 일치하는 Paren까지 모든 항목을 삭제 y%하거나 d%삭제하는 데 사용합니다.

이것은 %"모션 명령" 이기 때문에 작동하므로 vim이 그러한 명령을 기대하는 모든 곳에서 사용할 수 있습니다. 보낸 사람 :help y:

["x]y{motion}       Yank {motion} text [into register x].  When no
                    characters are to be yanked (e.g., "y0" in column 1),
                    this is an error when 'cpoptions' includes the 'E'
                    flag.

기본적으로 "item"에는 대괄호, 중괄호, 파 렌스, C 스타일 주석 및 다양한 사전 컴파일러 명령문 ( #ifdef등)이 포함됩니다.

Vim 홈페이지 에서 찾을 수있는 "확장 된 % 일치"플러그인이 있습니다 .

명령 모드 %로 들어가서 설명서 및 관련 모션 명령을 읽을 수 있습니다 :help various-motions.

객체 선택

시각적 모드에서 다양한 텍스트 객체를 선택할 수있는 모션 명령 세트가 있습니다.

특정 문제를 해결하려면 다음을 수행하십시오.

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
                                   ^

커서가에 있다고 가정 해 봅시다 ^. 찾고있는 부품을 선택하려면 다음 순서를 입력하십시오.

v2a)

먼저 v시각 모드로 들어간 다음 2Parens 수준을 높이 도록 지정 합니다. 마지막으로 a)"블록"을 선택합니다. 당신이 사용할 수있는 후 d또는 x등을 삭제

외부 파렌을 포함하지 않으려면 대신 "내부 블록"을 사용할 수 있습니다.

v2i)

:help object-select관련 명령의 전체 목록을 참조하십시오 .


감사! 일치하는 항목 간의 % 전환에 대해 알고있었습니다. 명령 내에서도 유용하다는 것을 몰랐습니다. +1하고 수락했습니다.
romandas

5
흥미롭게도, 나는 항상 a"a"가 아니라 "around"를 의미 한다고 생각 했습니다. "내부"를 더 잘 보완하는 것처럼 느껴집니다. Vim에 대해 새로운 것을 배우지 않으면 하루가 지나지 않는 것 같습니다.
앤드류 마샬

217

어떤 약 dib이나 di(.

커서가 있는 내부 (...) 블록 을 삭제합니다 .

나는 텍스트 객체 움직임과 선택을 좋아 합니다 !


10
운 좋게도,이 질문은 내가 구글을 검색 할 때 가장 먼저 발생하는 질문입니다.이 답변이 몇 번이나 저를 구했는지 모릅니다. 그리고 나는 항상 그것을 잊어 버린다… :-(
Konrad Rudolph

16
괄호를 포함하여 삭제할 수 있습니까? (그래, 난 내 자신의 질문에 대답 dab=>하면 삭제 의 괄호를 포함하는 블록 ()
bantic

5
나는 투표한다. 또한 괄호 안의 단어를 수정하려면 ciw을 수행 하십시오 .
개발자 Marius Žilėnas

5
+1! 최근에 텍스트 객체 동작을 발견했을 때 마음이 날랐습니다! 더 이상 가득 차면 텍스트에 대한 권리 자리에 위치에 커서를 시도하지 : D를
verboze

36

한 쌍의 괄호 안에있는 모든 항목을 삭제하려면 언제든지 발행 di(및 파생 상품을 발행 할 수 있습니다 .

노트 :

@porglezomb이 그의 의견에서 제안했듯이 ( "내부") a대신 i( "내부")를 사용하여 괄호를 포함시킬 수 있습니다. 그래서 사용하여 da(삭제의 모든 것을 내부 ()포함 (하고 ).

바로 바깥 괄호 안의 텍스트를 삭제합니다.

이 코드 줄에

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
                                ^       ^
                                |       |
                                 \_______\___---> Cursor range

커서가 위에서 언급 한 커서 범위 내에 있다고 가정하면 다음 명령을 실행할 수 있습니다.

di(   --> Deletes '5.0/9.0'
ci(   --> Substitutes '5.0/9.0'
yi(   --> Yanks '5.0/9.0'

괄호의 n 번째 외부 쌍 내부의 텍스트 삭제 :

괄호의 n 번째 외부 쌍 안에있는 모든 것을 잡으려면 n위 명령 앞에 추가하십시오 . 위와 같은 커서 위치로

2di(   --> Deletes '(5.0/9.0) * (fahr-32)'
2ci(   --> Substitutes '(5.0/9.0) * (fahr-32)'
2yi(   --> Yanks '(5.0/9.0) * (fahr-32)'

3di(   --> Deletes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3ci(   --> Substitutes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3yi(   --> Yanks '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'

3
a대응 하는 메모를 추가해야합니다. i왜냐하면 많은 사람들에게 도움이 될 것입니다.
porglezomp

@ romandas 이것은 허용되는 질문이어야합니다. 나는 오늘 똑같은 문제를 찾고 있었고 @Kevin이 유일하게 정답을 제공합니다. 물론 %이 문제에 대해 "오용"할 수 는 있지만 시간이 더 걸리고 더 복잡한 시나리오에만 사용해야합니다. 특정 범위 내에서 무언가를 삭제하는 것은 정확히 유스 케이스 di입니다.
daniel451

19

d%삭제 및 y%king 킹에 사용할 수 있습니다 .


3
%는 "일치 괄호, 대괄호 또는 중괄호"의 이동 지정자입니다. 모든 이동 사양은 d 및 y (및 기타 여러 가지)와 쌍을 이룰 수 있습니다.
혼돈

10

첫 번째 괄호에 커서를 놓은 후 v%y또는 을 누릅니다 v%d.


3
큰! %는 일치하는 Paren으로 이동합니다. 따라서 d %와 y %를 사용할 수도 있습니다.

1
또한 'd %'는 함수 이름의 시작 부분에서 시작할 수 있으며 전체 함수 호출을 삭제합니다. 또한 '{}', '[]'및 '<>'쌍에도 작동합니다.
Jonathan Leffler

@ Leffler, 팁 주셔서 감사합니다! 그리고 %는 비주얼 모드에서도 작동한다는 것을 아는 것이 좋습니다.
strager

3

ci [block-surrounder]를 사용해보십시오

귀하의 경우에는 커서를 두 괄호 사이에 커서를 두어 키를 입력하십시오 (ci (


거의. 이것을 테스트하면 커서가 사이에 있지 않고 첫 번째 괄호 안에 있어야하는 것처럼 보이고 'c'는 변경 명령입니다. 커서를 여는 괄호에 놓고 'di ('는 일치하는 닫는 괄호와 'yi (')를 삭제합니다.
Richard Neish

ci는 항상 나를 위해 일합니다. 내가해야 할 일은 커서를 삭제해야 할 텍스트 블록을 둘러싼 괄호 사이에 두는 것입니다.
Justin Nguyen

2

같이 대답 , 데이비드 노먼의 말씀

첫 번째 괄호에 커서를 놓고 v%y또는 v%d.

에서 설명 http://vimdoc.sourceforge.net/htmldoc/vimindex.html의 :

일반 모드에서 태그 문자 참고 조치        
-------------------------------------------------- ----------------------------
| v | v 문자 별 시각 모드 시작
| % | % 1에서 다음 (곱슬 / 사각) 괄호를 찾습니다.
                                       이 줄과 일치하거나
                                       일치하는 주석 괄호 또는 일치하는 항목으로 이동
| d | [ "x] d {motion} 2 삭제 Nmove 텍스트 [버퍼 x로]

%, 선택 사항을 시각적으로 표시하면서 ( ) 두 괄호 ( )를 포함하여 그 사이의 모든 항목을 v선택한 다음 얀크 / 복사 y또는 삭제 / 잘라 d냅니다. (기본 버퍼로)

로 붙여 넣기 / 붙여 넣기를 할 수 있습니다 p.

"물고기를 가르쳐라"라는 대답을 했다 .


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