4

私はcc-modeEmacs で作業していますが、インデントが非常に面倒です。

VIM ユーザーとして、私は長いインデントに慣れているだけでなく、タブからタブへと好きなだけ押すという贅沢にも慣れています。

Emacs では、私の TAB は にマップされgoto-lineます。まず、現在の行 (またはポイントの後にあるもの) をインデントするために設計された関数はどれですか? indent-region領域を強調表示する必要があるため、面倒です。

第二に、インデントを修正する最良の方法は何ですか?

ありがとうございました、

4

3 に答える 3

8

現在使用されているタブの種類を確認できますM-x describe-variable RET c-indentation-style(ただし、ドキュメントに記載されているように、この変数を直接設定するのではなく、を使用してくださいM-x c-set-style)。

変数c-basic-offsetはタブを制御するものでcc-modeあり、そのデフォルトは、set-from-style設定したCスタイルからタブが継承されることを意味します。これにより、組み込みスタイルM-x set-c-styleのセット(以下を参照)から選択できます。または、を作成することもできます。独自のスタイル。スタイルがどのように定義されているかを確認してから、それらの1つを。でテンプレートとして使用できます。M-x describe-variable RET c-style-alistM-x c-add-style

  • gnu -GNUプログラムのCコードのためのフリーソフトウェアファウンデーションによって祝福されたコーディングスタイル。
  • k&r -Cコードの古典的なカーニハンとリッチーのスタイル。
  • bsd -EricAllmanにちなんで「Allmanスタイル」としても知られています。
  • whitesmith-初期の商用CコンパイラであるWhitesmithsCに付属の例で人気がありました。
  • stroustrup -C++コード用の古典的なStroustrupスタイル。
  • ellemtel-「C++でのプログラミング、ルールと推奨事項」、ErikNyquistおよびMatsHenricson、Ellemtel^1で定義されている一般的なC++コーディング標準。
  • linux -Linux(カーネル)のCコーディング標準。
  • python -Python拡張モジュール^2のCコーディング標準。
  • java -Javaコードを編集するためのスタイル。java-modeに入ると、c-default-styleのデフォルト値がこのスタイルをインストールすることに注意してください。
  • awk -AWKコードを編集するためのスタイル。awk-modeに入ると、c-default-styleのデフォルト値がこのスタイルをインストールすることに注意してください。
  • ユーザー-これはあなたが作成した特別なスタイルです。これは、Customizationインターフェースを使用して行うカスタマイズ、または.emacsファイルのトップレベルにsetqsとc-set-offsetsを書き込むことによって変更された、すべてのスタイル変数の工場出荷時のデフォルトで構成されます(構成の基本を参照)。スタイルシステムは、初期化の一部としてこのスタイルを作成し、後で変更しません。

アップデート:

tabキーを使用してタブ文字を挿入することを提案する人もいますが、タブ文字を無理に挿入しない\tでください。StackOverflowの作成者の1人が言うように、「タブを使用してコードをフォーマットするのはバカだけです」。今では少し厳しいですが、最も巨大な2つのライバルであるGoogleMicrosoftでさえ、この点に同意していることに注意してください(デフォルトでは異なる数のスペースを推奨していますが)。

グーグルは言う

スペースのみを使用し、一度に2つのスペースをインデントします。

マイクロソフトは言う

コードではタブ文字(\ 0x09)を使用しないでください。すべてのインデントは4つのスペース文字で行う必要があります。

また、emacswikiにはTabsareEvilに関するセクションがあります

だから、出て行ってタブを外してください

于 2012-03-22T22:22:54.630 に答える
0

答えは:(setq-default c-basic-offset <value>)

于 2012-03-22T22:00:23.150 に答える
-2

私も emacs が好きですが、タブを管理しようとする試みには我慢できません。だから私は私の中で以下を使用します.emacs

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

(defalias 'backward-delete-char-untabify 'backward-delete-char)
(defun indent-according-to-mode () (interactive)
  (save-excursion
    (goto-char (- (line-beginning-position) 1))
    (search-backward-regexp "^[         ]*")
  )
  (if (eq (point) (line-beginning-position))
    (insert (match-string 0))
    (save-excursion
      (goto-char (line-beginning-position))
      (insert (match-string 0))
    )
  )
)

(defun newline-and-indent () (interactive) (newline) (indent-according-to-mode))
(defun lisp-indent-line () (interactive) (insert "      "))
; Is there a way to fix this without a hook?
(defun my-c-hook ()
  (setq c-electric-flag nil)
  (defun c-indent-command (n) (interactive "*") (insert "       ")))
(add-hook 'c-mode-common-hook 'my-c-hook)
(defun my-perl-hook ()
  (defun perl-electric-terminator () (interactive "*") (self-insert-command 1))
  (defun perl-indent-command () (interactive "*") (insert "     ")))
(add-hook 'perl-mode-hook 'my-perl-hook)
(defun indent-for-tab-command () (interactive "*") (insert "    "))

結果の動作: タブ キーは純粋に挿入されるタブ文字であり、Enter キーを押すと、現在の行から新しい行に先頭の空白 (スペースまたはタブ) が正確にコピーされ、これらのモードでの特別なインデント動作はすべて無効になります。他の言語を使用する場合は、上記を拡張/適応させてフックを追加する必要がある場合があります。

注: 上記で、引用符内の空白のほとんどは、実際にはリテラル タブです。SO を通過せず、正しくコピー/貼り付けできない場合は、自分で手動で修正する必要がある場合があります。

于 2012-03-23T01:17:20.093 に答える