2012-08-24 60 views
1

我寫這個片段插入一個新的變量轉換爲Java源:Emacs的yasnippet鏡像/改造

# -*- 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?

回答

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

+0

我想最終的'$ 0'製表位您之前增加四個空格字符,但編輯必須是除了空白以外的東西。 – Droogans