해제 - vim 및 c++ 11 lambda:자동 들여 쓰기




파이썬 전체 들여 쓰기 (4)

Michael Small의 프로젝트가 있습니다. 아직 시도하지는 않았지만 아마도 당신이 찾고있는 것일 수도 있습니다.

vim을 c ++ 11 람다 함수와 함께 사용하면 실제로 빈약합니다. 들여 쓰기가 작동하지 않고 많은 괄호가 잘못된 것으로 표시됩니다.

c 및 c ++에 대한 들여 쓰기 및 구문 강조 표시는 ac [...] .vim 파일을 통하지 않고 내부적으로 프로그래밍된다는 것을 알고 있습니다. C ++ 11에서 vim을 설정할 수있는 기회가 있습니까? 특히 람다 함수가있는 소스 코드에 적합합니까? 어쩌면 누군가가 내부 vim 구문 검사에서 lambda 구문 분석을 추가하는 방법과 위치를 알 수 있습니까?

편집 : (코멘트에서 요청한 예제 코드)

코드는 다음 예제와 같아야하지만 단일 열로 형식이 지정됩니다.

  MyLoop( [](int a, int b){
        {       
            ::i++;
            for (;;)
            {   
                SomeFunc();
            }   
            cout << "Result: " << a*b<<endl;
        }       
    });    

vim 7.4 업데이트 : 이제 vim은 더 이상 람다 식을 오류로 처리하지 않지만 람다 식에서 들여 쓰기를 수행하지 않으므로 더 이상 C ++에서는 사용할 수 없습니다 .--(

BTW : vim 환경에 추가 할 수있는 좋은 자동 서식 지정 도구가있어서 외부에서 키를 눌러 서식을 지정할 수 있습니까?


Vim 7.4에는 "Java Java 익명 클래스 들여 쓰기"에 대한 jN cinoption이 있습니다. ( :help java-cinoptions ) 이것은 C ++ 11의 :help java-cinoptions 대한 들여 쓰기 동작을 향상시킵니다.

이 옵션들 (~ / .vim / after / ftplugin / cpp.vim에 넣으십시오) :

setlocal cindent cino=j1,(0,ws,Ws

그리고 for 루프의 여는 중괄호를 같은 줄로 이동하면 (그렇지 않으면 미친 듯) 다음과 같이 vim은 코드를 들여 씁니다.

MyLoop( [](int a, int b){
    {       
        ::i++;
        for (;;) {   
            SomeFunc();
        }   
        cout << "Result: " << a*b<<endl;
    }       
});   

당신이 원하는 걸 들여 쓰기를 제공하지 않습니다. 초기 여는 중괄호를 자신의 줄로 이동하면 원하는 걸기 들여 쓰기를 얻을 수 있습니다.

모든 옵션에 대해서는 :help cinoptions-values 참조하십시오.

똑똑한 들여 쓰기 프로그램을 원한다면 이 사용자는 set equalprg=clang-format 을 사용하여 ClangFormat 을 사용하도록 ClangFormat 그래서 =ip 는 현재 단락을 들여 ClangFormat 됩니다. 이것은 vim이 입력 할 때 정확하게 들여 쓰기를하지는 않을 것입니다 (indentexpr을 설정해야하는데 꽤 복잡합니다).

equalprg를 설정하는 것과 같지만 코드가 더 많은 vim 플러그인 이 있습니다. 그것이 더 좋은지 확실하지 않습니다. 그것은 clang-format.py (Cyprian Guerra의 답변에서) 대신 사용할 수 있습니다.


난 그냥 며칠 동안 이걸로 고투, incentent와 smartindent에 토글처럼 보이는 내가 C ++ 11에서 람다 들여 쓰기와 함께 나를 도왔습니다.

~ / .vimrc에서

set cindent
set smartindent

희망은 이것이 들여다 보는데 도움이되기를 바랍니다.


당신이 찾고있는 것 같다 LLVM들로부터 clang-format.py 또는 Linda_pp 일명 rhysd (후자에 대한 감사 idbrii) - vim clang 형식 - 둘 다 clang 사용 따라서 모두 C + + 11의 새로운 구조를 모두 지원하고 다음과 같이 실행할 수 있습니다.

:pyf ~/src/llvm.git/tools/clang/tools/clang-format/clang-format.py

또는 : ClangFormat

후자는 다른 기능 중에서도 특히 VIM 애드온 관리자 (예 : VAM)를 사용할 때 "모든 환경에서 동일한 동작을위한 하나의 구성 파일"규칙을 따르는 것이 더 좋습니다.





c++11