Vim에서 논리 블록을 텍스트 객체로 처리하려면 어떻게해야합니까?


2

다음은 내가 매일하는 상황입니다.

0  .outer_selector {
1  
2   .inner_selector {
3     margin: 0;
4     padding: 0;
5
6     input { display: none; }
7   }
8
9  } 

지금 나는 잘라내어 붙여 넣기를 원한다. .inner_selector 다른 곳. 내가 어떻게 해? 나는 논리를 빨리 삭제할 수있는 방법을 찾지 못한다. .inner_selector 블록 공백을 둘러싼 다. 즉, dap 이 중괄호로 구분 된 블록의 경우 여기에 여러 가지 아이디어가 있습니다. ( aiii 매핑은 Vim-indent-obj 플러그인.)

  1. 3Gdai. 이 방법은 거의 효과가 있지만 닫는 중괄호는 .inner_selector 그것이 어디에 있는지 차단하십시오.

  2. 2Gdai. 좋지 않다; 전체를 삭제합니다. .outer_selector 블록.

  3. 2Gdii. 이것은 올바른 블록을 삭제하지만 주변 공백은 삭제하지 않습니다 (즉, dip 대신에 dap ).

  4. 2Gf{d%. 이동 {f{, 일치하는 중괄호로 삭제 ( d% ). 이렇게하면 2 행의 중괄호에서 해당 중괄호까지 텍스트가 삭제되지만 텍스트는 " .inner_selector ".

  5. 2Gf{v%okd. (4)와 동일하게 시작한 다음 선택한 텍스트의 맨 위로 이동합니다 ( o ), 한 줄 위쪽으로 확장 ( k ), 삭제 ( d ). 상기 (3)과 동일합니다.

  6. 3Gvaikojjd. 텍스트를 선택하고 추가로 한 행을 위로 선택하십시오 ( k ), 선택한 지역의 바닥으로 점프 ( o ), 두 줄 선택 ( jj ), 삭제 ( d ). 이 작동합니다.

나는 마지막 하나를위한 키보드 매핑을 정의 할 수 있고 그것으로 끝낼 수있다. 그러나 내가 그것을하기 전에 나는 여기서 뭔가를 놓치지 않을 것이라고 확신하고 싶다. 여러 언어로 된 일반적인 코드 구조이기 때문에 나는 이것을 다루기가 어렵다는 것에 놀랍니다. text { /* multiple lines /* } 텍스트 개체로, 또는 플러그인이 없다는 것을 의미합니다.

답변:


1

중괄호를위한 텍스트 객체가 있습니다. B 또는 { 또는 }.

공백 문자로 들어가면 .outer-selector 그러나 .inner-selector 당신은 그것으로 모든 것을 선택할 수 있습니다. Vi{ 내부의 모든 것을 선택 .outer-selector 바지 멜빵.

나는 또한 .inner-selector 달리기로 부품 Vi{ 내부 .inner-selector 그리고 나서 V 다시 모든 전체 라인을 차지하도록 강요합니다. 이렇게하면 주위에 공백이 생기지 않습니다. .inner-selector 그러나 나는 그것이 관심사일지도 모른다라고 생각했다.


1
감사합니다 카밀로! 나는 전체 라인을 선택하기 위해 다시 V를 치는 것에 대해 몰랐다. 멋진 트릭. (비록 나는 단지 그것과 함께 일할 수 있었지만 va{V, 아니라 vi{V) 맞습니다. 첫 번째 방법은 제 예제에서 완벽하게 작동합니다. 그러나, 만약 내가 여러 개 있다면 그것은 작동하지 않을 것이다. .inner_selectors 하나만 삭제하려고합니다.
Sasgorilla
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.