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


9

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

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

Vim이 PHP 파일 내부의 HTML 코드 덩어리에서 작동하는지 감지 한 다음 올바른 주석 동작을 적용하는 방법이 있습니까?

편집 : 파일 형식을 수동으로 설정할 수 있으며 사용할 수있는 플러그인이 있다는 것을 알고 더 나은 매크로 작성에 대해 더 많이 배우고 싶었습니다.


2
당신은 일종의 찾는 상대의 것 그래서 Vim은 이맥스의 MMM 모드로 아날로그 리드에, vim.wikia.com/wiki/...
질 'SO-정지되는 악'

답변:


2

원하는 것을하기 위해 실제로 함수를 작성하고 원하는 키를 매핑하는 방법은 없습니다.

시작하려면 :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>

0

사용하려는 설명 유형을 수동으로 선택할 수있는 경우이 을 사용하는 것이 좋습니다 .

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

C-style:
,* comment  
,c uncomment

HTML style: 
,< comment 
,d uncomment
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.