yasnippet 简单使用
新建snippet
M-x: +snippets/new
可以新建一个 snippets
snippet 语法
输入特殊符号
如输入 ` 需要写为 \`
占位符
使用$0 $1 … 占位, 可以有多个位置使用相同的占位符, 当占位符上有输入时, 其他相同占位符上的内容一并改变
占位符加默认输入
1
|
rand bit[7:0] ${0:val};
|
这样的话, $0 处的内容默认是val 当输入新的内容时会覆盖掉val, 注意, 如果其他地方有用$0 那么直接用$0 即可, 不需要用 ${0:val}
yasnippet Demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# -*- mode: snippet -*-
# name: transaction
# uuid: transaction
# key: transaction
# condition: t
# --
class $0_transaction extends uvm_sequence_item;
rand bit[7:0] ${1:val};
\`uvm_object_utils_begin($0_transaction)
\`uvm_field_int($1, UVM_ALL_ON)
\`uvm_object_utils_end
function new(string name = "$0_transaction");
super.new();
endfunction
post_randomize 是SV 中提供的一个函数, 当某个类的实例的randomize 函数被调用后, post_randomize 会紧随其后无条件地被调用
function void post_randomize();
endfunction
endclass
|
yasnippet 不对换行进行( newline )处理, 在 python 中多个 def 对齐尤其有用
1
2
3
4
5
6
7
|
# -*- mode: snippet -*-
# name: json
# uuid: json
# key: json
# condition: t
# expand-env: ((yas-indent-line 'fixed))
# --
|
只要在开头处加上 # expand-env: ((yas-indent-line 'fixed))
即可
这样子 snippet 只, 所见即所得, 不然的话yasnippet 会在处理换行时帮你自动缩进