6

他のほとんどのエディター (eclipse、notepad++) と同じように動作するように、emacs の不適切なデフォルトのタブ スキームをオーバーライドしたいと考えています。モードに関係なく、タブがタブを挿入し、Enter キーを押すと現在のタブの深さが維持されるように設定したいと考えています。

私はこれを試しましたが、何もしません:

(global-set-key (kbd "TAB") 'tab-to-tab-stop)
(setq default-tab-width 4) ;; 8 is way too many
4

6 に答える 6

9

Enter キーで次の行に移動し、自動的にインデントするようにするには、次のようにします。

(global-set-key (kbd "RET") 'newline-and-indent)

あなたの.emacs。[または、Enter の代わりにヒットすることもできますC-j。] これがあれば、手動でタブを挿入する必要はありません。なぜなら、Emacs は開き波括弧の後に新しい行を自動的に余分な深さまでインデントするからです。インデントを変更したい場合、右のインデントに移動するまでTABを押してから、そこから入力を開始できます。[そして、右中括弧を入力すると、Emacs はその中括弧を 1 インデント レベル後方に移動するほどスマートです。]

これを機能させるには、 を削除する必要があり(global-set-key (kbd "TAB") 'tab-to-tab-stop)ます。

于 2008-12-05T21:49:36.257 に答える
6

多くのメジャー モードはTABバインディングをオーバーライドします。たとえば、cc-mode は にバインドTAB'c-indent-to-columnます。

提案されている は、ほとんどすべての'global-set-keyメジャー モードがTAB.

うまくいくかもしれない 1 つのトリックは、使用するアプローチをコピーし、境界'pabbrevを持つグローバル マイナー モードを定義することです。TAB次のようにできます。

(defvar just-tab-keymap (make-sparse-keymap) "Keymap for just-tab-mode")
(define-minor-mode just-tab-mode
  "Just want the TAB key to be a TAB"
  :global t :lighter " TAB" :init-value 0 :keymap just-tab-keymap
  (define-key just-tab-keymap (kbd "TAB") 'indent-for-tab-command))

ただし、これによりすべてのTAB補完が無効になります。各メジャーモードを 1 つずつオーバーライドすることで、おそらく最良の結果が得られます (TAB完了を混乱させないようにするため)。

于 2008-12-05T22:25:47.400 に答える
4

私が最初にEmacsを使い始めたときも、これは私を悩ませました。しかし、私はそれを愛するようになりました。適切にインデントしたい場合は<tab>;、リテラルタブを挿入したい場合はヒットし、にM-iバインドされている(Metaと'i'または<Alt>-<i>)をヒットしtab-to-tab-stopます。

于 2008-12-22T15:57:36.487 に答える
3

トレイジャクソンの答えは、おそらくの'self-insert-command代わりに使用することを除いて、おそらくあなたが望むものだと思います'indent-for-tab-command。私は個人的にemacsのデフォルトの振る舞いを好みself-insert-commandますが、コードが適切にフォーマットされていることを確認するなどの凝ったことをしようとするのではなく、それが言うことを行います。

実際にタブ(インデントではない)を挿入したい場合は、Miを押します。

于 2009-05-01T22:22:12.540 に答える
2

私がhttp://github.com/vohrta/regtabで作成したこのマイナー モードに興味があるかもしれません。

タブキーを押すと、タブ文字 (indent-tabs-mod が nil でない場合) またはタブ幅のスペースがポイントに配置されるようになります。このモードは、選択したテキストの領域での通常の動作と考えられるものを処理したり、行 (または行のセット) の先頭にあるタブを削除するシフトタブを処理したりすることもできます。

Mx regtab-mode を押すと、いつでも有効または無効にできます。

于 2009-10-28T02:47:56.927 に答える
1

C-jEnterを押したくない改行+インデント機能を実行します。

于 2008-12-05T20:10:05.503 に答える