【问题标题】:Regular expression as a trigger正则表达式作为触发器
【发布时间】:2013-01-04 00:32:17
【问题描述】:

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

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

这适用于左方括号前面有空格或行首的情况,但不适用于前面有标识符的情况。我认为一种方法是让触发器成为正则表达式:

# key: "[:ascii:]"[

或者类似的东西。这甚至可能吗?还是有其他聪明的方法来完成这项工作? 我正在为 python 写这个,但我认为这不重要。

谢谢!

【问题讨论】:

  • 只是一个疯狂的猜测,bout 会删除key: [ 中的空间吗? (所以,让它:key:[)?

标签: regex emacs yasnippet


【解决方案1】:

我不了解 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[ | ]

【讨论】:

  • 考虑到这种情况,我也相信这应该/可以通过自动配对来完成,并且比括号(您必须按 TAB)更合乎逻辑。
  • 我同意使用除 YASnippet 之外的其他东西 - 而且自动配对似乎比电动配对更容易。
【解决方案2】:

次要模式解决方案

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

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

见:delim-pad

使用 yasn-p

继续使用 yasn-p ...(顺便说一句,自动配对和 yasn-p 都是João Távora写的,都很强大 灵活的。向那个人致敬! )

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

Yasn-p 还允许您直接将 sn-ps 绑定到键,所以这将起作用:

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

【讨论】:

  • 这不是我的答案的重复吗?装订部分除外。
  • 非常感谢您的回答。过去几天我一直在使用 delim-pad + autopair,效果很好!
【解决方案3】:

这不起作用的原因是,当此方括号之前有某些内容时,您正试图扩展 list[ 而不是 [。 Yasn-p 是“不是你的家伙”,我想说的是在 [ 上创建扩展。我将在最后向您展示 yasn-p 的更常见用法。

考虑到我不想在输入括号时按激活键(例如TAB),我会选择 Francesco 的上述答案。如果有帮助,我也会使用自动配对。

此外,使用 yasn-p 的一种好的或至少更好的方法是,如果您确实有兴趣仅将其用于列表或您愿意事先定义的某些情况。考虑为您经常使用的代码创建许多 sn-ps,您将非常快速地生成代码。无论如何,这是我认为适合您在这种情况下需要的示例:

list[ $0 ]

将它绑定到list,或者更短的绑定到l,不管你的船是什么。

就我个人而言,我会同时使用 autopair 和 yasn-p,它们都很棒。祝你好运!

复制粘贴:

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

【讨论】:

    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2018-02-07
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多