6

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

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

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

# key: "[:ascii:]"[

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

谢谢!

4

3 回答 3

4

我不了解 YASnippet,但是使用自动配对(可以通过打包系统安装)可以轻松实现您想要的:

(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[ | ]

于 2013-01-04T07:46:00.820 回答
1

次模解决方案

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

但是,在某些情况下,我实际上想删除此填充,因此使此次要模式更加灵活。我绝对建议将它与某种配对分隔符插入工具一起使用(我最喜欢的是自动配对)。

参见: 定界垫

使用 yasnippet

继续使用 yasnippet ...(顺便说一句,自动配对和 yasnippet 都是由João Távora编写的,两者都非常强大和灵活。向那个人致敬!)

即使您将“[”识别为key,您仍然必须按住触发键来展开代码段。这很快就会累。

Yasnippet 还允许您直接将片段绑定到键,因此这将起作用:

# -*- mode: snippet -*-
# name: beginsquare
# binding: [
# --
[ $0 ]
于 2013-01-04T14:33:39.300 回答
0

这不起作用的原因是因为您正在尝试扩展,list[而不是[在此方括号之前。Yasnippet 是“不是你的家伙”,我想说的是在[. 最后,我将向您展示 yasnippet 的更常见用法。

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

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

list[ $0 ]

将它绑定到任何一个list或什至更短l,无论您的船漂浮在哪里。

就我个人而言,我会结合使用 autopair 和 yasnippet,它们都很棒。祝你好运!

复制粘贴:

# name: List
# key: list
# --
list[ $0 ]
于 2013-01-04T09:08:40.777 回答