【问题标题】:Emacs: How to automatically insert space after colon in cc-mode derivativesEmacs:如何在 cc 模式衍生品中自动在冒号后插入空格
【发布时间】:2011-10-31 12:46:39
【问题描述】:

假设我有这个代码:

{
  "type"  : "home",
  "number":"212 555-1234"
}

我希望我的 emacs 在某些模式下自动在冒号后插入空格。 特别是我使用的是基于 cc-mode 的 javascript-mode。能帮上忙吗?

提前致谢。

【问题讨论】:

    标签: emacs colon cc-mode


    【解决方案1】:

    执行此操作的最简单方法是这样的(在您的 .emacs 中):

    (defun my-js-hook ()
      (local-set-key ":" '(lambda () (interactive) (insert ": "))))
    
    (add-hook 'js-mode-hook 'my-js-hook)
    

    更复杂的替代方案包括yasnippetskeleton mode。对于这么简单的事情,它们可能有点矫枉过正,但如果您想要更复杂的模板,它们是有用的工具。

    编辑:我不知道任何允许在 cmets 内进行不同行为的 cc 模式魔法。我很少使用 cc-mode,但我在手册中看不到任何明显的内容。这里有一些代码可以做你想做的事:

    (defun my-js-hook ()
      (local-set-key ":" 
                 '(lambda () 
                    (interactive)
                    (let ((in-comment-p))
                      (save-excursion
                        (setq in-comment-p (comment-beginning)))
                      (if in-comment-p 
                          (insert ":")
                        (insert ": "))))))
    

    【讨论】:

    • 感谢重播。这看起来不错,但也会覆盖 cmets 的行为。我特别询问了 cc-mode,因为我相信它可以通过一些 cc-mode 魔法来完成(我相信他们有一些东西,因为该项目自 1992 年以来就存在)
    • 你成就了我的一天 :-) 看起来从 =) 开始自动格式化次要模式很重要。但我不明白这一行:(save-excursion (setq in-comment-p (comment-beginning)))。为什么我们不能在 let 中初始化它?
    • comment-beginning 移动点作为副作用。所以它需要被包裹在save-excursion 中,否则: 将被插入到评论的开头。也许您可以将save-excursion 移动到 let 变量声明中?试试看!
    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多