自写vim插件ldoc.vim,提供智能的lua注释代码补全
来源:互联网 发布:徐州共享网络 编辑:程序博客网 时间:2024/05/17 23:58
LDoc是一个Lua的文档生成工具,详细介绍见,LDoc的Github主页,但是在vim中手写注释较为复杂,然后看了下vim script,自己写了一款vim插件,用于自动生成模块注释,类型注释和函数注释,方便开发。将此文件命名为ldoc.vim放在~/.vim/plugin目录下使用:将光标移动到需要注释的当前行,然后在命令模式下,输入LdocM,LdocT,LdocF分别进行模块注释,类型注释和函数注释,也可通过map自行映射快捷键
- 关于vim script的参考文档 http://vimdoc.sourceforge.net/htmldoc/usr_41.html
- 关于ldoc的介绍 http://keplerproject.github.io/luadoc/manual.html
" http://vimdoc.sourceforge.net/htmldoc/usr_41.html"""""""""""""""""""""""""""""" 工具函数"""""""""""""""""""""""""""""function! s:warnMsg(msg)echohl WarningMsgecho a:msgechohl Noneendfunction" 插件重复性加载的冲突检测if exists("loaded_ldoc_ddc")call s:warnMsg("Ldoc Already Loaded!")finishendiflet loaded_ldoc_ddc = 1"""""""""""""""""""""""""""""" 全局注释变量"""""""""""""""""""""""""""""if !exists("g:ldoc_startBeginCommentTag")let g:ldoc_startBeginCommentTag = "----------------------------------------"endifif !exists("g:ldoc_startEndCommentTag")let g:ldoc_startEndCommentTag = "----------------------------------------"endifif !exists("g:ldoc_startNoteCommentTag")let g:ldoc_startNoteCommentTag = "--- "endifif !exists("g:ldoc_startFlagCommentTag")let g:ldoc_startFlagCommentTag = "-- "endif"""""""""""""""""""""""""""""" 全局标记状态变量"""""""""""""""""""""""""""""if !exists("g:ldoc_flagAuthor")let g:ldoc_flagAuthor = "@author "endifif !exists("g:ldoc_flagType")let g:ldoc_flagType = "@type "endifif !exists("g:ldoc_flagParam")let g:ldoc_flagParam = "@param "endifif !exists("g:ldoc_flagReturn")let g:ldoc_flagReturn = "@return "endif"""""""""""""""""""""""""""""" 写入函数" 详细参见append函数,参数2可直接传入列表"""""""""""""""""""""""""""""function! s:writeToNextLine(str)call append(line("."), a:str)endfunctionfunction! s:writeToPrevLine(str)call append(line(".")-1, a:str)endfunction"""""""""""""""""""""""""""""" 模块的注释"""""""""""""""""""""""""""""function! <SID>ldoc_moduleComment()if !exists("g:ldoc_authorName")let g:ldoc_authorName = input("输入作者名(忽略将使用当前用户名):")endifif(strlen(g:ldoc_authorName) == 0)let l:whoami = system("whoami")let g:ldoc_authorName = substitute(l:whoami, '\n', "", "")echo g:ldoc_authorNameendiflet l:moduleDesc = input("输入模块的简单说明(可直接回车,稍后填写):")mark llet l:writeText = [g:ldoc_startBeginCommentTag]let l:markJump = 0let l:str = g:ldoc_startNoteCommentTagif(strlen(l:moduleDesc) == 0)let l:markJump = 1elselet l:str = l:str . l:moduleDescendifcall add(l:writeText, l:str)call add(l:writeText, g:ldoc_startFlagCommentTag . g:ldoc_flagAuthor . g:ldoc_authorName)call add(l:writeText, g:ldoc_startEndCommentTag)call s:writeToPrevLine(l:writeText)if(l:markJump == 1)exec "normal " . (line(".") - len(l:writeText) + 1) . "G$"elseexec "normal 'l"endifendfunction"""""""""""""""""""""""""""""" 类型的注释"""""""""""""""""""""""""""""function! <SID>ldoc_typeComment()let l:curLineStr = getline(line("."))let l:typeNameList = matchlist(l:curLineStr, 'local[ \t]\+\([a-zA-Z0-9_]\+\)[ \t]\+')if(len(l:typeNameList) < 2)call s:warnMsg("获取type失败,call jncpp@qq.com")returnendiflet l:typeName = l:typeNameList[1]let l:typeDesc = input("输入类型的简单说明(可直接回车,稍后填写):")mark llet l:writeText = []let l:markJump = 0let l:str = g:ldoc_startNoteCommentTagif(strlen(l:typeDesc) == 0)let l:markJump = 1elselet l:str = l:str . l:typeDescendifcall add(l:writeText, l:str)call add(l:writeText, g:ldoc_startFlagCommentTag . g:ldoc_flagType . l:typeName)call s:writeToPrevLine(l:writeText)if(l:markJump == 1)exec "normal " . (line(".") - len(l:writeText)) . "G$"elseexec "normal 'l"endifendfunction"""""""""""""""""""""""""""""" 函数的注释"""""""""""""""""""""""""""""function! <SID>ldoc_functionComment()let l:curLineStr = getline(line("."))let l:paramList = matchlist(l:curLineStr, 'function[ \t]\+\([a-zA-Z0-9_.:]\+\)[ \t]*(\([a-zA-Z0-9_, \t\.]*\))')if(len(l:paramList) >= 2)elselet l:paramList = matchlist(l:curLineStr, '\([a-zA-Z0-9_]\+\)[ \t]*=[ \t]*function[ \t]*(\([a-zA-Z0-9_, \t\.]*\))')if(len(l:paramList) < 2)call s:warnMsg("获取函数失败,call jncpp@qq.com")returnendifendiflet l:funcName = l:paramList[1]if(len(l:paramList) > 3)let l:paramList = split(l:paramList[2], '[ \t]*,[ \t]*')let l:paramList2 = []for l:ele in l:paramListcall add(l:paramList2, substitute(l:ele, '[ \t]+', "", ""))endforendifmark llet l:funcDesc = input("输入函数[" . l:funcName . "]的简单说明(可直接回车,稍后填写):")let l:writeText = []let l:str = g:ldoc_startNoteCommentTaglet l:markJump = 0if(strlen(l:funcDesc) == 0)let l:markJump = 1elselet l:str = l:str . l:funcDescendifcall add(l:writeText, l:str)for l:ele in l:paramList2let l:str = g:ldoc_startFlagCommentTag . g:ldoc_flagParam . l:elelet l:paramDesc = input("输入参数[" . l:ele . "]的简单说明:")if(strlen(l:paramDesc) > 0)let l:str = l:str . "\t" . l:paramDescendifcall add(l:writeText, l:str)endforcall s:writeToPrevLine(l:writeText)if(l:markJump == 1)exec "normal " . (line(".") - len(l:writeText)) . "G$"elseexec "normal 'l"endifendfunction"""""""""""""""""""""""""""""" 快捷键映射"""""""""""""""""""""""""""""command! -nargs=0 LdocM :call <SID>ldoc_moduleComment()command! -nargs=0 LdocT :call <SID>ldoc_typeComment()command! -nargs=0 LdocF :call <SID>ldoc_functionComment()
0 0
- 自写vim插件ldoc.vim,提供智能的lua注释代码补全
- vim的智能补全
- Vim智能补全插件YouCompleteMe安装
- Vim智能补全插件YouCompleteMe安装
- 【vim】插件管理及代码智能提示与补全环境的配置
- 【vim】插件管理及代码智能提示与补全环境的配置
- vim智能补全
- Vim-智能补全
- Vim代码补全插件:YouCompleteMe
- VIM插件: YouCompleteMe[代码自动补全]
- snipMate vim的自动补全代码段插件
- vim的代码补全插件(neocomplcache/neocomplete)
- vim 的python代码自动补全插件pydiction
- Vim代码补全插件YouCompleteMe的自动化安装[转]
- vim代码补全
- vim补全代码
- vim代码补全
- vim代码补全
- MapServer6.4.1教程学习--包含二个图层的静态地图(1-2)
- android之View和LinearLayout的重写(实现背景气泡和波纹效果)
- 赚砖啄组遵拽嘴滓滓棕昨姿走租壮注注装
- 总结:4大javaIDE比较 Eclipse, NetBeans, JDeveloper, and IntelliJ
- 单片机存储未满但却经常死机
- 自写vim插件ldoc.vim,提供智能的lua注释代码补全
- POJ 1001 Exponentiation
- gradle eclipse插件官方下载地址
- 没什么不同,献给即将走向未来的自己
- Linux 的硬链接与软链接(转)
- 使用位运算或使用
- C#开发之同步异步的体验
- 单一主机条件下根据域名跳转到逻辑意义上的不同web应用
- poj 1414