Emacsおよび他の誰かのコードの操作:インデント

多くの企業が、インデントの方法を規制する独自の標準コード(スペースまたはタブ、およびそれらの幅)を持っていることがありました。 コードがすでに標準に従って設計されているプロジェクトで作業する場合、初心者が最初にすべきことは何ですか? そうです、彼は自分の労力の成果をコミットし、編集者がインデントでどのように機能するかを見ていないためにチームリーダーから受け取ります。 あなたがemacsの初心者(または適度に幸運な)ユーザーであり、この悲しい、しかし論理的な結果を避けたい場合は、この結果に遭遇していないなら、catへようこそ。







私たちは何を扱っていますか?


まず、どのような種類のコードを取得したかを知るのは良いことです。 好奇心、盛ですが、すでにこの段階では、前任者のエディターがファイル内にタブ/スペースを設定している場合、さまざまな幅のインデントの寄せ集めを見ることができます。 タブ表示の幅が先行エディターのタブ幅(スペース)と一致しない場合にのみ表示されるように予約します。

何も表示されない場合は、絶望しないでください。ファイルで実際に何が起こるかを確認するには、ホワイトスペースモードを使用できます。 バージョン23以降の標準emacsディストリビューションに追加されましたが、この場合は常にWhiteSpaceにあります。

これは、2つのファイルの外観です。一見同じように見えますが、異なる文字を使用して外部からインデントします。







そして、空白モードを使用して:







コードが正常で均質であり、インデントにタブまたはスペースが使用されている場合は、使用されているものと量を覚えておいてください-セットアップ時に便利になります。 そうでない場合は、タブ文字を選択する責任を負うことは意図的な間違いであるため、timlidにそのことを伝えてください。 どちらのオプションを選択しても、あなたの選択が間違っていたことを伝える誰かが常に存在します。





インデント設定


どの文字をインデントするかを選択するために、変数indent-tabs-mode変更の値をインデントします。

スペースをインデントするには、nilに設定する必要があります。

(setq indent-tabs-mode nil) ;   
      
      





したがって、タブの場合、値はtである必要があります。

  (setq indent-tabs-mode t) ;   
      
      







この場合、ファイル内の既存のインデントは変更されません。 新しいインデント設定が既存のファイルのインデントに対応していることを確認する必要があります。そうしないと、おridgeができます。





文字を整理したら、インデントの幅を設定する必要があります。 そして、いくつかのトリックがあります。 js、php、c ++、javaなどの最も一般的な言語のほとんどには、変数c-basic-offsetを持つc-modeからのバックライトモードがあります。 彼女は、これらのモードのすべてでインデックスを作成するときに、タブの幅をどうするかを担当しています。 可変タブ幅もあり、タブの幅に責任があります。 すべてが正しくフォーマットされるためには、これらの変数の値が等しくなければならないことが歴史的に起こりました。 それぞれに異なる値を入力すると、emacsがタブと混在したスペースを使用する程度まで、結果はほとんど予測できなくなります。

したがって、c-modeに基づくモードでは、次のスキームを使用する必要があります。

  ;     2  (setq tab-width 2) (setq c-basic-offset 2)
      
      







cperl-modeを使用する場合、インデントはcperl-indent-level変数を介して設定されます。 繰り返しますが、その値とタブ幅の値が一致することは非常に重要です。



  ;     4  (setq tab-width 4) (setq cperl-indent-level 4)
      
      





結論として、htmlのインデントを変更するには、sgml-basic-offset変数を設定する必要があります(タブ幅を忘れずに)。





各言語には独自のルールがあります。


言語が異なれば、PEP、perl-tidyの構成、さらには会社のコード標準で説明されている異なるルールが必要になります。 このエディターではすべてを使用します。 これを実装する最も簡単な方法は、フックを使用することです。 Pythonとperlの設定ファイルの例を次に示します。



 ;   4,   (add-hook 'cperl-mode-hook (lambda() (setq tab-width 4) (setq indent-tabs-mode nil) )) ;   4,   (add-hook 'python-mode-hook (lambda() (setq tab-width 4) (setq indent-tabs-mode t) ))
      
      







共通分母への還元


それでもタブとスペースの両方を同時に使用するコードの幸せな所有者になる場合は、untabifyコマンドとtabifyコマンドが役立ちます(リマインダーについてはユーザーfader44に感謝します)。 最初のコマンドはすべてのインデントをスペースに変換し、2番目のコマンドはそれぞれタブに変換します。 各行のフォーマットに関係なく、インデントは単一の形式に縮小されます。



All Articles