为两种场景配置Yasnippet——(1)区域处于活动状态;(2)区域不活跃



结合(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}

需要在要计算的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}")`
# -*- mode: snippet -*-
# name: bold
# key: bold
# type: command
# --
(if (region-active-p)
    (yas-expand-snippet "{\bf `yas-selected-text`}")
  (yas-expand-snippet "{\bf $0}"))

我使用这个代码片段有条件地包装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

最新更新