web-dev-qa-db-ja.com

EmacsでCコードを自動インデントするにはどうすればよいですか?

Emacsの感触をつかみ始めたばかりですが、リターンキーを押してもインデントしない傾向があることに不満を感じています。 C-jを押すとうまくいくことはわかっていますが、その習慣を身につけることはできません。できません。リターンキーを押す必要があり、毎回タブを付け直すのが嫌いです。

オプションを調べて、CモードフックやC++モードフックなどを見つけました。それらは2つのキーマッピングを定義しました(10と13、0Aと0Dはアセンブリで頻繁に使用したためCR/LFであることを思い出しました)- -「(lambda nil (define-key LISP-mode-map [13] (quote newline-and-indent)) "と他は同じですが、(quote newline)代わりに、最後に-and-indentを付けて、機能すると考えました。

しかし、そうではありません。私はそれを設定して保存し、試しましたが、役に立ちませんでした。 emacsを再起動しましたが、まだ成功していません。コードをインデントするにはどうすればよいですか? emacsが基本的なニーズに合わせて設定するためだけにLISPの学位を必要とするのは非常に正気ではありません。

また、一種の副次的な質問として、どのようにコピーしてから貼り付けるのですか? クリップボード? 殺す/ヤンクするのは便利ですが、他の場所に貼り付けるたびに編集->コピーするのは嫌です。

-編集-

さて、私は次の行を.emacsに入れて、それは機能しました:

(add-hook'c-mode-common-hook(lambda()
(local-set-key(kbd "RET") 'newline-and-indent)))

助けてくれてありがとう

22
Carson Myers

見てください emacswiki --autoindent

そこで提案されているように、.emacsに次のコードを入れてください

(defun set-newline-and-indent ()
  (local-set-key (kbd "RET") 'newline-and-indent))
(add-hook 'c-mode 'set-newline-and-indent)

変数CDefaultStylをカスタマイズできます。 emacsで、[オプション]-> [Emacsのカスタマイズ]-> [特定のオプション]に移動し、c-default-styleと入力して、選択に設定します。これにより、Tabキーを押す必要がなくなります。行の先頭から「;」を押しながら入力します。 、自動的にインデントされます。

お役に立てれば

16
Amol Gawai

~/.emacsファイルで改行キーをグローバルに改行およびインテントとして機能するように設定しました。

(global-set-key "\C-m" 'newline-and-indent)

私のために働きます。

19
miqqis

C/c ++ファイル全体をインデントしたい場合は、

  1. すべてにマークを付ける:CTRL-x h
  2. tabキーを押します

それは、ところで、xml、pythonコードおよびその他のタイプでも機能します。

8
wr.

他の提案に加えて、C-c C-aを試して自動改行機能を切り替え、モードラインがC/laを読み取るようにします。そうすれば、ほとんどの場合、Enterキーを押す必要さえありません。代わりに、セミコロンまたは中括弧を入力すると、改行が挿入され、コードがインデントされます。 Enterキーを押す必要があり、自動インデントが得られない場合もありますが(別の回答で提案されているように、RETを再バインドしない限り)、とにかく次の行を入力し始めると、インデントされることに気付く場合があります。句読文字を入力すると正しく入力されます。

「LISP学位」を開始するには、情報ブラウザにC-h iと入力し、「CCモード」のノードに移動します(Emacsのノードとは別です。ディレクトリの場合はdと入力し、そこでCCモードを見つけてください)。

6

[enter]、(kbd "enter")、または(read-kbd-macro "enter")を試してください。これらはすべて微妙に異なることを行います;)

また、私にとってはコピー/貼り付けはうまくいきます。 emacs -qを実行してみて、それが機能するかどうかを確認できますか?もしそうなら、それはあなたの.emacsに問題があるかもしれません。

私も持っています:

(when window-system
  ;; use extended compound-text coding for X clipboard
  (set-selection-coding-system 'compound-text-with-extensions))

しかし、それは何か他のことをするかもしれません;)

1
DarkWulf

コピー:開始に移動、CTRL-スペース、終了に移動、ALT-W

貼り付け:CTRL-y

uNIXの場合:左マウスでコピー、右マウスで貼り付け

0
Peter Miehle

これを行う簡単な方法は、electric-indent-modeを使用することです。手動で有効にしたい場合は、

M-x electric-indent-mode

自動的に有効にするには、.emacsで次のように言います。

(electric-indent-mode)

これはEmacs24.4のデフォルトになります。

0
jch