Emacsを押して8つのスペースタブから4つのスペースタブに切り替えることに失敗しました TAB メジャーモードtext-mode
のバッファ内。次を.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 ボタンは常に同じことを行います。
私がEmacsを愛している限り、これはいらいらさせられています。前の行にテキストがない場合、Emacsに少なくとも4つのスペースをインデントさせる方法はありますか?
(customize-variable (quote tab-stop-list))
またはtab-stop-listエントリをcustom-set-variables in 。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))))
重要な点は、インデント時に必要なものを挿入するようにemacsに指示することです。これは、indent-line-functionを変更することによって行われます。 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-according-to-modeは、この関数を呼び出すだけです。
[...]
多くのモードでは、デフォルト値はインデント相対です。
インデント相対@ emacsマニュアルから:
前の空白行の次のインデントポイントの下にインデント相対スペース。
[...]
前の非空白行に、開始位置の列ポイントを超えるインデントポイントがない場合は、代わりに「tab-to-tab-stop」が実行されます。
Indent-line-functionの値をinsert-tab関数に変更し、タブ挿入を4つのスペースとして構成するだけです。
更新: Emacs 24.4以降:
tab-stop-list
は、暗黙的に無限に拡張されました。デフォルト値はnil
に変更されます。これは、tab-width
列ごとにタブストップすることを意味します。
つまり、nil
に設定したままにしておくことができるため、以下に示す方法でtab-stop-list
を設定する必要はなくなりました。
元の答えが続きます...
(setq tab-stop-list 4 8 12 ................)
関数が使用されるのを待っているときにnumber-sequence
のようなものを見ると、いつも少し痛みます。
(setq tab-stop-list (number-sequence 4 200 4))
または
(defun my-generate-tab-stops (&optional width max)
"Return a sequence suitable for `tab-stop-list'."
(let* ((max-column (or max 200))
(tab-width (or width tab-width))
(count (/ max-column tab-width)))
(number-sequence tab-width (* tab-width count) tab-width)))
(setq tab-width 4)
(setq tab-stop-list (my-generate-tab-stops))
次のようにタブを設定する方が簡単な場合があります。
M-x customize-group
Customize group:
プロンプトでindent
と入力します。
インデントオプションをすべて設定して現在のセッションに設定したり、今後のすべてのセッションに保存したりできる画面が表示されます。
この方法で行う場合は、 カスタマイズファイルをセットアップする にする必要があります。
(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 indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(setq c-default-style "linux")
(setq c-basic-offset 4)
(c-set-offset 'comment-intro 0)
これはC++コードと内部のコメントでも機能します
(defun my-custom-settings-fn ()
(setq indent-tabs-mode t)
(setq tab-stop-list (number-sequence 2 200 2))
(setq tab-width 2)
(setq indent-line-function 'insert-tab))
(add-hook 'text-mode-hook 'my-custom-settings-fn)
この問題は、タブストップがないことによるものではありません。 emacsには、indent-relativeと呼ばれる(新しい?)タブメソッドがあり、これは表形式のデータを並べるように設計されているようです。 TABキーは、メソッドindent-for-tab-commandにマップされます。このコマンドは、変数indent-line-functionが設定されているメソッドを呼び出します。これは、テキストモードのインデント相対メソッドです。 indent-line-function変数をオーバーライドする良い方法を見つけられませんでした(テキストモードフックが機能しないので、モードフックの実行後にリセットされる可能性がありますか?)、しかしこれを取り除く簡単な方法動作は、TABをより単純なタブツータブ停止メソッドに設定することで、タブコマンドコマンドの意図をチャックするだけです。
(define-key text-mode-map(kbd "TAB") 'tab-to-tab-stop)
これを試して:
(add-hook 'text-mode-hook
(function
(lambda ()
(setq tab-width 4)
(define-key text-mode-map "\C-i" 'self-insert-command)
)))
これにより、TABは常に4文字ごとにタブストップ付きのリテラルTAB文字を挿入します(ただし、テキストモードの場合のみ)。それがあなたが求めているものではない場合、あなたが見たい行動を説明してください。
これらのコード行を.emacsファイルに追加できます。インデント相対の代わりにinsert-tabを使用するテキストモードのフックを追加します。
(custom-set-variables
'(indent-line-function 'insert-tab)
'(indent-tabs-mode t)
'(tab-width 4))
(add-hook 'text-mode-hook
(lambda() (setq indent-line-function 'insert-tab)))
役に立てば幸いです。
これを.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)
楽しい!
C-set-styleでスタイルを変更するだけで十分です。
カスタマイズは(setq tab width 4)
をシャドーすることができるため、setq-default
を使用するか、カスタマイズに自分が何をしているかを知らせます。私もOPに似た問題があり、これだけで修正し、tab-stop-list
またはinsert
関数を調整する必要はありませんでした:
(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)
これは、タブをシーケンスに変換したりスペースに変換したりすることなく、タブが挿入されないようにする唯一のソリューションです。どちらも適切に見えますが、無駄です。
(setq-default
indent-tabs-mode nil
tab-width 4
tab-stop-list (quote (4 8))
)
quote
が機能するには2つの数値が必要であることに注意してください(ただし、それ以上ではありません)。
また、ほとんどのメジャーモード(Python
など)では、インデントはEmacsで自動的に行われます。自動インデントの外側でインデントする必要がある場合は、次を使用します。
M-i
私の初期化ファイルから、タブの代わりにスペースが欲しかったので異なる:
(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 ");現在、 '_'はワード区切り文字と見なされません (modify-syntax-entry?-" w ");現在 '-'はワード区切り文字と見なされません )) )
やってみました
(setq tab-width 4)
ちなみに、C-modeの場合、(setq-default c-basic-offset 4)
を追加します。 emacs。詳細については、 http://www.emacswiki.org/emacs/IndentingC を参照してください。
(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)