VHDL模式
适用于Sublime Text的包,旨在协助使用VHDL语言进行编码。
详细信息
安装量
- 总计 12K
- Win 8K
- Mac 1K
- Linux 3K
8月6日 | 8月5日 | 8月4日 | 8月3日 | 8月2日 | 8月1日 | 7月31日 | 7月30日 | 7月29日 | 7月28日 | 7月27日 | 7月26日 | 7月25日 | 7月24日 | 7月23日 | 7月22日 | 7月21日 | 7月20日 | 7月19日 | 7月18日 | 7月17日 | 7月16日 | 7月15日 | 7月14日 | 7月13日 | 7月12日 | 7月11日 | 7月10日 | 7月9日 | 7月8日 | 7月7日 | 7月6日 | 7月5日 | 7月4日 | 7月3日 | 7月2日 | 7月1日 | 6月30日 | 6月29日 | 6月28日 | 6月27日 | 6月26日 | 6月25日 | 6月24日 | 6月23日 | 6月22日 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows | 2 | 2 | 2 | 0 | 1 | 1 | 1 | 1 | 2 | 0 | 1 | 1 | 1 | 0 | 5 | 5 | 3 | 0 | 4 | 2 | 0 | 2 | 2 | 1 | 1 | 4 | 3 | 1 | 2 | 4 | 0 | 0 | 3 | 0 | 2 | 1 | 5 | 0 | 5 | 4 | 1 | 2 | 3 | 1 | 1 | 2 |
Mac | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Linux | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 2 | 1 | 0 | 0 | 0 | 1 | 2 | 0 | 1 | 3 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
README文件
VHDL模式
概览
此包试图重新创建在Emacs中备受喜爱的语言模式的功能。Sublime Text的扩展性使其成为尝试此功能的绝佳平台。
此包可以独立运行,但它被创建为与Emacs Pro Essential包和平共处。在这同样的精神下,键盘快捷键是根据Emacs vhdl模式快捷键设计的。此外,现在有一个“首选项”设置,可以在需要时激活Emacs vhdl模式的键绑定。
最初,此包依赖于Brian Pdalino的TextMate语法文件(在转换到ST3 YAML格式后)。然而,在处理此语法定义后,很明显,此语法定义不符合当前的封装最佳实践(如配色方案所示)并且存在某些句法结构的某些问题。进行了编写语法文件的尝试,以语言参考为基础,并包含有意义的精细粒度词法范围。
如果发现任何错误或需要功能请求,请访问以下链接:
我必须事先声明我无法完美地复制Emacs vhdl模式(例如,请参阅关于打字迟缓的讨论)。然而,如果有一些遗漏或需要的功能,请随时提出问题。我很乐意进行调查和尝试实现。
功能集
- 支持高度精细的词法结构封装的语法文件。很好地支持VHDL-2008。尚不支持VHDL-2019。
- 从实体或组件声明复制端口。
- 可以粘贴为实体、组件、信号、直接实体实例化或测试平台。
- 端口可以扁平化或反转。
- 实体嵌入是“智能”的,因为它不会复制已存在的实体名称。
- 可以通过快捷键或右键菜单访问。
- 从声明或规格复制子程序。
- 可以作为声明、主体或调用粘贴。
- 参数可以是压缩的。
- 可以通过快捷键或右键菜单访问。
- 对于赋值运算符和注释结构,有快发录入快捷键。
- 以代码片段形式提供的模板,用于常用结构。
- 通过设置进一步自定义头模板,并在保存时更新时间字段。
- 支持多种括号代码样式的美化代码(Kernighan & Ritchie,Allman和Lisp)
- 支持Sublime Text 转到符号和定义,包括源树导航的本地和全局。
- 行注释/取消注释区域。同时也处理Emacs vhdl-mode的连续注释行为。在编写注释行时,如果按回车键前的最后一个字符是空格,则下一行也将是注释,并且会自动插入注释字符。
相关插件
- Emacs Pro Essentials by sublime-emacs:VHDL Mode插件不需要此插件即可正常工作,但如果您来自Emacs vhdl-mode,您可能觉得这个插件很有用。另外,请参见启用Emacs vhdl-mode快捷键的设置。
- HDLProject by bootsiaz:这是我知道的与Emacs vhdl-mode Speedbar最相似的东西。这种巧妙的实现利用符号链接来利用Sublime Text的侧边栏进行分层项目显示。
依赖项
- ruamel.yaml:如果尚未存在,Package Control将在安装插件的默认情况下自动安装它。
未来的设计目标
- 改进作用域和任何似乎合理的功能。
使用
配置
VHDL Mode sublime-settings
文件包含用于在插入时填充头模板中某些字段的价格。用户可以通过选择 Preferences
>> Package Settings
>> VHDL Mode
>> Settings
创建用户覆盖。这将打开默认设置文件和设置的用户版本。要自定义字段,只需将默认值复制粘贴到用户覆盖文件中,并按需进行编辑。
这些字段还可以在“settings”下的 sublime-project
文件中设置,用于特定项目的行为。为了简化此操作,已创建一个项目辅助片段来在编辑项目文件时注入这些设置。只需从菜单中选择 Project
>> Edit Project
,将光标移过 "folders"
行,并输入 project
并按 Tab
键以使用片段完成。项目片段还创建了一些可用于项目的示例构建方法。
一个特定的设置与头模板和保存时的时间字段相关联。 vhdl-modified-time-string
设置是代码在捕捉保存事件并更新该字段时查找的字符串。只有当头模板已被修改时,才应更改该设置。当事件触发时,代码会搜索该字符串,并替换该行,以及时间信息。
代码美化应注意标准Sublime Text首选项中的 tab_size
和 translate_tabs_to_spaces
设置。如果这造成任何问题,请通知我。
vhdl-user
: 字符串:填写头模板的用户部分。vhdl-company
: 字符串:填写头模板的公司名称部分。vhdl-project-name
: 字符串:填写头模板的项目名称部分。这是一个在sublime-project
文件中定制的良好候选者!vhdl-platform
: 字符串 : 用于填充头模板中的平台或部分编号部分。vhdl-standard
: 字符串 : 用于填充头模板中的编码标准部分。vhdl-line-length
: 整数 : 该值用于确定生成注释“行”的长度。默认为80个字符。vhdl-modified-time-string
: 字符串 : 表示在文件保存时将被搜索的字符串。如果找到了这个字符串,那么这一行将被替换成由这个模式加上当前时间组成的字符串。此字符串还用于头创建,以确保头部模板插入可以注入正确的字符串。vhdl-use-copyright-block
: 布尔值 : 将此设置为TRUE将使头部模板插入注入版权块。设置为FALSE将使得此部分不被使用。vhdl-copyright-block
: 字符串列表 : 这个字符串列表将通过换行符连接,并前面添加一个换行符(由于此块的可选性质——请参阅片段字段位置),当vhdl-use-copyright-block
设置为TRUE时使用。由于JSON不允许多行字符串,这个字符串列表是必须的。这个块现在还支持${LINE}
以生成与vhdl-line-length
参数匹配的行。字符串列表是必需的,因为JSON不允许多行字符串。此字符串中的${YEAR}
和${COMPANY}
将分别被当前年份和vhdl-company
字符串替换。vhdl-use-revision-block
: 布尔值 : 将此设置为TRUE将使头部模板插入注入修订块。设置为FALSE将使得此部分不被使用。vhdl-revision-block
: 字符串列表 : 这个字符串列表将通过换行符连接并前面添加一个换行符。当vhdl-use-revision-block
设置为TRUE时使用。此块现在还支持${LINE}
以生成与vhdl-line-length
参数匹配的行。vhdl-emacs-keybinds
: 布尔值 : 此设置必须在用户的首选项中设置,而不是在VHDL模式包设置中。当设置为true
时,这将启动一组与Emacs vhdl-mode键绑定相同的键绑定。**警告!!!这不应该被使用,除非用户正在使用Emacs Pro Essentials并且熟悉Emacs键绑定。大多数Emacs代码功能的触发键以C-c
开头,这真的是大问题,因为你可能期望这是典型的Windows复制命令。
键映射
如上所述,目标是让用户熟悉Emacs vhdl-mode。然而,我非常清楚我还在Windows环境中,Emacs中的代码模式命令常用的C-c
前缀将与标准的Windows复制命令冲突。Sublime Text 3经常使用M-k
作为扩展键映射,这似乎是一个合适的替代品(在Windows环境中,Meta
键是Alt
)。键映射也是上下文选择的,所以不应该在不是source.vhdl
文件的情况下触发。
另一个注意,这些都是序列击键。例如,要从实体复制端口接口,将光标移动到结构中(任何地方都行)然后按Alt-k
然后p
然后w
。这些不应该和弦。
对于长期的Emacs vhdl-mode用户,现在有一个偏好,激活原始的Emacs vhdl-mode键绑定。我不会在这里记录这些,因为这些可能会使新用户困惑,但如果感兴趣,只需查看Default (Windows|OSX|Linux).sublime-keymap
文件中的键绑定即可。
端口接口复制/粘贴函数
可以帮助记住用 p
表示端口号,用 w
表示写入(到缓冲区)。其他助记符相当直接。这些命令也可以在 VHDL 模式
下右键单击的上下文菜单中找到。
- 复制端口:
M-k p w
- 粘贴为信号:
M-k p s
- 粘贴为组件:
M-k p c
- 粘贴为实体:
M-k p e
- 粘贴为(直接实体)实例:
M-k p i
- 粘贴为测试平台:
M-k p t
– 打开新视图并使用作为测试单元的接口填写样板材料。 - 展平端口:
M-k p f
– 名字在一个行上的接口子句被展平为每行一个名字。 - 反转端口:
M-k p r
– 端口的方向被反转:in
成out
,而out
或buffer
成in
。
以下动画 GIF 展示了端口复制功能的一部分。
子程序接口复制/粘贴功能
可以帮助记住用 s
表示子程序,用 w
表示写入(到缓冲区)。和端口版本的这个功能类似,助记符相当直接。这些命令也以 VHDL 模式
下右键单击的上下文菜单中提供。
- 复制子程序:
M-k s w
- 粘贴为声明:
M-k s d
- 粘贴为体:
M-k s b
- 粘贴为调用:
M-k s c
- 展平参数:
M-k s f
– 名字在一个行上的接口子句被展平为每行一个名字。
注释
可以帮助记住‘c’表示代码,然后‘c’表示注释,‘b’表示美化等。这些命令也以右键单击的上下文菜单在 VHDL 模式
下的标题中提供。
- 切换注释区域:
M-k c c
- 美化整个缓冲区:
M-k c b
模板
主要模板是通过片段系统处理的,但是标题是一个特殊功能,因为我能自动插入各种字段。请记住用‘t’表示模板,用‘h’表示标题。这些命令也以右键单击的上下文菜单在 VHDL 模式
下提供。
- 插入标题:
M-k t h
杂项
- 包版本:
M-k v
- 点的作用域:
M-k S
- 构建:
C-c C-k
– 仅当vhdl-emacs-keybinds
设置为 true。否则,Sublime Text 3 的默认键绑定F7
将运行构建。 - 自动匹配双引号:此键绑定在 VHDL八进制和十六进制文字中允许前导字符(oOxX)的源特定变体。
断续输入
在 Emacs vhdl-mode 中,连续敲击一些键将插入一些语法标点符号。很遗憾,我无法重复整个 Emacs vhdl-mode 的断续输入内容,因为我不直接有权访问按键流。我能做的是使用键绑定;在一种情况下,使用键绑定加上宏来复制该行为。我将列出实现的替换项,然后关于我无法及其原因复制的那些做注释。以下符号两侧的空格在 HTML 文档中很难看到。
;;
: 产生:
;;;
: 产生:=
(见以下说明)..
: 产生=>
,,
: 产生<=
---
: 产生一个从光标开始并考虑到缩进的注释行,直到由vhdl-line-length
设置的列(默认:80),并且这个警告会在控制台中产生。--=
: 在光标处开始,延伸到由vhdl-line-length
设置(默认值为80)指定的列,同时考虑到制表符。如果光标超出定义的行长度,则该框将仅被上面的--
和下面的(不是“行”)所限制,并且在控制台产生警告。(有关与原始 Emacs vhdl-mode----
框的偏差的说明。)
以下是我无法实现的重复输入替换。
[
、[[
、]
、]]
:这些不能正确复制。问题是 Sublime API 没有直接访问按键流的权限。唯一的复制方式(如我使用;;;
所做的那样)是创建一个键绑定,该键绑定检查前文文本,如果它是被替换的文本,则执行一个宏,删除并用新文本替换文本。然而,如果我用[
替换(
,然后再查找与[[
相匹配的前一个圆括号,那么将永远无法正确输入嵌套圆括号。''
:这会干扰 Sublime Text 中的自动完成功能,所以我选择不实现它。;;;
:我想提前警告,这并不像 Emacs 实现的那样准确。它的工作原理是;;
创建:
。我还为;
绑定了键绑定,以检查前文文本;如果它是:
,则将执行一个宏,删除并用:=
替换文本。这个副作用是,如果光标放在文本中的某个位置,:
只在点之后,那么这个宏也会执行。我认为这是一个相对罕见的事件,我没有其他方法创建这种行为,所以我选择了这个解决方案。----
:我又不能通过检查前文文本来复制它,因为这会创建问题,如果有人只是想创建一个自定义长度的注释连字符行。我创建了--=
作为注释框的替代。==
:老实说,我可以创建这个,但它有点没意义。在 VHDL 中,==
不是一个运算符,我也不确定为什么它在 Emacs vhdl-mode 中。
代码片段
大多数代码片段将从与之关联的关键字执行(例如,'entity' 将填写开始和结束结构,并将光标放在中间。)每个这些代码片段单词都需要按 afterwards 键来执行。这只是较少明显快捷方式的列表。完整的代码片段列表可以通过选择 工具
>> 代码片段
菜单找到。
spro
:同步进程cpro
:组合进程funcd
:生产函数规范/声明funcb
:生产函数体。procd
:生产程序规范/声明procb
:生产程序体。genmap
:生产通用映射关联列表,与通用接口列表区分开来。portmap
:生产端口映射关联列表,与端口接口列表区分开来。project
:在编辑 Sublime Text 项目文件时激活。填写设置密钥的本地副本并实例化几个示例构建系统。- 还有其他...请再次查看代码片段目录或
工具
>>代码片段
菜单以获取完整列表。
其他功能
- 插入标题命令使用软件包设置中的几个字段。请参阅上面在 配置 中列出的字段和类型以自定义标题插入。
- 在保存事件被捕获并扫描文件,默认情况下,查找 VHDL 文件中的
-- 最后更新:
。如果找到这种结构,则自动在该行更新时间和日期(它将替换该行)。这种模式是通过设置配置的。 - 大多数命令(不包括代码片段)会在ST3控制台中留下痕迹,这可能对调试很有用。针对此包的任何特定包消息将以
vhdl-mode:
开头。
已知问题和设计评论
- 这是一个正在进行中的工作,但我一直在使用自己的产品,并且目前对我来说它工作相当令人满意。我已经向它投掷了其他作者的代码风格和文件,并试图消除一些怪异的错误。然而,有许多编码风格,我不保证美化器能与它们中的每一个都工作。如果某个特定结构存在问题,我很乐意获取样本并尝试让它工作。
- TextMate VHDL语法在多个位置支持不匹配的标识符。为了获得更大的范围粒度,我不得不在某些结构中牺牲该功能,因为捕获匹配不会通过语法作用域设置命令持久。但是在确定各个位置的非法标识符方面还可以做更多的工作。
- 语法文件是根据彼得·阿什登德的《VHDL设计指南,第3版》中的语言定义编写的。语言定义参考在附录B,库引用来自附录A。了解语言的构建可能有助于理解语法文件以及为什么它是这样做的。
- 设计用于与Sublime Text 3一起使用。它不太可能与Sublime Text 2一起工作(也就是说,我很乐意如果它能,然而我从未使用过ST2也从未对其测试过,所以性能可能会有所不同。)
- 我为区域编写了自己的注释例程。这可能与ST3的注释/取消注释器的工作方式不同。我试图保持vhdl-mode的行为,即它会将所有区域在相同列上缩进。
- 我没有在Linux或Mac上测试过这,所以我不知道它可能如何或不能工作,视情况而定。我很乐意了解是否有任何问题,并乐意尝试解决这些问题。
- 我并没有为天空下的每一件事都创建代码片段。在vhdl-mode中,模板是我最不常用的功能之一。通常我喜欢模板涵盖大量节省了大量输入的大规模事物。也就是说,在我的心目中,每个关键字都有一个代码片段并不真正必要。话虽如此,其他包有一些这样的东西,Sublime Text 3的代码片段创建功能简单、易于使用且相当可定制。如果有人创建了一个他们认为是从常规编码自然流出的,我将很高兴评估它并将其包含在内,并注明出处。
- 处理vhdl-mode的提示字段的方式并不优雅,例如在创建实体时。因此,这些行为被分解成了几个代码片段。输入
entity <Tab>
将形成起始和结束实体结构,然后置于中间。在此处输入port <Tab>
将开始端口接口列表。这样,保持模板的风格但处于ST3模型中。如果我能找到一个处理完整提示构建的方法,我将尝试实施它,但到目前为止它仅限于代码片段支持。
杂项
安装此软件包的方法是通过 Package Control。也可以通过直接克隆仓库来安装。我不支持这种方法。不过,这里有些提示:* 软件包必须安装到 Sublime Text 的 Packages 目录中。在 Windows 中,这是 c:/Users/<name>/AppData/Roaming/Sublime Text/Packages
。* VHDL 模式依赖于通用安装的 ruamel-yaml
软件包。我相信它在 Sublime Text 第一次加载包并尝试解决依赖关系时获得,但是我不保证这会像从 Package Control 安装时那样顺利完成。* Github 项目是“VHDL-Mode”。软件包名为“VHDL Mode”(注意代替破折号的空间)。你一定得确保克隆到已更改名称的目录中,或者之后重命名该目录。软件包内有链接到需要正确命名的文件的处理方式(这是不可避免的 - 没有通用的方法来引用该文件。)关于其他问题,我 really 没法帮忙。祝你好运!(你也可以直接从 Package Control 安装,然后将目录替换为你克隆的版本,如果你喜欢的话 - 这可能会解决大部分奇怪的问题,但我不保证。)
贡献者
这是一个新章节,我想感谢那些帮助修复和测试的人。如果其他人有修复或贡献,请随时在 Github 仓库中打开一个问题,我们可以讨论它。如果你要提交拉取请求,请针对 develop 分支,因为我只把 master 分支保留用于发布。
- Sven Goossens (Github: @Sv3n)
- Stefan Lippuner (Github: @stefanlippuner)
- Martin Barez (Github: @martinbarez)
结论
我希望你发现这个 Sublime Text 软件包对 VHDL 编程非常有用。语言是我热衷的领域,我很高兴扩展 Sublime Text 以支持它。
此软件包提供无任何保证和无责任。它可免费使用和分发任何代码,但我如果在重新分发、修改或整合时,还是希望我得到对工作的认可。很高兴与其他 Sublime Text 软件包作者合作。
MIT 许可证
版权所有 © 2017 Mark Norton
兹授予任何人不受限制(包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售副本的权力)使用本软件及其相关文档文件(“软件”)的权利,但受以下条件的约束:
应当在所有副本或软件的实质部分中包含上述版权声明和本许可声明。
软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、针对特定目的的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任(无论源于合同、侵权或其他),因软件或软件的使用或其他原因而产生,不承担责任。