元スレEmacs part 27
emacs覧 / PC版 /みんなの評価 : ○
451 = :
emacsは"できる"人が使うと、異常にできる子になる。
452 = :
おっと、おれを誉め称えるのはそこまでだ。
453 = :
おいおい、まるで俺のEmacsがダメな子みたいなこと言わないでくれ
俺はまるでダメだけどEmacsに罪はねーよ
454 = :
現在emacs(22.3.6)でCのソースを書いています。
emacsは自動でインデントを揃えてくれ、とても重宝しているのですが、更に欲を言うと
a=b+c;
を
a = b + c;
のようにフォーマットをしてくれる機能(またはelisp?)はないでしょうか?
個人的にはVisual Studioの整形みたいなものを想像しています。
Uncrustifyのような細かい設定まで出来れば完璧です。
わかりにくい文章で申し訳ありませんが、よろしくお願い致します。
455 = :
どちらかというとコーディング規約だからねえ。それ。
456 = :
>>454
行内で式が完結していれば、
(lambda ()
(interactive)
(shell-command-on-region (beginning-of-line) (end-of-line) "indent" t t)
(command-execute "\t"))
;; region指定あれば優先した方がいいかな
457 = :
ダイナミックスコープは糞
たまに変数名が衝突してわかりにくいバグが発生する
459 = :
しかし、elispがまともになるのよりも後発の関数型言語による
emacs replacementの完成の方が速そうな勢いだものな…
460 = :
>>457
またお前か。うんざりだ。もうemacs使うなよ。
461 = :
みなさんレスありがとうございます。
>>456
.emacs内にそのまま記述してみたのですが、いまいちよく分かりませんでした。
何か実行する手順みたいなのがあるのでしょうか??
何も分かって無くてすみません^^;
462 = :
>>461
.emacsには
(defun my-c-indent (rstart rend)
"Format region using the shell command \"indent\" (C program formatter). If the mark is not active, operate on the current line."
(interactive "*r")
(unless mark-active
(beginning-of-line) (setq rstart (point))
(end-of-line) (setq rend (point))
)
(shell-command-on-region rstart rend "indent" t t)
(command-execute "\t")
)
のように書いて、成形したい行にカーソルを置くかリージョン選択して
M-x my-c-indent
とやればいいのではなかろうか。
463 = :
>>462
レスありがとうございます。
教えて頂いた通り、以下をリージョンを選択後、M-x my-c-indentを実行した結果、
#include<stdio.h>
main(){
int a,b,c;
a=b+c;
}
が
/bin/bash: indent: command not found
という文字列に置き換わってしまいました。
えっと、これは"indent"の部分を何かフォーマットを行ってくれるような外部プログラムに置き換えるのでしょうか・・・?
465 = :
>>463
そしたらGNU indentをインスコしないといかんね。ftp.gnu.orgから拾ってくればいいはずだけど、どうやら2.2.9はソースをちこっといじる(indent.hの100行目をコメントアウト)必要があるみたいだ。
466 = :
おおおおおお!SUGEEEEEE
きっと後はindentの設定をいじれば、自分の好きなコーディング規約に出来るんですね!
聞いてばっかりで申し訳ないんですが、
;や}を入力してステートメントやブロックの入力を終了したとき、また貼り付けを行ったときなどにオートフォーマットをさせることは可能でしょうか?
それとインデントを揃えるコマンドであるC-M-\をこのmy-c-indentに置き換えたりすることもできれば嬉しいのですが。。。
467 = :
>>466
上のmy-c-indentの後でこう書けばいいかな。C-M-\とセミコロンだけだが閉じ括弧は自分でやってみてくだされ。
(add-hook 'c-mode-common-hook
'(lambda ()
(define-key c-mode-base-map "\C-\M-\\" 'my-c-indent)
(define-key c-mode-base-map ";"
(lambda (arg) (interactive "*P")
;; use "indent" to format the line
(let ((start) (end))
(beginning-of-line) (setq start (point))
(end-of-line) (setq end (point))
(shell-command-on-region start end "indent" t t)
)
;; default behavior for semicolon
(end-of-line) (c-electric-semi&comma arg)
;; eliminate an extra line comming from "indent" above
(c-electric-delete-forward arg)
)
)
)
)
ところで上のmy-c-..の (command-execute "\t")は(c-indent-command)のほうが良い
鴨。
469 = :
レスありがとうございます。行末でセミコロンを打ったとき感動しました!
'}'の時は対応パラグラフ内のフォーマッティングを考えているのですが、教えて頂いたdefine-key c-mode-base-map ";"の部分を単純に'}'へ変えただけでは当然一行しかフォーマッティングされずorz
(let ((start) (end))
(beginning-of-line) (setq start (point))
(end-of-line) (setq end (point))
(shell-command-on-region start end "indent" t t)
)
の部分を書き換えるのかなぁ等と思っているのですが。。。
ちなみにうまくやれば、
a+b+c+
d+e+f;
と数行に渡って式を書いた後のセミコロンで
a + b + c +
d + e + f;
のように複数行へ渡った場合のフォーマッティングもできるのでしょうか?
長文すみませんm(_ _)m
P.S.
C-M-\でのフォーマッティングは仰るとおり(command-execute "\t")を(c-indent-command)へ変えることでうまくできました^^
470 = :
よみづら。
まずはその投稿を整形すべきだな。
471 = :
M-! がうまく入力できません。
ESC ! や M-x shell-command でよいことは知っています。
Shift-Alt-1 では ! そのものが、Alt-Shift-1 では M-1 が入力されているようです。
これは私の環境のみのバグでしょうか?
472 = :
バグじゃなくて、あんたがそのように設定しているだけ。
473 = :
なんだと。
474 = :
バグじゃなくて、あんたがそのように設定しているだけ。
475 = :
大事な事なので 2 回言いました
477 = :
ぼくのキボドのCtrlキーは、埃が積もってる
479 = :
>>471
gnomeの設定と被ってる場合うまくいかない
480 = :
ありがとうございます。ちょっと調べながら頑張ってみます!!
しばらく挑戦してみて報告しますね~
481 = :
上下左右のデフォのCtrl+P,N,B,Fを変えてる人っている?
Ctrl+Bが遠いので変えようかと思ってるんだけど、どこにしようか決められない・・・
482 = :
…… Ctrl-Nは遠くないのか?
483 = :
>>481
C-n, C-pは合理的だと思うが
C-f, C-bは最悪だよな。
俺は C-f -> C-j, C-b -> C-k にしてる。
SKK使いだからSKKのC-jはC-lにしてる。
いまのところこれが一番かな。
484 = :
>>482
普通、Bは左人差し指、Nは右人差し指だよね
Bはアルファベットの中で一番遠く感じるキーだと思うんだけど
>>483
やっぱり我流で決めるべきかな
あんまり普通(=一般Emacsユーザの平均的な設定)からかけ離れてしまうと
まずいかなと妙な懸念を持ってるんだけど、そんなのは捨たほうがいいかなw
上下左右はよく使うんだから、viのhjkl並に易しい位置にしたいものだ・・
485 = :
Ctrl-Jは、Ctrl-Mと区別付かない端末が結構あったことから、
あまり割り当てられていないキーの一つ。
>>484
Bはほとんどのキーボードで左右どちらからも同じ距離だし、
手首の回転で届かないYの方が遠いし。説得力まるでない。
486 = :
移動の話が出てるからついでに聞くんだけど、C-x q とかでリードオンリーにした後とか、最初からリードオンリーのファイルとかはどうせ書き込めないモードなんだから
viライクなh,j,k,lだけでの移動にしたいんだけど、そんな事って可能?
487 = :
>>484
ええと、左手を普通にキーボードに乗せると、人差指がBに、中指がFに乗らんか?
手が小さいのか?
488 = :
PNBFは慣れてしまった方がいい。
ここをいじると他への影響が大きすぎる。
489 = :
>>486
C-x q って何だっけ?
490 = :
>>485
Yは真ん中からやや右よりだから右人差し指でしょ
Bはほんと真ん中にあるじゃん
>>487
自分はおそらく日本人の平均より手はでかいが
つーか左人差し指がF、右人差し指がJのホームポジションじゃないのか?
491 = :
>>486
http://www2.ocn.ne.jp/~cheerful/script/xyzzy/mode/minorviewmode.l
とか、XEmacs の view-less.el とか。
492 = :
>>490
「ホームポジション」に固執して不便を我慢するのですね。すばらしい心掛けです。
494 = :
シーンとしてると思ったら分かりやすい話題になった途端レスが急に増えるな。
ROM多いんだなこのスレ。その割に普段ろくな話題提供もしないんだから
コミュニティ精神の欠けらもない…
496 = :
>>494
人のこと言えるの?
497 = :
>>479
ありがとうございました。GNOMEのキーボードの設定が問題でした。
498 = :
ホームポジション変えてるのかみんな?
俺には無理だ・・・FとJの小突起に手が触れてないと迷子になる
499 = :
おれは変えてないよ。
なんでみんな変えてると思ったんだ?
500 = :
さも変えて普通みたいに言う人が自己主張するからでしょ
俺もホームポジションは変えてないし、Bは左人差し指だな
>Emacs使いが'B'を左人差指はないわw
誰がどうキーボードを使おうと気にしないけどこれはどうかと思った
みんなの評価 : ○
類似してるかもしれないスレッド
- Emacs part 25 (1001) - [92%] - 2008/8/10 0:18 ○
- Emacs part 26 (1001) - [92%] - 2008/11/8 20:47 ○
- Emacs part 22 (1001) - [92%] - 2008/1/18 7:47 ○
- Emacs part 28 (605) - [92%] - 2009/3/25 0:37 ○
- Emacs part 23 (1001) - [92%] - 2008/2/8 0:04 ☆
- Emacs Part 47 (995) - [84%] - 2015/4/19 13:01
- Emacs Part 37 (1001) - [84%] - 2011/6/20 19:47
- Emacs part24 (991) - [84%] - 2008/5/10 5:08 ○
- Emacs Part 40 (1001) - [76%] - 2012/9/7 0:30
- Emacs Part 53 (989) - [76%] - 2022/12/5 12:45
- Emacs Part 39 (990) - [76%] - 2012/2/9 19:45
- Emacs Part 34 (1001) - [76%] - 2010/6/21 19:45 ○
- Emacs Part 33 (1001) - [76%] - 2010/3/9 20:01 ○
トップメニューへ / →のくす牧場書庫について