質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3962閲覧

Emacs でC/C++のコメント枠を自動整形したい

hkcomori

総合スコア30

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

1クリップ

投稿2015/02/15 05:39

編集2016/03/20 11:42

Emacs の自動整形機能について質問です。

Emacs でC言語のコード中に以下のようなコメントを書き、
・各行のコメント終了位置を揃える
・枠の中身のコロンの位置を揃える
という整形を行いたいと思っています。

lang

1/* これを */ 2/*-----------------------------*/ 3/* hoge : comment1 */ 4/* fugafuga : comment2 */ 5/*-------------------------*/ 6 7/* こうしたい */ 8/*-----------------------------*/ 9/* hoge : comment1 */ 10/* fugafuga : comment2 */ 11/*-----------------------------*/

M-x align-regexp で以下のような動作をすることから、
align では、ハイフン埋めの整形は出来そうにないように思えました。

lang

1/* 「Align regexp: \(-*\)\*\/」を実行すると */ 2/* -----------------------------*/ 3/* hoge : comment1 */ 4/* fugafuga : comment2 */ 5/* -------------------------*/

そもそもこのような自動整形が可能なのか、
可能であればどのような設定・パッケージが必要か、教えていただけないでしょうか?

[2016-03-20追記]
comment-styleでは値が表示されなかったので、comment-stylesの値になりますが、
以下のように表示されました。

lisp

1((plain nil nil nil nil "Start in column 0 (do not indent), as in Emacs-20") 2 (indent-or-triple nil nil nil multi-char "Start in column 0, but only for single-char starters") 3 (indent nil nil nil t "Full comment per line, ends not aligned") 4 (aligned nil t nil t "Full comment per line, ends aligned") 5 (box nil t t t "Full comment per line, ends aligned, + top and bottom") 6 (extra-line t nil t t "One comment for all lines, end on a line by itself") 7 (multi-line t nil nil t "One comment for all lines, end on last commented line") 8 (box-multi t t t t "One comment for all lines, + top and bottom"))
tatsuya6502👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/03/17 15:40

M-x describe-variable RET comment-style RET するとどんな表示がでますか?
hkcomori

2016/03/20 11:38 編集

comment-styleでは値が表示されなかったので、comment-stylesの値になりますが、 以下のように表示されました。 ```lisp ((plain nil nil nil nil "Start in column 0 (do not indent), as in Emacs-20") (indent-or-triple nil nil nil multi-char "Start in column 0, but only for single-char starters") (indent nil nil nil t "Full comment per line, ends not aligned") (aligned nil t nil t "Full comment per line, ends aligned") (box nil t t t "Full comment per line, ends aligned, + top and bottom") (extra-line t nil t t "One comment for all lines, end on a line by itself") (multi-line t nil nil t "One comment for all lines, end on last commented line") (box-multi t t t t "One comment for all lines, + top and bottom")) ```
退会済みユーザー

退会済みユーザー

2016/03/21 11:44

comment-styleを実行すると下記のような表示がでますか? comment-style is a variable defined in 'newcomment.el'. Its value is multi-line Original value was indent
hkcomori

2016/03/21 11:52

ごめんなさい、エラーメッセージかと思ったら違うんですね。値はindentのようです。表示は以下のとおりです。 comment-style is a variable defined in `newcomment.el'. Its value is indent
guest

回答1

0

ベストアンサー

emacsの設定ファイルに下記を追加。

lisp

1(setq comment-style 'box-multi)

行端でC-x C-eを実行するかemacsを再起動して設定を適用させてください。
設定を適用させたら下記を実行。

lisp

1M-x descrive-variable RET commnet-style RET

表示が下記になることを確認。

lisp

1Its value is box-multi

以上まで設定できたら質問のコードを例にし

c

1/* hoge : comment1 */ 2/* fugafuga : comment2 */

コメントアウト済みのテキストであれば範囲を選択し下記を実行してコメントを解除。

lisp

1M-x uncomment-region RET

c

1hoge : comment1 2fugafuga : comment2

範囲を選択し下記を実行して列を揃える。

lisp

1M-x align-regexp RET : RET

c

1hoge : comment1 2fugafuga : comment2

範囲を選択し下記のいずれかを実行してコメントアウトする。

lisp

1M-x comment-region RET 2M-x comment-dwim RET 3M-;

c

1/************************************* 2 * hoge : comment1 * 3 * fugafuga : comment2 * 4 *************************************/

以上までを実行するとできると思います。

投稿2016/03/21 12:08

編集2016/03/21 13:08
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hkcomori

2016/03/24 14:30

綺麗に整形できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問