タブを使用したEmacsインデント


8

スペースではなくグローバルにタブのみを使用してEmacsインデントコードを作成する方法はありますか?tabifyコマンドを知っています。デフォルトの構成のようにタブとスペースを混在させるのではなく、自動インデントでタブを使用することをお勧めします。

回答:


7

まあ、タブとインデントに、あなたはそれを確保したいと思うindent-tabs-modeであるt(デフォルト値です)。ただし、タブのみを取得するには、インデントを実行しているモードを調整して、すべての行がtab-width(デフォルトでは8)の倍数でインデントされるようにする必要があります。たとえば、Cモードでは、c-basic-offset8に設定してみてください。

または、tab-widthEmacsが各レベルのインデントに到達するためにスペースを使用する必要がないように、より小さな値に減らすことができます。しかし、それを行うと、コードで作業しなければならない(そして標準の8文字のタブストップを使用する)だれもが迷惑になります。

再考することをお勧めします。個人的には、タブでインデントされたコードで作業するのは面倒です。特に、8つのスペースタブのように見えない場合は特にそうです。(最も悪いのは、一部の行がスペースを使用し、一部の行がタブを使用するコードであり、明らかに8つのスペースタブではありません)(setq indent-tabs-mode nil)


私はこの質問を2番目のパラグラフ設定タブ幅についてマークアップし、コメントにはタブとスペースを混在させません。しかし、タブ幅が設定されている場合、インデントの編集は、複数のスペースではなく、各レベルのタブを使用する方がはるかに簡単です
user151019

3番目の段落はおおむね役に立ちますが、プル/マージリクエストの送信先など、元の作者のインデントスタイルを制御できないことがよくあります。私には好みがあります。私はそれらのインデントスタイルを合理的なレベルまで使用することを尊重していると思うので、時々選択は私たちのものではありません
r2evans

7

Emacsには、Cのインデント用に定義済みのスタイルがいくつか用意されています。ニーズに適したスタイルがない場合は、独自のスタイルを作成できます。標準スタイルの中で、探しているようですlinux(Linuxカーネルソースで使用されているスタイル)。インデントは8カラムで、幅8のタブ文字を使用しています。

これらを次のように配置することで、これらの設定をCのデフォルトスタイルにすることができます.emacs

(setq c-default-style "linux")
(defun my-c-mode-hook ()
  (setq indent-tabs-mode t)
  (setq tab-width 8))
(add-hook 'c-mode-hook 'my-c-mode-hook)

ただし、好みの異なる他のユーザーと共同作業する場合は、これらの設定を使用しないでください。特に、タブを使用するとエネミーになります。特定のファイルを特定のスタイルで保持する場合は、ファイル変数を使用して、Emacsでファイルを編集するすべての人が同じ設定を使用するようにできます。

/*
 * Local Variables:
 * c-file-style: "linux"
 * indent-tabs-mode: t
 * tab-width: 8
 * End:
 */

同様にインデントされたCファイルを含むプロジェクト全体がある場合は、すべてのファイルを汚染するのではなく、ディレクトリ変数を使用します。.dir-locals.el次のような内容でというファイルを作成します。

((c-mode . ((c-file-style . "linux")
            (indent-tabs-mode . t)
            (tab-width . 8))))

1

タブは私を困らせますが、他の誰かのコードで作業できるように、emacsがインデントにタブのみを使用する方法を理解する必要がありました。これが私のために働いたものです:

(defun tmp/change-indent ()
  (interactive)
  (setq indent-tabs-mode t)
  (setq tab-width 2))

何かをいじる前に、Tabキーを押すと、2列ずつ自動的にインデントされることに気付きました。「tab-width」を2列のオフセットと一致するように設定すると、emacsは自動フォーマットを行うときにタブを使用できました。私はnxmlモードで作業していましたが、これはどのモードでも機能するはずです。


いいね。これも私を悩ませました。列のオフセットと一致するようにタブの幅を設定する必要があるのは直感的ではありません。よくできました。私はこのアイデアをc ++モードで使用しました
Sean Lynch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.