正则表达式作为触发器

时间:2013-01-04 00:32:17

标签: regex emacs yasnippet

其中一个代码约定是在方括号和括号内包含一个空格的填充。所以list[ index ],而不是list[index]。添加这些空格可能很烦人,所以我尝试编写一个片段:

# name: Bracket
# key: [
# --
[ ${1:exp} ]

当开头方括号前面有一个空格或一行的开头,而不是前面有一个标识符时,这种方法有效。我认为一种方法是将触发器设置为正则表达式:

# key: "[:ascii:]"[

或类似的东西。这甚至可能吗?或者还有其他一些巧妙的方法可以使这项工作? 我正在为python编写这个,但我认为这不重要。

谢谢!

3 个答案:

答案 0 :(得分:4)

我不知道YASnippet,但您可以使用autopair(可以通过包装系统安装)轻松实现您想要的目标:

(defun autopair-space-after-bracket (action pair pos-before)
  (when (and (eq action 'opening)
             (eq pair ?\]))
    (insert "  ")
    (backward-char)))

(setq autopair-handle-action-fns (list #'autopair-default-handle-action
                                       #'autopair-space-after-bracket))

使用此功能,并从以下情况开始(|标记点位置):

  

list|

然后插入[会产生:

  

list[ | ]

答案 1 :(得分:1)

次要模式解决方案

我也不得不处理这样的编码标准。我最初的解决方案是相同的 基于autopair的@Francesco's

但是,实际上我想在某些情况下删除这个填充,所以这样做了 次要模式更灵活。我绝对建议一起使用它 某种配对分隔符插入工具(我最喜欢的是autopair)。

请参阅:delim-pad

使用yasnippet

沿着您使用yasnippet的原始轨道...(BTW autopair和 yasnippet都是由João Távora编写的,两者都非常强大 灵活。对那家伙的称赞! )

即使您将“[”识别为,您仍然需要保留 按下触发键以展开代码段。那很快就会累。

Yasnippet还允许您直接将代码段绑定到密钥,因此可以使用:

# -*- mode: snippet -*-
# name: beginsquare
# binding: [
# --
[ $0 ]

答案 2 :(得分:0)

这不起作用的原因是因为当这个方括号之前有东西时,你试图扩展list[而不是[。 Yasnippet是“不是你的家伙”我会说要在[创建扩展。我将在最后向您展示yasnippet的更常见用途。

考虑到我不想在键入括号时按下激活键(例如TAB),我会从Francesco获得上述答案。如果它有帮助,我也使用autopair。

此外,使用yasnippet的好方法或至少更好的方法是,如果您确实对将此仅用于列表或者您愿意事先定义的某些情况感兴趣。考虑为您经常使用的代码创建许多代码段,并且您将非常快速地生成代码。无论如何,这是我认为适合这种情况的例子:

list[ $0 ]

将它绑定到list或更短到l,无论你的船是什么漂浮。

就个人而言,我会选择autopair和yasnippet的组合,他们都很棒。祝你好运!

复制粘贴:

# name: List
# key: list
# --
list[ $0 ]