すべての自動インデントを完全に無効にします


18

Emacsですべての自動インデントを完全に無効にするにはどうすればよいですか?少なくとも基本モードでは無効にする必要がありますが、現在のセッションでグローバルに無効にすることで問題ありません。

重複することを宣言する前に、この質問の残りを読んでください。 私が見つけた他のすべての答えは、インデントのはるかにターゲットを絞った無効化です。セッション全体のすべての自動インデントを完全に無効にします。

に設定electric-layout-modenilても機能しません。

詳細

Windows ASCIIテキストエディターで大きなGitコミットメッセージを作成したいことがあります。これらのメッセージには、多くの場合、箇条書きリスト、コードブロック、またはソースドキュメントの正確な書式設定が意味のあるその他のものが含まれています。私のコードベースはLinux上にあり、テキストのみのSSHクライアントを使用してボックスに接続します。Gitがコミットメッセージを編集するためにEmacsに入ると、ソースコミットメッセージをWindowsクリップボードにコピーし、Windows貼り付けコマンドを使用して貼り付けたいと思います。Emacsの観点からは、Windowsテキストファイルで見つかったものを入力しています。残念ながら、Emacsがインデントされた行を見ると、独自の自動インデントが追加されるので、バッファーの左端に沿ってこの巨大な空白の三角形を取得します。

GNU Emacs 24.3.1を使用しています。

回避策

私の現在の回避策は、LinuxホストによってマウントされているファイルシステムにWindowsテキストファイルを転送し、そのファイルをEmacsにロードしてから、killとyankを使用してコンテンツを転送することです。これは少し不格好です。

テキストブロックの例を次に示します。

a

  - b
    c
    d

MSWinペーストを介してEmacs-under-sshに貼り付けると、次のように表示されます。

a

  - b
      c
          d

C-h l貼り付けを行った後に押すと、これが表示されます。改行はではC-jなくを使用して入力されることに注意してくださいRET

a C-j C-j SPC SPC - SPC b C-j SPC SPC SPC SPC c C-j
SPC SPC SPC SPC d C-j C-h l

インデント関連する変数のいくつかは、バッファローカルされている限りは、何かがあるように必要があるだろうという主要なモードのフックの後に実行されます-例えば、おそらく [?] hack-local-variables-hook-と本質的にアンドゥ他のものの一部として設定メジャーモードの自分標準初期化。 fundamental-modeは内部の小さな関数です。 simple.elつまり、-必要に応じて独自に変更/作成できます。ただし、名前を変更すると、一部の関数で使用されないため、同じ名前を維持することを検討してください。(kill-all-local-variables) (run-mode-hooks)M-x find-function RET fundamental-mode RET
法律家


emacsにはvimと同等のものがあり:set pasteますか?基本的には、「貼り付けられたテキストに手を触れないでください」ということです。自動インデントも含まれます。
Omairマジッド

回答:


21

Emacs≤24.3

RETを押してもデフォルトではインデントされません(一部のプログラミングモードでは、モード固有の設定(「電気」設定など)を確認する必要がある場合を除く)。

Unix端末は通常、クリップボードの内容に改行(改行文字で表される)が含まれている場合に復帰文字を貼り付けます。Emacsでは、キャリッジリターンはRETキーのように見えますが(実際にRET キャリッジリターン文字です)、ラインフィードは(is)のように見えC-jます。

ただし、あなたの場合、改行を貼り付けると、が発生しますC-j。これは、Emacsではcommandにバインドされていnewline-and-indentます。名前が示すように、このコマンドはインデントします。PuTTYに変更可能な設定があるかどうかはわかりません。あなたがEmacsの端に問題を修正したい場合は、私はあなたが気にしないだろうと思います簡単な回避策があります:バインドC-jnewline(と同じRET)。

(global-set-key "\C-j" 'newline)

Emacs≥24.4

Emacs 24.4では、デフォルトでElectric Indentモードがオンになっています。これはグローバルマイナーモードなので、呼び出すことでどこでもオフにでき、(electric-indent-mode 0)でインタラクティブに切り替えることができますM-x electric-indent-mode RET

この情報は、マニュアルで見つけることができます。または、Return(プレスC-h k RET)を押して呼び出されるコマンドのドキュメントを参照してください。

を使用して、特定のバッファで有効にできますelectric-indent-local-mode。一部のプログラミングモード(特にサードパーティモード)には、エレクトリックインデントモードの設定に従わない独自の自動インデント機能がある場合があります。


electric-indent-modeはデフォルトで無効になっています(これは、私がEmacs 24.3.1を使用しているため、あなたが言ったことと一致しています)。オンとオフを切り替えても効果はありません。 electric-indent-local-modeはを介して利用できませんM-x。上のヘルプには、RET3つの設定を言及:use-hard-newlinesauto-fill-function、とfill-column。トグルまたは経由でそれらを修正するM-x use-hard-linesM-x auto-fill-modeM-x set-fill-column RET 0 RET助けをしません。
Mr Fooz

@MrFoozああ、ごめんなさい、私はあなたの質問でEmacsバージョンに注意を払っていませんでした。しかし、その後、なぜ自動インデントを取得しているのだろうか。うーん。で自動インデントを取得しemacs -qますか?改行を含む短いテキスト(たとえばfoonewline bar)をEmacsに貼り付けて、を押しC-h lてください。… f o o RET b a rまたは… f o o C-j b a rまたは… f o o RET C-j bar他の何か?どの端末でSSHクライアントを実行していますか?
ジル 'SO-悪であるのをやめる'

元の投稿にサンプルテキストブラーブを追加しました。追加-qしても役に立ちません(例:)emacs -q -nw --no-desktop。のC-j代わりに見えますRET。SSHクライアントとしてPuTTY 0.63を使用しています。私はと同じ動作を参照TERMするように設定をscreenしてxterm
氏Fooz

@MrFooz OK、PuTTYはCRではなくLFを送信しているため、LFでインデントしないようにEmacsに指示する必要があります。グローバルにオフにするのは簡単です。答えを編集しました。
ジル 'SO-悪であるのをやめる'

おかげで、global-set-keyハックは問題を修正しました。EDITORGitのコミットメッセージを編集するときに、起動時にエイリアスを自動的に呼び出すようにエイリアスを設定する方法を見つけます。Windowsの代わりにUNIXスタイルの行末を使用するようにお気に入りのWindowsテキストエディターを構成したため、改行の代わりに改行が貼り付けられています。
Mr Fooz

1

ブラケットペーストモードを試すこともできます。これは、ターミナルエミュレータ(この場合はPuTTY、バージョン0.63以降)の機能であり、エスケープシーケンスを使用して、ユーザーが何かを貼り付けていることを通知し、貼り付けが終了したときに再度通知します。bracketed-pasteインストールできるEmacsパッケージがあります。これを使用すると、Emacsがエスケープシーケンスを認識し、貼り付け中に安全なキーマップに移行できます。これにより、インデントが乱れるのを防ぐだけでなく、を使用して不正なペーストがemacsセッションでコマンドを実行するのを防ぎますM-x

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.