web-dev-qa-db-ja.com

IPythonノートブックで自動インデントを2スペースに変更するにはどうすればよいですか

IPython Notebookで関数を開発すると、すばやく作業できることがわかりました。結果に満足したら、ファイルにコピーして貼り付けます。自動インデントは4スペースですが、私の会社のインデントのコーディングスタイルは2スペースです。自動インデントを2つのスペースに変更するにはどうすればよいですか?

35
user2826610

this の質問と見つかったオプションに基づいて here
custom.jsファイル(場所はOSによって異なります)に

IPython.Cell.options_default.cm_config.indentUnit = 2;

私のマシンでは、ファイルは~/.ipython/profile_default/static/customにあります

更新:

IPython 3では、プレーンコールは機能しなくなったため、適切なイベントハンドラー内に設定を配置する必要があります。可能な解決策は次のようになります

define([
    'base/js/namespace',
    'base/js/events'
    ],
    function(IPython, events) {
        events.on("app_initialized.NotebookApp",
            function () {
                IPython.Cell.options_default.cm_config.indentUnit = 2;
            }
        );
    }
);
12
Jakob

公式ドキュメントには この特定の質問に答える例 があります。これはIPython 4で私のために働いた。

概要:以下をブラウザのJavaScriptコンソールに貼り付けます

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
      CodeCell:{
        cm_config:{indentUnit:2}
      }
    }
config.update(patch)

設定は保持されます。 ロールバック: 2 ために : null

32
AdamAL

CodeMirrorコードセルの公式ドキュメントから:

  1. Ipythonノートブックを開く
  2. コードセルを作成します。 bを押す
  3. ブラウザのJavaScriptコンソールを開き、次を実行します

スニペット:

var cell = Jupyter.notebook.get_selected_cell();
var config = cell.config;
var patch = {
      CodeCell:{
        cm_config:{indentUnit:2}
      }
    }
config.update(patch)
  1. ブラウザでノートブックページをリロードします。 F5

これで完全に修正されます。これは最近のバージョンでのみ機能すると思いますが、確かではありません!

25
Thoran

AdamALの答えは正しいです。それは私のために働いた。

ただし、Jupyter Notebookのインデントのみが変更され、Jupyter Editorのインデントは影響を受けません。

インデントを変更するより直接的な方法は、.jupyter/nbconfigディレクトリにあるJupyter構成ファイルを直接編集することです。このディレクトリには2つのファイルが含まれています。

edit.json
notebook.json

どちらかに設定する必要があるオプションはindentUnitです。私のJupyter設定ファイルの内容は次のとおりです。

edit.json:

{
  "Editor": {
    "codemirror_options": {
      "indentUnit": 2,
      "vimMode": false, 
      "keyMap": "default"
    }
  }
}

notebook.json:

{
  "CodeCell": {
    "cm_config": {
      "indentUnit": 2
    }
  }
}

このアプローチでは、Jupyter NotebookとJupyter Editorの両方でデフォルトのインデントを2に設定しました。

17
bpirvu

これは、ノートブックのロードごとに1回ロードするイベントハンドラーでラップするのが最適であると思います。

$([IPython.events]).on('app_initialized.NotebookApp', function(){
  IPython.CodeCell.options_default['cm_config']['indentUnit'] = 2;
});
10
Tim Dierks

jupyterlabを使用する場合、より簡単な方法があるようです:

1)jupyterlabメニュー[設定]> [詳細設定エディター]をクリックします

2)左側のペインで「ノートブック」をクリックし、「Raw View」にいることを確認します

3)右側のペインの[User Overrides]で、次のように入力します。

{
    "codeCellConfig": {
        "tabSize": 2
    }
}

システムデフォルトを見ると、何が上書き可能かについてのヒントが得られ、他の設定でもこれを繰り返すことができます。

Jupyterlabを使用するGoogle Platform AI Notebookでこれを試しました。

4
kawingkelvin

追加に加えて

_IPython.Cell.options_default.cm_config.indentUnit = 2;_

jakobによって提案された_custom.js_ファイルに、ipythonノートブックを再起動する前にブラウザーのキャッシュもクリアしてください!

また、_~/.config/ipython/profile_default/static/custom/_ファイルを追加する前に、まず_custom.js_ディレクトリを作成する必要があります(echo $(ipython locate default)を使用してデフォルトディレクトリを検索)。

2
Bobby