首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有条件跳过yasnippet中的字段

有条件跳过yasnippet中的字段
EN

Stack Overflow用户
提问于 2022-01-05 09:31:42
回答 2查看 83关注 0票数 1

我正试图为移动语句i COBOL创建一个yasnippet。写移动语句是我们经常做的事情,我希望尽可能快和高效地使用它。

通常是这样的:

代码语言:javascript
复制
MOVE variable-1 TO variable-2

但有时您也使用函数:

代码语言:javascript
复制
MOVE FUNCTION LENGTH(variable-1) TO variable-2

所以我想要的是一个片段,它跳过字段-2如果字段-1=“函数”。

我现在拥有的是:

代码语言:javascript
复制
MOVE $1 ${2:$$(unless (or yas-modified-p yas-moving-away-p (equal (upcase (yas-field-value 1)) "FUNCTION")) (yas-skip-and-clear-field))} TO $0

这对“移动功能”非常有用.情况并非如此。在这里,当我在输入varaible-1后按下字段-1,我得到(游标是_):

代码语言:javascript
复制
MOVE variable-1 #<marker at 2998 in text.cbl>| TO

因此,yas-skip-and-clear-field的返回值似乎是打印出来的,而不是跳转到$0。

我怎么能解决这个问题?或者有什么更好的方法来做这件事?

EN

回答 2

Stack Overflow用户

发布于 2022-01-06 14:56:32

如果将FUNCTION ALL INSTRINSIC添加到Configuration Section中的Repository段落中,则无需在MOVE语句中编写FUNCTION代码。这可能会减轻您的问题,而不必使用雅斯尼普。

票数 1
EN

Stack Overflow用户

发布于 2022-09-14 09:29:29

我为systemverilog的“逻辑”编写了类似的代码片段,其语法是:

代码语言:javascript
复制
logic MySignal;

代码语言:javascript
复制
logic [31:0] mybus;

因此,理想情况下,如果输入‘逻辑’后面跟着‘逻辑’,代码段将无条件地展开第一个字段。如果该字段包含number:number,则它用name展开另一个字段。如果未找到[],则该字段被视为信号名称。

这并不完美,但我想说的是:

代码语言:javascript
复制
# -*- mode: snippet -*-
# name: logic
# key: logic
# --
logic ${1:range_or_signal}${2: $(if (string-match "\\[[0-9\s]+:[0-9\s]+\\]" (yas-field-value 1)) (concat " " (string-trim yas-text)) (yas-auto-next ""))};
$0

基本上,第一个字段总是输入,如果第一个字段不是向量定义,则跳过另一个字段。跳过由yas-auto-next执行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70590568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档