새 줄의 함수, 조건문 및 루프에 대해 괄호 형식을 지정하도록 VIM에 어떻게 지시합니까?

새 줄의 함수, 조건문 및 루프에 대해 괄호 형식을 지정하도록 VIM에 어떻게 지시합니까?

새 줄에 vim 형식 괄호를 만드는 방법이 있습니까?

예를 들어:

public class Foo {
    private Foo(int a) {
        if (a > 30) {
            // do stuff
        }
        for (int i = 0; i < a; i++) {
            // more stuff
        }
    }
}

다음과 같아야 합니다:

public class Foo
{
    private Foo(int a)
    {
        if (a > 30)
        {
            // do stuff
        }
        for (int i = 0; i < a; i++)
        {
            // more stuff
        }
    }
}

왜 이런가요? zc코드 블록의 형식이 두 번째 예와 같이 지정된 경우 VIM을 누르면 코드 블록이 보기 좋게 접혀지기 때문입니다 . 이 경우 VIM은 대괄호 안의 콘텐츠만 축소합니다. 첫 번째 예와 같이 코드 형식이 지정되면 VIM은 괄호 안의 내용뿐만 아니라 , if (...), for (....)등도 접 습니다 function f(). class Foo()그래서 VIM에게 두 번째 예와 같이 파일 형식을 지정하도록 지시하는 방법이 있는지 궁금합니다.

또 다른 옵션은 VIM에게 대괄호 앞에 오는 내용을 축소하지 않도록 지시하는 것입니다.

답변1

$예, 이 작업은 매우 쉽게 수행할 수 있습니다. line() 끝의 기존 "{" 문자를 캐리지 리턴() 및 새 "{" 으로 바꾼 \r다음 내용의 형식을 적절하게 지정하려면 다음 두 명령을 수행할 수 있습니다. 극단적인 경우에 대한 답변 끝의 편집):

:%s/{$/\r{

:%norm ==

첫 번째 명령은 다음을 수행합니다.

public class Foo 
{
    private Foo(int a) 
{
        if (a > 30) 
{
            // do stuff
        }
        for (int i = 0; i < a; i++) 
{
            // more stuff
        }
    }
}

두 번째 명령은 다음을 달성합니다.

public class Foo 
{
    private Foo(int a) 
    {
        if (a > 30) 
        {
            // do stuff
        }
        for (int i = 0; i < a; i++) 
        {
            // more stuff
        }
    }
}

( %위 명령의 표기법은 파일의 모든 줄에 적용된다는 의미입니다. 대신에 와 같이 범위를 지정하거나 :5,10s/{$/\r{와 같은 상대 줄 번호를 사용하거나 -2,+3s/{$/\r{, 시각적 모드에서 줄을 선택하고 을 클릭하고 : , 바꾸기 명령을 사용할 수 있습니다. 이 라인에 적용됩니다).

( 문단 서식을 =ap지정 하기 위해 서식을 적용할 수도 있습니다. 자세한 내용을 참조하세요.)a p:help =

편집하다

@blackyellow의 의견: 이것은 좋은 해결책이지만 한 가지 문제는 이미 올바른 형식의 줄을 "}"로 대체한다는 것입니다. 더 나은 패턴은 :%s/[^( |\t)]}$/\r{"}" 앞에 두 개의 공백이나 탭이 있는 경우 줄 끝을 "}"로 바꾸지 않는 것 입니다 . 이는 올바르게 들여쓰기될 수 있음을 나타냅니다.

관련 정보