저는 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