3

结合用户配置(delete-selection-mode 1),有没有一种方法可以将以下两个 Yasnippet 合并到一个片段中,以便根据区域是否处于活动状态,它的工作方式会有所不同。例如: (if (region-active-p) (yas/selected-text) "$1")

活动区域——用代码段包围活动区域:

# -*- mode: snippet -*-
# contributor: lawlist
# key: bold_selected
# name: bold_selected
# binding: C-I b b s
# --
{\bf `yas/selected-text`}

非活动区域 - 插入代码段并将光标放在 的位置$1

# -*- mode: snippet -*-
# contributor: lawlist
# key: bold
# name: bold
# binding: C-I b b b
# --
{\bf $1}
4

3 回答 3

4

elisp需要在要评估的代码周围加上反引号。内置变量yas-selected-text存储所选区域的文本,可用于在片段创建期间重新插入相同的文本。每一 (1) 个反斜杠需要四 (4) 个反斜杠。

# -*- mode: snippet -*-
# contributor: lawlist
# key: bold
# name: bold
# binding: TAB <f6>
# --
`(if (region-active-p)
   (concat
     "{\\\\bf "
     yas-selected-text
     "}")
   "{\\\\bf $1}")`
于 2015-05-16T19:47:47.133 回答
2
# -*- mode: snippet -*-
# name: bold
# key: bold
# type: command
# --
(if (region-active-p)
    (yas-expand-snippet "{\\bf `yas-selected-text`}")
  (yas-expand-snippet "{\\bf $0}"))
于 2014-04-01T14:09:15.747 回答
2

我正在使用此代码段有条件地将变量包装在 JavaScript 模板文字中。

如果有选定的文本,则$1使用该文本。否则,它使用var用户可以改写的默认值来替换$1.

# -*- coding: utf-8; mode: snippet -*-
# name: wrap variable in string template to log its value `var=${var}`
# expand-env : ((yas-wrap-around-region nil))
# --
${1:`(if (region-active-p) (yas-selected-text) "var")`}=\${$1}$0

对于您的问题,此代码段似乎有效

# -*- coding: utf-8; mode: snippet -*-
# name: wrap selected text, or user provided text, in bold font
# expand-env: ((yas-wrap-around-region nil))
# --
{\bf ${1:`(if (region-active-p) (yas-selected-text) "text-to-bold")`}}$0
于 2017-07-28T04:22:40.920 回答