Emacs использует <tab>внутри qq в режиме cperl - PullRequest
1 голос
/ 08 марта 2012

Я использую функцию qq для хранения моих SQL-запросов в Perl. Как это:

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

Но в Emacs cperl-mode невозможно использовать tab внутри qq, что замедляет мою работу. Как я могу это исправить?

1 Ответ

1 голос
/ 09 марта 2012

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

...