Emacs在cperl-mode </tab>中使用qq内的<tab>

时间:2012-03-08 18:56:27

标签: emacs cperl-mode

我正在使用 qq 函数在Perl中存储我的SQL请求。像这样:

    qq{
       SELECT
             table1.name,
             table1.description
       FROM
             table1
       WHERE
             table1.id=?
    }

但是在Emacs cperl-mode中,不可能在qq中使用 tab ,这会减慢我的工作量。我该如何解决?

1 个答案:

答案 0 :(得分:1)

Emacs有很好的设施,可以很好地理解语法,因为它不是一个完整的解析器。

在初始化文件中尝试此操作。

(defun my-cperl-indent-command ()
  "indent as cperl normally

indent relatively inside multi-line strings.
"
  (interactive)
  (let ((state (syntax-ppss)))
    (if (and (nth 3 state)              ;string
             (and (nth 8 state)         ;multi-line?
                  (< (nth 8 state) (point-at-bol))))
        (indent-relative)
      (cperl-indent-command))))

(eval-after-load "cperl-mode" '(define-key cperl-mode-map [remap cperl-indent-command] 'my-cperl-indent-command))

当然,您仍然需要调整indent-relative才能让它完全符合您的要求。见tab-to-tab-stop