Vim, bình luận nhạy cảm theo ngữ cảnh / hành vi không chú ý


9

Tôi chỉnh sửa rất nhiều mã PHP bằng Vim và tôi đã gặp phải một số lỗi với một số macro .vimrc.

Tôi hiện đang sử dụng hai macro này để bình luận / không chú ý theo kiểu 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

Và hai điều này để bình luận / không chú ý theo kiểu 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

Các macro này hoạt động tốt khi được áp dụng cho loại tệp dự định của chúng, nhưng vì thường có HTML được nhúng trong tệp PHP, nên kiểu nhận xét PHP là vô dụng.

Có cách nào để Vim phát hiện xem nó có hoạt động trên một đoạn mã HTML bên trong tệp PHP không, và sau đó áp dụng hành vi bình luận chính xác?

Chỉnh sửa: Tôi biết rằng tôi có thể tự đặt filetype theo cách thủ công và có sẵn các plugin cho việc này, tôi đang tìm hiểu thêm về cách viết macro tốt hơn.


Câu trả lời:


2

Để làm những gì bạn muốn, thực sự không có cách nào để bắt đầu viết một hàm và ánh xạ nó tới các phím ưa thích của bạn.

Để bắt đầu :echo synIDattr(synID(line("."), col("."), 1), "name")sẽ in tên của nhóm tô sáng cho từ hiện tại bên dưới con trỏ.

Bạn có thể sử dụng thông tin đó để xác định phong cách bình luận nào sẽ sử dụng.

Một ví dụ sơ bộ để giúp bạn bắt đầu:

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

Trong trường hợp bạn có thể chấp nhận chọn thủ công loại bình luận nào bạn muốn sử dụng, tôi muốn giới thiệu mẹo này .

Bạn sẽ có 4 kết hợp cần nhớ:

C-style:
,* comment  
,c uncomment

HTML style: 
,< comment 
,d uncomment
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.