在Emacs for UVM/SystemVerilog中折叠展开代码块/注释部分
我目前使用emacs进行UVM测试台环境开发。我使用verilog模式和solarized主题。我喜欢我当前的设置,但是我想改进emacs的功能 我想为代码块/注释添加折叠展开功能 例如。 我有如下的课程在Emacs for UVM/SystemVerilog中折叠展开代码块/注释部分,emacs,system-verilog,uvm,Emacs,System Verilog,Uvm,我目前使用emacs进行UVM测试台环境开发。我使用verilog模式和solarized主题。我喜欢我当前的设置,但是我想改进emacs的功能 我想为代码块/注释添加折叠展开功能 例如。 我有如下的课程 class myClass ; function myFunction // variable define // more variable define begin //line 1 //line 2 //line 3
class myClass ;
function myFunction
// variable define
// more variable define
begin
//line 1
//line 2
//line 3
end
begin
//line1
//line2
//line3
end
endfunction //
endclass // myClass
如果我正在使用第二个(底部)开始结束块,我想折叠第一个(顶部)
后跟//的任何内容都是注释,可以用实际代码替换。
我可以用emacs来实现这一点吗?这里有一个例子,它使用
\begin{anything}
和\end{anything}
作为函数切换块
使用的开始和结束regexp来确定在这两点之间折叠所有内容的两点。原始海报可以将beg flag regexp
修改为类似于function1\\\\| function2\\\|function3\\\| function4
的格式,而结尾的regexp则类似于endfunction
。起点可能正好在function1
之后,这样当代码块折叠时,function1
仍然可见。需要对该功能进行额外的调整/修改,以满足原始海报的精确需求,但此示例应有助于演示使用大纲
库中的大纲标志区域
背后的一般概念
(defvar beg flag regexp(concat
“\\(\\\\begin\{\\)\\(”
"[^}]*"
"\\)\\(\}\\)" )
“匹配折叠区域开头的Regexp。”)
(卸载切换块()
当标志为非nil时,隐藏区域。否则使其可见。为此
函数,则光标必须与开始的regexp位于同一行。“
(互动)
(要求提供“大纲”)
(续)
((或
甜点
(查看beg flag REGEP)
点可以在反斜杠和字母n之前
(让((线路开始(保存偏移(线路1的开始)(点)))
(省去远足
(向后搜索“\\\\”行开始t)
(看着beg flag regexp)))
;点可以在\begin的右侧
(让((线路开始(保存偏移(线路1的开始)(点)))
(省去远足
(向后重新搜索“\\\\begin”行begin t)
(看着beg flag regexp)))
;点可以在\begin的左边
(让((线路终点(保存偏移(线路1终点)(点)))
(省去远足
(向前搜索“\\\\begin”行结束t)
(向后字符6)
(看着beg flag regexp)))
(让我们*(
(标志(非(获取字符属性(匹配端0)“不可见”))
(beg(比赛结束0))
结束
(基本标志匹配(regexp引号
(缓冲区子字符串无属性(匹配开始2)(匹配结束2)))
(结束标志匹配(concat“\\\\end\{”基本标志匹配“\}”)
(钓鱼(concat“\\begin\{”基本标志匹配“\}”))
(省去远足
(如果(重新搜索前端标志匹配零t)
(项目
(setq结束(点))
(轮廓标志区域beg结束标志)
(续)
(旗
(叠加放置(使叠加beg结束)“显示”\u25be”))
(t
(mapc'删除覆盖(beg end中的覆盖‘‘‘‘‘)’))
(用户错误“查找%s的结束匹配项时出错”“钓鱼”))
(如果(>(点)beg)
(goto char beg)
(t
(消息“抱歉,您不在包含起始regexp的行上。”))
第一步:将变量
beg flag regexp
和函数切换块
的整个代码粘贴到.emacs
文件中,然后重新启动emacs
第二步:打开一个空缓冲区,然后键入M-x文本模式RET
第三步:将以下示例复制并粘贴到刚刚创建的缓冲区中:
\开始{wisemonkey}Lorem ipsum dolor sit amet,成为一名杰出的领袖。苏打苏打的灵猫是活的,但它的伤口是软的。埃尼安·阿库姆桑·利奥·伊斯特,nec·尤伊斯莫·贝兰迪特。在密苏里州,在康瓦利斯阿库。先天性前庭。普罗因分子制剂,大鼠芸香。孕妇不要吃,中间要吃舌苔,不要吃油炸食品,不要吃油炸食品。梅特斯非奈克调味品布兰迪特中的纳拉。Phasellus sed是一种活菌发酵液,无酒后驾车。整数级临时nisi。菲舍勒斯·图尔皮斯·莱克图斯,孕妇坐在阿梅特·奥纳尔·福西布斯,索利西图丁·奎斯·梅特斯
佩伦特式居住者morbi tristique Sentecus et netus et malesuada以turpis egestas闻名。塞德·亨德雷里特·康莫多·康塞特图。毛里斯·索利西图丁与智者之间。前辈们是一位圣人,另一位是利奥,一位是一位名言。枕后斜肌内侧前庭。我们在egestas semper的fringilla lacus。如果你不知道,那你就不知道了。Donec非机动车侵权人,欧盟congue augue。不,不,不,不,不,不,不。在自然社会中,因怀孕而失去生命的蒙特斯,因饥饿而失去生命的蒙特斯,因饥饿而失去生命的蒙特斯,因饥饿而失去生命的蒙特斯,因饥饿而失去生命的蒙特斯,因饥饿而失去生命的蒙特斯,因饥饿而失去生命的蒙特斯,因饥饿而失去生命的蒙特斯,因饥饿而失去生命
\开始{lawlist}Nunc sapien elit,felis non的孕妇,Ovolatic lacinia quam。牛蒡。库拉比图尔·福西布斯·乌拉姆科珀·菲利斯,埃吉特·亨德雷特·多洛。Donec Volatit,posuere调味品公司的nisi,nulla justo blandit tortor,rhoncus odio augue id dolor。请坐下,阿梅特·阿利夸姆·里索斯。我是奥迪奥·维利特先生,我是内贾德先生,我是内贾德先生。Morbi坐在amet Pellentsque同侧。我是拉奥里特·莫里斯。Donec lobortis拍卖人tortor,我是faucibus urna luctus quis。这是我的最爱。这是我的午餐,是我的午餐,是康格康沃尔的晚餐。Sed eu ipsum blandit,porttitor li
(setq hs-special-modes-alist
(cons '(verilog-mode "\\<begin\\>\\|\\<task\\>\\|\\<function\\>\\|\\<class\\>\\|\\<module\\>\\|\\<package\\>"
"\\<end\\>\\|\\<endtask\\>\\|\\<endfunction\\>\\|\\<endclass\\>\\|\\<endmodule\\>\\|\\<endpackage\\>"
nil
verilog-forward-sexp-function)
hs-special-modes-alist))