2008-09-23 3 views
4

나는 #define (#if WIN, #if UNIX 등)으로 구분 된 많은 플랫폼의 C/C++ 코드로 작업합니다. vim이 파일을 열 때 현재 관심이없는 부분을 자동으로 접을 수 있다면 좋을 것입니다. vim 스크립트 아카이브를 검색했지만 유용한 것은 없습니다. 어떤 제안? 시작할 장소?vim에서 #defines를 자동으로 접을

답변

7

은 그냥 파일과 정력 의지의 처음 10 또는 마지막 10 줄에 주석으로 해당 명령을 추가 할 수 http://vim.wikia.com/wiki/Syntax_folding_of_Vim_scripts#Syntax_definitions

:syn region myFold start="\#IF" end="\#ENDIF" transparent fold 
:syn sync fromstart 
:set foldmethod=syntax 
+0

이것이 내가 vim을 좋아하는 이유입니다. 하하. –

+0

나는 vim 7.0을 사용하고, .vimrc의 끝에 3 줄을 넣었지만, 내 파일의 일부 섹션이 임의로 접히는 것을 볼 수있다. 누군가 다음 단계를 수행하기위한 정확한 단계를 게시 할 수 있습니까? 1. 환경 변수 (예 : #ifdef가 있고 env 변수가 설정되어 있지 않으면 폴드합니다. 2. ifdefs를 모두 접으십시오 (계층 관계가 깊다하더라도).보고 싶다면 zo를하십시오. – 0fnt

+1

구체적으로, 새로운 질문을하거나, vim 메일 링리스트 (http://www.vim.org/community)에 게시하는 것이 좋습니다.PHP) – hometoast

2

이 대답을 @hometoasts에 추가하여 구문 접이식 지역을 추가 해당 파일에 대해 자동으로 사용합니다.

 
    /* vim: syn region regionName start="regex" end="regex": */ 

+0

"modelines"을 잊어 버렸습니다. 일회용으로 딱 맞습니다. – hometoast

0

덴튼의 첨가 빠른 추가 : 어떤 C 또는 C++ 코드로 새로운 구문 규칙을 사용 $VIMRUNTIME/syntax/c.vimcpp.vim에 파일을 추가합니다. ($VIMRUNTIME은 로컬 Vim 코드가있는 위치입니다. Unix에서는 및 end의 값은 정규 표현식이므로 및 ^#endif을 사용하여 a의 시작 부분에서 해당 문자열과 일치하는지 확인하십시오. 선.

0

나는 항상 forldmethod = marker를 사용하고 댓글 내에 배치 된 내 자신의 fold 태그를 정의했습니다.

이것은 열기 및 닫기 접기를 정의하는 문자를 정의하기위한 것입니다. 이 경우 open은 "< ("및 닫기는 ")>"원하는대로 바꾸십시오.

set foldmethod=marker 
set foldmarker=<(,)> 

이 접힌 텍스트로 표시할지 결정하기 위해 내 사용자 정의 함수입니다 : 도움이

set foldtext=GetCustomFoldText() 
function GetCustomFoldText() 
    let preline = substitute(getline(v:foldstart),'<(','<(+)','') 
    let line = substitute(preline,"\t",'  ','g') 
    let nextLnNum = v:foldstart + 1 
    let nextline = getline(nextLnNum) 
    let foldTtl = v:foldend - v:foldstart 
    return line . ' | ' . nextline . ' (' . foldTtl . ' lines)>' 
endfunction 

희망.

0

나는 거대한 코드베이스를 가지고 있으므로 수많은 #define이있다. 각 파일에는 수많은 # ifdef의 이 있고 대부분 중첩되어 있습니다. vim 스크립트를 많이 사용했지만 항상 그들은코드를 가지고 오류가 발생했습니다. 그래서이

GCC처럼 을 결국 내가 헤더 파일에 내 모든 정의를 넣어 내가 작업하고 싶은 파일에 포함하고 그 위에 GCC했다 -E -C -P source.cpp> output.cpp

-E 명령은 파일의 전 처리기 만 실행하도록 gcc를 가져 오므로 정의되지 않은 # ifdef 내에있는 원치 않는 모든 코드가 제거됩니다. -C 옵션은 파일에 주석을 유지합니다. -P 옵션은 선행 처리기의 출력에서 ​​선 표시 (linemarker) 생성을 금지합니다.

관련 문제