在Emacs for UVM/SystemVerilog中折叠展开代码块/注释部分

在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

我目前使用emacs进行UVM测试台环境开发。我使用verilog模式和solarized主题。我喜欢我当前的设置,但是我想改进emacs的功能

我想为代码块/注释添加折叠展开功能

例如。 我有如下的课程

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))