2013-07-16 1 views
3

많은 JSON으로 작업합니다. JSON의 전체 블록을 다루기를 원할 것입니다 - 전체 블록을 선택하고, 블록을 삭제하고, 이동하는 등의 방법이 있습니다. 키와 값을 결합하여 작동하는 방법이 있습니까?Vim 삭제/yank/JSON 또는 javascript 객체에서 키/입력 블록 복사

목업 : 그것은 (내가 원하지 않는 것을) 같은 둥지 수준에있는 모든 어린이를 선택하기 때문에

vim delete json key mockup

viB 같은 움직임이 경우 작동하지 않습니다. 나는 완전한 블록을 원하고 커서가 무엇이든간에 그 블록만을 원한다.

+0

'bv % l '또는'V %'를 제외하고, 플러그인이 없다면 거의 자신 만의 스크립트를 만들어야합니다. – Kevin

+2

그런 식으로 포맷 된 경우 'V % d'이 (가) 작업을 수행해야합니다. –

+0

시각적 인 작업은 이에 해당하는 정상적인 연산자가 없습니까? –

답변

1

Argumentative이라는 인수/매개 변수에서 작동하는 플러그인을 만들었습니다. Argumentative는 새로운 텍스트 객체 인 i,a,을 제공합니다. 또한 >,<,을 통해 인수를 이동할 수 있습니다. 비슷한 일을하는 다른 플러그인이 있다고 확신합니다.

3

vim-textobj-user을 사용하면 원하는대로 텍스트 개체를 정의 할 수 있습니다.

call textobj#user#plugin('textobj-syntax-is-garbage', { 
\ 'regex_j': { 
\  'select': 'aj', 
\  '*pattern*': '^\s*"\?\w\+"\?\s*:\s*{\_[^}]*}.*\n\?', 
\ }) 

중첩 된 JSON 블록에 대한하지 작업 :(하지만

aj 당신을 의미 사용 사례에 대한 작동합니다 : 여기에 그냥 쓴 당신의 기준과 일치하는 블록을 선택하는 일입니다 실행할 수 V J 또는 D J 또는 너의 작은 마음이 바라는대로.

설명 : 옵션 따옴표

와 키에 라인의 시작부터

^\s*"\?\w\+"\?\s*:\s*{

일치 (단어 문자)

\_[^}]*

닫는 젖꼭지 브래킷이 아니다

일치 아무것도 . \_은 여러 줄에 걸쳐 일치를 의미합니다.

}.*\n\?

일치 닫는 젖꼭지 브래킷, 당신은 블록을 삭제 한 후 그 라인이 주변에 휴식 방치하지 않도록 선택 바꿈.

이 정규식을 분명히 향상시킬 수 있습니다. 아마도 정규식으로 올바른 중첩 된 블록 선택을 수행하는 것은 불가능하지만 textobj-entire를 사용하면 실행할 함수를 지정할 수 있다고 생각합니다.