Vim, 상황에 맞는 주석/주석 해제 동작

Vim, 상황에 맞는 주석/주석 해제 동작

저는 Vim을 사용하여 많은 PHP 코드를 편집하고 .vimrc.

나는 현재 이 두 매크로를 사용하여 C 스타일의 주석/주석 해제를 수행합니다.

"c-style (//) comment (press the [.] key)
au FileType php vnoremap . :s/^\(\s*\)\(.\+\)$/\1\/\/\2/<CR>:noh<CR>gv
"c-style (//) uncomment (press the [,] key)
au FileType php vnoremap , :s/^\(\s*\)\/\//\1/<CR>:noh<CR>gv

HTML 스타일의 두 가지 주석/주석 해제

"html-style (<!-- -->) comment (press the [.] key)
au FileType html vnoremap . :s/^\(\s*\)\(.\+\)$/\1<!-- \2 -->/g<CR>:noh<CR>gv
"html-style (<!-- -->) uncomment (press the [,] key)
au FileType html vnoremap , :s/^\(\s*\)<!-- \(.*\) -->/\1\2/g<CR>:noh<CR>gv

이러한 매크로는 의도한 파일 형식에 적용하면 잘 작동하지만 HTML이 PHP 파일에 포함되는 경우가 많기 때문에 PHP 주석 스타일은 쓸모가 없습니다.

Vim이 PHP 파일 내에서 HTML 코드 블록을 처리하고 있는지 감지한 다음 올바른 주석 동작을 적용할 수 있는 방법이 있나요?

편집: 파일 형식을 수동으로 설정할 수 있고 사용 가능한 플러그인이 있다는 것을 알고 있습니다. 더 나은 매크로 작성에 대해 자세히 알아보고 싶습니다.

답변1

원하는 것을 수행하려면 함수를 작성하고 이를 원하는 키에 매핑하는 방법은 실제로 없습니다.

먼저 :echo synIDattr(synID(line("."), col("."), 1), "name")커서 아래의 현재 단어에 대한 강조 그룹 이름이 인쇄됩니다.

이 정보를 사용하여 사용할 주석 스타일을 결정할 수 있습니다.

시작하기 위한 대략적인 예:

function! s:MyComment () range
    for i in range(a:firstline, a:lastline)
        exe "normal " . i . "gg"
        normal ^
        let stuff = synIDattr(synID(line("."), col("."), 1), "name")
        if strpart(stuff, 0, 4) == "html"
            normal I<!-- 
            normal A -->
        else
            normal I//
        endif
    endfor
endfunction
vmap <silent> . :call <SID>MyComment()<CR>

답변2

사용할 댓글 유형을 수동으로 선택해도 괜찮다면 다음을 권장합니다.힌트.

기억해야 할 4가지 조합이 있습니다.

C-style:
,* comment  
,c uncomment

HTML style: 
,< comment 
,d uncomment

관련 정보