结合(delete-selection-mode 1)
的用户配置,有没有办法将以下两个Yasnippets整合到一个代码段中,以便根据区域是否处于活动状态而有所不同。例如:(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}
答案 0 :(得分:2)
需要围绕要评估的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}")`
答案 1 :(得分:1)
# -*- mode: snippet -*-
# name: bold
# key: bold
# type: command
# --
(if (region-active-p)
(yas-expand-snippet "{\\bf `yas-selected-text`}")
(yas-expand-snippet "{\\bf $0}"))
答案 2 :(得分:1)
我正在使用此代码段有条件地将变量包装在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