設定 - emacs 複数 行 インデント




テキストモードでEmacsでスペースインデントを4に設定する (13)

短い答え:

要点は、インデント時に必要なものを挿入するようにemacsに指示することです。これはインデント行機能を変更することによって行われます。 タブを挿入してタブを4つのスペースに変更する方が、4つのスペースを挿入するように変更するよりも簡単です。 次の構成で問題が解決されます。

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)

説明:

メジャーモードで制御されるインデントから@ emacsマニュアル

各主要モードの重要な機能は、編集中の言語のためにキーを適切にインデントするようにカスタマイズすることです。

[...]

indent-line-function変数は、現在の行をインデントするためにindent-regionを呼び出すときなどに使用される関数(およびさまざまなコマンド)です。 indent-on-modeコマンドは、この関数を呼び出すだけではありません。

[...]

デフォルト値は、多くのモードでインデント相対です。

indent-relative @ emacsマニュアルから:

Indent-relative前の空白でない行の次のインデントポイントの下までのスペース。

[...]

前の非空白行に列ポイントを越えてインデントポイントがない場合は、代わりに `tab-to-tab-stop 'が実行されます。

indent-line-functionの値をinsert-tab関数に変更し、タブ挿入を4つのスペースとして構成するだけです。

メジャーモードのtext-modeモードのバッファでTABを押すと、Emacsを8個のスペースタブから4個のスペースタブに切り替えるのに失敗しました。 私は私の.emacs以下を追加しました:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)

;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)

どのように私の.emacsファイル(または私のバッファのローカル変数)を変更しても、 TABボタンは常に同じことをします。

  1. 上記のテキストがない場合、 8つのスペースをインデントします
  2. 前の行にテキストがある場合は、2番目の単語の先頭にインデントします

私がEmacsを愛している限り、これは迷惑になりつつあります。 前の行にテキストがない場合、Emacsに少なくとも4つのスペースをインデントさせる方法がありますか?


c-set-styleでスタイルを変えるだけで十分でした。


この問題は、タブストップの欠落が原因ではありません。 Emacsには、表形式のデータを整列させるように設計されたindent-relativeという新しい(?)タブメソッドがあります。 TABキーは、indent-for-tab-commandメソッドにマップされます。これは、indent-line-functionが設定されているメソッドを呼び出します。これはテキストモードのインデント相対メソッドです。 私はインデントライン関数の変数(テキストモードのフックが動作していないので、おそらくそれはモードフックを実行した後にリセットされていますか?)をオーバーライドする良い方法を考え出していませんでしたが、これを取り除く簡単な方法TABをより簡単なtab-to-tab-stopメソッドに設定することで、単にintent-for-tab-commandメソッドをチャックするだけです。

(define-key text-mode-map(kbd "TAB") 'タブからタブストップ)


これは、シーケンスやタブのスペースへの変換なしで、タブが私のために挿入されるのを防ぐ唯一のソリューションです。 どちらも十分だと思われましたが、無駄でした。

(setq-default
    indent-tabs-mode nil
    tab-width 4
    tab-stop-list (quote (4 8))
)

quoteは2つの数字が必要であることに注意してください(それ以上は必要ありません)。

また、ほとんどのメジャーモード( Pythonなど)では、Emacsでは字下げが自動的に行われます。 自動インデントの外側でインデントする必要がある場合は、次のように使用します。

M - i


これを.emacsファイルに追加します:

これは、タブが2文字に表示される幅を設定します(数字2を任意の値に変更します)

(setq default-tab-width 2)

emacsが実際にスペースの代わりにタブを使用していることを確認するには:

(global-set-key (kbd "TAB") 'self-insert-command)

さて、タブ上のバックスペースをスペースに変換してからスペースを削除するのであれば、emacsのデフォルトはこれです。 これは迷惑になることがあります。 タブを削除するだけなら、これを行うことができます:

(setq c-backspace-function 'backward-delete-char)

楽しい!


これを試して:

(add-hook 'text-mode-hook
  (function
   (lambda ()
     (setq tab-width 4)
     (define-key text-mode-map "\C-i" 'self-insert-command)
     )))

これにより、TABは常に4文字ごとにタブストップを持つリテラルのTAB文字を挿入します(ただし、テキストモードのみ)。 それがあなたが求めているものでないなら、あなたが見たいと思う行動を記述してください。


やってみました

(setq  tab-width  4)

カスタマイズは、 (setq tab width 4)を影にすることができるので、 setq-default使うか、Customizeにあなたのやっていることを知らせてください。 私はまた、OPに似た問題を抱えていて、これを単独で修正し、 tab-stop-listinsert機能を調整する必要はありませんでした:

(custom-set-variables
 '(tab-width 4 't)
 )

すぐにこれを追加すると便利です(emacsWikiのヒント):

(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)

私がこれを.emacsファイルに書き込むまで、最良の答えはうまくいかなかった:

(global-set-key (kbd "TAB") 'self-insert-command)

私の初期化ファイルからは、タブの代わりにスペースが必要だったので違います:

(add-hook 'sql-mode-hook
          (lambda ()
             (progn
               (setq-default tab-width 4)
               (setq indent-tabs-mode nil)
               (setq indent-line-function 'tab-to-tab-stop) 
               (modify-syntax-entry ?_ "w")       ; now '_' is not considered a word-delimiter
               (modify-syntax-entry ?- "w")       ; now '-' is not considered a word-delimiter 
               )))

(customize-variable (quote tab-stop-list))

.emacsファイルのカスタム設定変数タブストップリストのエントリを追加する:

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))

(setq tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq indent-tabs-mode nil)

(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)




indentation