6

Vim から Emacs に切り替えようとしていますが、タブを希望どおりに処理するように構成しようとして、髪を引き裂いています。私は求める:

  • 2 つのスペースに展開する「タブ」を挿入しました。私が何をしようとも、Emacs は頑固に 8 に固執します。
  • 画面上で2 つのスペース\tで表されるタブ (つまり、実際の文字)。
  • TAB を押すと、行全体をインデントするのではなく、カーソル位置にタブを挿入する必要があります。現在、どこでも TAB を押すと、Emacs は行頭のすべての空白を破棄します。これはこれまでで最も腹立たしいことです。

私の現在の~/.emacs読書

(setq standard-indent 2)
(setq-default indent-tabs-mode nil)

しかし、私は Web から提案された構成を果てしなく試しましたが、どれも彼らが言ったことを実行していません。(API は常に変更されますか?私は を使用しているようですGNU Emacs 23.1.1。)

4

3 に答える 3

7

Emacs は、インデントの処理を非常に柔軟にサポートしています。一般に、現在のモードによって、それらがどのように機能するかが決まります。したがって、C ファイルで作業している場合、タブを押す方法は、Python ファイルで作業している場合とは異なります。

したがって、どのモードで作業しているかによって、得られる答えが制限されます。ほとんどの場合、それと戦わないことをお勧めします。私にとって、インデント動作は emacs の最高の機能の 1 つです。ただし、自分でカスタマイズするには時間を費やす必要があります。

タブの表示方法を変更するには、tab-width を 2 に設定する必要があります。Java または C スタイルのコードを編集している場合は、これらを NIL にすることですべての優れたインデント機能をオフにしたいようです。

  • c-tab-always-indent
  • c-構文インデント
  • インデントタブモード

これらは、カスタマイズ インターフェイスから設定することをお勧めします。「Mxcustom-group RET C」を使えば、Cモードの各種設定を見ることができます。

異なるタイプのファイルを編集している場合、手順は異なります。

おそらく、emacs がファイルに対して間違ったモードになっている可能性があります。「Mx basic-mode」を実行して、そこでの動作を好むかどうかを確認できます。

于 2010-07-02T13:32:27.150 に答える
4
;; * Inserted "tabs" to be expanded into two spaces. Emacs stubbornly
;;   sticks to eight, no matter what I do.

;; * Tabs (i.e. real \t characters) to be represented on screen by two
;;   spaces.

(setq-default tab-width 2)


;; * Pressing TAB should insert a tab at the cursor rather than indent
;;   the entire line. Currently, I press TAB anywhere and Emacs
;;   destroys all whitespace at the start of the line; this is the
;;   most infuriating thing so far.

(setq-default indent-tabs-mode t)

(mapcar (lambda (hooksym)
          (add-hook hooksym
                    (lambda ()
                      (kill-local-variable 'indent-tabs-mode)
                      (kill-local-variable 'tab-width)
                      (local-set-key (kbd "TAB") 'self-insert-command))))

        '(
          c-mode-common-hook

          ;; add other hook functions here, one for each mode you use :-(
          ))

;; How to know the name of the hook function?  Well ... visit a file
;; in that mode, and then type C-h v major-mode RET.  You'll see the
;; mode's name in the *Help* buffer (probably on the second line).

;; Then type (e.g.) C-h f python-mode; you'll see blather about the
;; mode, and (hopefully) somewhere in there you'll see (again e.g.)
;; "This mode runs the hook `python-mode-hook', as the final step
;; during initialization."
于 2010-07-02T17:54:28.183 に答える
1

これにより、必要なもののほとんどが得られるはずです。おそらく、よく使用する他のプログラミング モードをカスタマイズする必要があります。

(defun insert-tab ()
  "self-insert-command doesn't seem to work for tab"
  (interactive)
  (insert "\t"))
(setq indent-line-function 'insert-tab)  ;# for many modes
(define-key c-mode-base-map [tab] 'insert-tab) ;# for c/c++/java/etc.
(setq-default tab-width 2)
于 2010-07-02T16:45:55.160 に答える