用注释字符包围多行注释的VIM脚本

用注释字符包围多行注释的VIM脚本,vim,Vim,对于我工作地点的标题样式注释(包括文件中主要的新代码部分),我们使用以下标准: ################################## # This is a multiline comment # # and we've surrounded it by the # # comment symbol. # ################################## 如果有一个长的多行注释(在描述性标题中经常有),这可能需要一分钟的时

对于我工作地点的标题样式注释(包括文件中主要的新代码部分),我们使用以下标准:

##################################
# This is a multiline comment    #
# and we've surrounded it by the #
# comment symbol.                #
##################################
如果有一个长的多行注释(在描述性标题中经常有),这可能需要一分钟的时间。这是一项如此琐碎的任务,我想把它自动化。我的目标是编写一个脚本,允许我选择一个范围(在视觉模式下),输入命令,并输入注释字符,从而将所选行封闭在一个类似于上面的框中。我曾经尝试过一些VIM脚本,但老实说,我以前从未编写过VIM脚本,我的代码非常混乱,我认为发布它实际上会对事业有害


关于如何构建这个插件,有什么建议吗?

我建议在重新设计轮子之前,先深入研究一下这两个插件中的任何一个,或者这些插件是否具有所需的功能。如果不是,他们的来源可以是一个很好的起点。

你不需要“分钟”来完成这项工作。有了vim的
ctrl-v
块选择和
I或c
r(replace)
,你就可以很容易地做到这一点。但是,如果您需要每天执行100次,此小功能可能会帮助您:

let g:wrap_char = '#'
function! WrapThem() range
    let lines = getline(a:firstline,a:lastline)
    let maxl = 0
    for l in lines
        let maxl = len(l)>maxl? len(l):maxl
    endfor
    let h = repeat(g:wrap_char, maxl+4)
    for i in range(len(lines))
        let ll = len(lines[i])
        let lines[i] = g:wrap_char . ' ' . lines[i] . repeat(' ', maxl-ll) . ' ' . g:wrap_char
    endfor  
    let result = [h]
    call extend(result, lines)
    call add(result,h)
    execute a:firstline.','.a:lastline . ' d'
    let s = a:firstline-1<0?0:a:firstline-1
    call append(s, result)
endfunction
让g:wrap_char='#'
功能!WrapThem()范围
let line=getline(a:firstline,a:lastline)
设maxl=0
对于l行
设maxl=len(l)>maxl?len(l):maxl
外循环
设h=重复(g:wrap_char,maxl+4)
对于范围内的i(len(行))
设ll=len(行[i])
让行[i]=g:wrap_char''。行[i]。重复(“”,maxl ll)。“”。g:包裹字符
结束
让结果=[h]
调用扩展(结果、行)
呼叫添加(结果,h)
执行a:firstline.,'.a:lastline.'d'

设s=a:firstline-1您使用什么创建GIF?这太棒了!这太棒了,我从你的资料中学到了很多。非常感谢你为我整理了这个!应该注意的是,这只适用于可打印的ASCII字符。制表符或任何非ASCII字符将中断正确对齐
len()
是字节长度;您需要改用
strdisplaywidth()
@英戈卡卡特,你完全正确。非常感谢您指出这一点。@alfredodeza这是拜占兹,有我自己的包装:“公司标准”很难维持;即使在非常强大的Vim中,您也需要一个复杂的函数来实现这一点,因此在其他编辑器中它不会更容易/自动化。至少删除尾随对齐的
#
字符;这使得格式化更容易。@alaprise仅供参考::)