Emacs yasnippet镜像/转换

时间:2012-08-24 09:03:57

标签: emacs yasnippet

我编写了这个片段,用于在Java源代码中插入一个新变量:

# -*- mode: snippet -*-
# name: variable
# key: v
# --
$1 ${1:$(java-default-variable-name text)} = new $1($2);
$0

它根据类型声明并创建一个变量,例如

AtomicInteger-> AtomicInteger ai = new AtomicInteger();

缺少的是我无法在代码段内提供另一个变量名称, 如果我不喜欢默认的那个。 我试过写:

$1 ${2:$(java-default-variable-name $1)}

$1 ${2:`(java-default-variable-name $1)`}

但它不起作用。 有没有办法将字段$ 1转换为字段$ 2?

1 个答案:

答案 0 :(得分:2)

我不知道java-default-variable-name的确切上下文 - 我假设它需要一个字符串并返回另一个字符串?

如果是这样,我认为这大致是你所追求的:

$1 ${2:varname$(let* ((end (- (point) 1))
           (start (save-excursion (backward-word) (point)))
           (type (buffer-substring start end)))
         (if (equal yas/text "varname")
            (java-default-variable-name type)
            yas/text))} = new $1($3);

$ 0