2

emacsにコメント終了文字を追加することはできますか?

私が持っている最初のコードを取り、例として私が望むものを適用します:

    (defun smart-tab ()
      (interactive)
\1\       (if (minibufferp)
\1a\             (minibuffer-complete)
\2\         (if (eq major-mode 'emacs-lisp-mode) 
            (progn 
              (save-excursion 
                (search-backward "(def")
                (while (not (looking-at "\\s-*)"))
                  (beginning-of-line 1)
                  (indent-for-tab-command)
                  (beginning-of-line 1) 
                  (next-line)
                  (when (looking-at (concat ".*" comment-start))
                    (next-line))))
              (indent-for-tab-command))    
          (yas-expand)))
      )

関数の前のインデント領域に、論理部分の開始位置を示す情報を追加したいと思います。

これは emacs-lisp で可能でしょうか?評価者が特定のテキストをスキップすることを考慮するためのちょっとしたトリックを使用する簡単な方法はありますか?

4

1 に答える 1

5

Emacs Lisp にはリーダー マクロ (またはリーダーを変更するその他の方法) がありません。しかし、独自のマクロを作成し、defun. たとえば、次のマクロ定義を使用します。

(defmacro mydefun (name args &rest body)
  "Define NAME as a function.
Like normal `defun', except BODY may contain |comments|."
  (labels ((uncomment (form)
             (cond ((not (consp form)) form)
                   ((and (symbolp (car form))
                         (string-match "|.*|$" (symbol-name (car form))))
                    (uncomment (cdr form)))
                   (t (cons (uncomment (car form))
                            (uncomment (cdr form)))))))
    `(defun ,name ,args ,@(uncomment body))))

あなたは書ける:

    (mydefun smart-tab ()
      (interactive)
|1|       (if (minibufferp)
|1a|             (minibuffer-complete)
|2|         (if (eq major-mode 'emacs-lisp-mode) 
            (progn 
              (indent-for-tab-command)))))

(\その文字はすでに Emacs Lisp リーダーにとって意味があるため、これを使用することはできません。)

ただし、これは特に良い考えではないように思われます。セクションの見出しをソースの右側のコメントに入れる方がはるかに良いでしょう:

(defun smart-tab ()
  (interactive)
  (if (minibufferp)                         ; 1
      (minibuffer-complete)                 ; 1a
    (if (eq major-mode 'emacs-lisp-mode)    ; 2
        (progn 
          (indent-for-tab-command)))))

これはあなたの提案と同じくらい明確で、他の Emacs Lisp プログラマーにとっては理解しやすいようです。

于 2013-01-15T15:17:45.980 に答える