Vim, bağlama duyarlı yorum / rahatsızlık verme davranışı


9

Vim ile çok fazla PHP kodu düzenledim ve bazı makroları içeren bir engelle karşılaştım .vimrc.

Şu anda bu iki makroyu C stilinde yorum / yorum yapmak için kullanıyorum

"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

Ve bu ikisini HTML tarzında yorumlamak / açmak

"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

Bu makrolar, amaçlanan dosya türlerine uygulandığında iyi çalışır, ancak genellikle bir PHP dosyasının içine gömülü HTML bulunduğundan, PHP yorum stili işe yaramaz.

Vim'in bir PHP dosyasının içindeki bir HTML kodu yığını üzerinde çalışıp çalışmadığını algılaması ve ardından doğru yorumlama davranışını uygulamasının bir yolu var mı?

Düzenleme: Ben el ile dosya türünü ayarlamak ve bunun için kullanılabilir eklentileri olduğunu biliyorum, daha iyi makrolar yazma hakkında daha fazla bilgi edinmek istiyordu.


Yanıtlar:


2

İstediğinizi yapmak için, bir işlev yazmanın ve tercih ettiğiniz tuşları eşleştirmenin bir yolu yoktur.

Başlamak için :echo synIDattr(synID(line("."), col("."), 1), "name"), imlecin altındaki geçerli kelimenin vurgulama grubunun adını yazdıracaktır.

Hangi bilgileri kullanacağınızı belirlemek için bu bilgileri kullanabilirsiniz.

Başlamanız için kabaca bir örnek:

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

Hangi tür yorumu kullanmak istediğinizi manuel olarak seçmeyi kabul etmeniz durumunda, bu ipucunu tavsiye ederim .

Hatırlamanız gereken 4 kombinasyonunuz olacaktır:

C-style:
,* comment  
,c uncomment

HTML style: 
,< comment 
,d uncomment
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.