Vim,上下文敏感的注释/取消注释行为

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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

这些宏在应用于其预期的文件类型时工作正常,但由于PHP文件中经常嵌入HTML,因此PHP注释样式无用.

有没有办法让Vim检测它是否正在处理PHP文件中的一大块HTML代码,然后应用正确的评论行为?

编辑:我知道我可以手动设置文件类型,并且有可用的插件,我希望了解更多关于编写更好的宏.

解决方法:

要做你想做的事,实际上没有办法绕过写一个函数并将它映射到你喜欢的键.

首先: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>

脚本宝典总结

以上是脚本宝典为你收集整理的Vim,上下文敏感的注释/取消注释行为全部内容,希望文章能够帮你解决Vim,上下文敏感的注释/取消注释行为所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: