是否可以在代码块周围创建ASCII注释框?
;
是注释字符。 这是一个例子。
之前
; Convert to radians
theta45 = (theta + 45.)/!RADEG
theta90 = (theta + 90.)/!RADEG
theta = theta / !RADEG
Ey = Ey * normal
; Engineering shear strain
Gxy = shear * Exy
后
; -----------------------------------------;
; Convert to radians ;
theta45 = (theta + 45.)/!RADEG ;
theta90 = (theta + 90.)/!RADEG ;
theta = theta / !RADEG ;
Ey = Ey * normal ;
;
; Engineering shear strain ;
Gxy = shear * Exy ;
; -----------------------------------------;
到目前为止我尝试了什么
'<,'>s/^\(\s*\)\(.*\)$/\=join([submatch(1), ';', submatch(2), repeat('-', 50-len(submatch(1)) - len(submatch(2))), ';'], '')
注意我首先选择了一个视觉块。
有关的问题
以下是它的外观:
;; Convert to radians ------------------;
;theta45 = (theta + 45.)/!RADEG------------------;
;theta90 = (theta + 90.)/!RADEG------------------;
;theta = theta / !RADEG ------------------;
;Ey = Ey * normal ------------------;
;--------------------------------------------------;
;; Engineering shear strain ------------------;
;Gxy = shear * Exy ------------------------;
虽然它与我想要得到的并不是很接近。我只能做到这一点!
感谢您的阅读和帮助。
答案 0 :(得分:1)
这个怎么样:
<esc>'>o;<esc>'<O;<esc>v'>j:norm 51A <C-v><esc>51|Dr;<cr>:'<s/ /-/g<cr>:'>&&<cr>
说明:
首先,我们需要添加额外的行。所以我们<esc>
视觉模式,跳到我们之前选择的结尾并添加一个带分号的换行符。 '>o;<esc>
。然后,跳回上一个选择的开头,并向上添加一个带分号的换行符'<O;<esc>
。现在,我们需要在此行上启动可视模式,跳转到上一行,再添加一行v'>j
。现在,缓冲区看起来像这样:
;
Here
are
a whole bunch of
uneven
lines
;
并且它都是视觉选择的。然后,我们需要将每一行填充到50个空格。所以,
:norm 51A <C-v><esc>51Dr;
首先添加51个空格,然后跳转到第51列,删除到最后,并用分号替换第50个。现在我们的缓冲区看起来像这样:
; ;
Here ;
are ;
a whole bunch of ;
uneven ;
lines ;
; ;
现在,我们只是在选择的开头用空格代替短划线:
:'<s/ /-/g<cr>
并在选择结尾处执行相同的替换:
:'>&&<cr>
现在缓冲区看起来像这样:
;-------------------------------------------------;
;Here ;
;are ;
;a whole bunch of ;
;uneven ;
;lines ;
;-------------------------------------------------;
显然,为方便起见,您可能希望将其包装在映射,函数或宏中。
答案 1 :(得分:0)
这是一个改进(分为几行以便于阅读):
:'<,'>s/.*/\=submatch(0) . repeat(' ', 50-len(submatch(0)) + 2) . ';'/ |
\ '>put ='; ' . repeat('-', 50) . ';' |
\ '<put! ='; ' . repeat('-', 50) . ';' |
\ nohlsearch
:put
);您可以使用视觉选择标记('<
和'>
)来解决选择的边界问题。表达式寄存器=
允许生成行。:nohlsearch
清除搜索突出显示结果如下:
; --------------------------------------------------;
; Convert to radians ;
theta45 = (theta + 45.)/!RADEG ;
theta90 = (theta + 90.)/!RADEG ;
theta = theta / !RADEG ;
Ey = Ey * normal ;
;
; Engineering shear strain ;
Gxy = shear * Exy ;
; --------------------------------------------------;
仍有一些问题:
如果您真的想进一步发展,我建议的第一步是将所有命令放入:function
。
您可能还想查看我的AlignFromCursor plugin,它解决了类似的问题(如果只是为了实现问题的完全复杂性: - )。
最后,我要提一下,这种基于对齐的格式化是高维护的(也可以考虑一下可能需要编辑的非Vim同事),最好避免使用。