4

外部から強制されたコーディング標準により、4 つの辺すべてに境界線を揃えてコード コメントを記述する必要があります。

Emacsで次のことを行う最も簡単な方法は何ですか?

  1. 一部のテキストをこの形式のブロック コメントに変換します
  2. ブロック コメント内のテキストを編集し、Emacs に正しくリフローさせる

コメント形式の例:

#*****************************************************************************#
#* This is a block comment. It has right-aligned borders.                    *#
#*                                                                           *#
#* It can have separate paragraphs. Text in a long paragraph flows from one  *#
#* line to the next with one space of internal padding.                      *#
#*                                                                           *#
#* The right hand border is at char 78                                       *#
#*****************************************************************************#
sub MySub
{
  #***************************************************************************#
  #* The left hand edge of the comment is aligned with the current code      *#
  #* block, but the right hand border is still at char 78                    *#
  #***************************************************************************# 
  my $var = 3;
}

auto-fill-modeそれ自体では、右側の境界は保持されません。

4

4 に答える 4

3

由緒ある汎用ライブラリ「rebox2」がこれを可能にします。

インストールするには、https: //raw.github.com/lewang/rebox2/master/rebox2.el を site-lisp ディレクトリにダウンロードし、.emacsファイルに以下を追加します。

(require 'rebox2)

; The following template defines the specific style required here,
; which does not correspond to any built-in rebox2 style.
;
; "75" means that the style is registered as x75, where "x" depends
; on the current langauge mode. The "?" char is switched for the language
; specific comment char
;
; "999" is the weighting used for recognising this comment style.
; This value works for me.
(rebox-register-template
 75
 999
 '("?*************?"
   "?* box123456 *?"
   "?*************?"))

(add-hook 'perl-mode-hook (lambda ()
; The "style loop" specifies a list of box styles which rebox will cycle
; through if you refill (M-q) a box repeatedly. Having "11" in this loop
; will allow you to easily "unbox" a comment block, e.g. for "uncomment-region"
                (set (make-local-variable 'rebox-style-loop) '(75 11))
; The "min-fill-column" setting ensures that the box is not made narrower
; when the text is short
                (set (make-local-variable 'rebox-min-fill-column) 79)
                (rebox-mode 1)))

今:

  1. 一部のテキストをこの形式のブロック コメントに変換するには、テキストを選択して実行するだけです。M-q
  2. ブロック コメント内のテキストを編集するには、テキストを直接編集するだけで、emacs がボックスを自動的にリフローします。M-q( emacs が自動的にリフローを行わない場合は、リフローを要求する必要があるかもしれません。)
于 2013-08-13T15:27:59.220 に答える
1

yasnippet挿入とoverwrite-mode編集に使用できます。

ワード ラッピングが必要な場合は、rectangle を killC-x r kし、temp buffer に切り替えて、C-x brectangle をヤンクすることもできますC-x r y。心ゆくまで編集してください。その後、一時バッファから矩形を削除し、ソースに貼り付けます。

ブロックの開始/終了スニペットは次のとおりです。

# -*- mode: snippet -*-
# name: block comment
# key: bb
# --
`(concat "#" (make-string (- 80 aya-tab-position) ?*) "#")`
$0
`(concat "#" (make-string (- 80 aya-tab-position) ?*) "#")`

ブロック行のスニペットは次のとおりです。

# -*- mode: snippet -*-
# name: block comment line
# key: bl
# --
`"#* "`$1${1:$(make-string (- 78 aya-tab-position (length text)) ? )}#

ここでauto-yasnippetパッケージ変数を使用していることに注意してくださいaya-tab-position。スニペットで使用するには、スニペットを で展開する必要がありますaya-open-line。どちらのパッケージも MELPA から入手できます。

于 2013-08-13T14:49:10.077 に答える