![Vim - 구문 강조는 전체 줄이 주석 처리되었는지 여부에 따라 달라집니다.](https://linux55.com/image/111718/Vim%20-%20%EA%B5%AC%EB%AC%B8%20%EA%B0%95%EC%A1%B0%EB%8A%94%20%EC%A0%84%EC%B2%B4%20%EC%A4%84%EC%9D%B4%20%EC%A3%BC%EC%84%9D%20%EC%B2%98%EB%A6%AC%EB%90%98%EC%97%88%EB%8A%94%EC%A7%80%20%EC%97%AC%EB%B6%80%EC%97%90%20%EB%94%B0%EB%9D%BC%20%EB%8B%AC%EB%9D%BC%EC%A7%91%EB%8B%88%EB%8B%A4..png)
접힌 부분의 각 줄이 주석인지 공백인지에 따라 vim 강조 표시 접기가 다르게 가능합니까? 그렇다면 어떻게 될까요?
답변1
모든 접기에는 하나의 강조 그룹만 있으므로 접기 강조 표시를 변경할 수 없습니다(:help hl-Folded
). 축소 특성을 맞춤설정하여 '모든 댓글'을 표시할 수 있습니다.fold-foldtext
;예를 들어 COMMENTED:
앞에 .를 추가하면 다음과 같습니다.
+-- 3 lines: # some stuff here
COMMENTED: +-- 3 lines: # comment
command 2
command 3
솔루션의 두 번째 부분은 접힌 부분 내의 모든 줄이 실제로 주석인지 확인하는 것입니다. 이는 쿼리 구문 강조를 통해 수행할 수 있습니다(synID()
) 이는 일반적이지만 번거롭고 잠재적으로 느릴 수도 있습니다. 주석 접두사가 포함된 완전히 주석 처리된 줄에 관심이 있다면 다음과 같이 시작할 수 있습니다.'comments'
현재 파일 형식을 대상으로 하고 수동으로 일치시킵니다. (내 거Ingo 라이브러리 플러그인하나 있다기능관심 있는 것이 간단한 공통 주석 접두사 #
(셸 스크립트, Perl 등에서 사용되는)뿐이라면 다음과 같이 간단한 패턴 일치를 사용할 수 있습니다.
function! CommentIndicator()
for l:lnum in range(v:foldstart, v:foldend)
if getline(l:lnum) !~# '^\s*#'
" This fold is not fully commented.
return ''
endif
endfor
return 'COMMENTED: '
endfunction
let &foldtext = 'CommentIndicator() . foldtext()'
답변2
예. 실제로 foldmethod=expr
.
예를 들어:
set foldmethod=expr foldexpr=getline(v:lnum)=~'^\s*'.&commentstring[0]
비슷한 질문에 대한 전체 답변은 여기에서 볼 수 있습니다. [1].