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

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

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

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

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



답변

다양한 동작 : %

%명령은 커서 아래 항목의 일치로 이동합니다. 커서를 여는 (또는 닫는) 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관련 명령의 전체 목록을 참조하십시오 .


답변

어떤 약 dib이나 di(.

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

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


답변

한 쌍의 괄호 안에있는 모든 항목을 삭제하려면 언제든지 발행 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))'


답변

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


답변

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


답변

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

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


답변

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

첫 번째 괄호에 커서를 놓고 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.

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