Skip to content

toona note

Vscode の setting.json

はじめに

VSCode の setting.json をさらしてみる という記事を読みました。
知らない設定もあり、非常にありがたいことだと思いました。
小さな不便は、意識に上ってこないで、言われてみて確かに不便だし非効率だと気が付くことがあります。
先の記事は私に気づかせてくれることが多かったので、私も誰かの役に立てたらいいな、と思い 私の setting.json の一部を記します。

setting.json の中身

{
  "C_Cpp.updateChannel": "Insiders",
  "python.pythonPath": "python のパス",
  "diffEditor.ignoreTrimWhitespace": true,
  "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
  "explorer.confirmDelete": false,
  "workbench.editorAssociations": {
    "*.ipynb": "jupyter.notebook.ipynb"
  },
  "terminal.integrated.defaultProfile.windows": "Command Prompt",
  "workbench.editor.untitled.hint": "text",
  "workbench.iconTheme": "material-icon-theme",
  "workbench.colorTheme": "GitHub Dark Dimmed",
  "workbench.colorCustomizations": {
    "scrollbarSlider.background": "#ffffff27",
    "scrollbarSlider.hoverBackground": "#ffffff30",
    "scrollbarSlider.activeBackground": "#ffffff30",
    "editorBracketMatch.border": "#ffffff00"
  },
  "files.trimTrailingWhitespace": true,

  "files.autoSave": "onFocusChange",
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "editor.acceptSuggestionOnEnter": "off",
  "editor.parameterHints.enabled": false,
  "editor.minimap.enabled": false,
  "editor.unicodeHighlight.invisibleCharacters": false,
  "editor.unicodeHighlight.ambiguousCharacters": false,
  "editor.smoothScrolling": true,
  "editor.dragAndDrop": false,
  "explorer.confirmDragAndDrop": false,
  "window.zoomLevel": -1,

  "files.exclude": {
    "**/.git": true,
    "**/.svn": true,
    "**/.hg": true,
    "**/CVS": true,
    "**/.DS_Store": true,
    "**/Thumbs.db": true,
    "**/__pycache__": true,
    "**/*.exe": true
  },

  // c++
  "C_Cpp.clang_format_style": "{BasedOnStyle: Google, IndentWidth: 4}",
  "[cpp]": {
    "editor.defaultFormatter": null
  },

  // python
  "jupyter.askForKernelRestart": false,
  "python.terminal.activateEnvInCurrentTerminal": true,
  "python.linting.enabled": true,
  "python.linting.pylintEnabled": false,
  "python.linting.flake8Enabled": true,
  "python.linting.lintOnSave": true,
  "python.formatting.provider": "black",
  "python.linting.flake8Args": ["--max-line-length=119", "--ignore=E203, W503"],
  "python.linting.mypyEnabled": true,
  "[python]": {
    "editor.defaultFormatter": null
  },

  // yaml
  "[yaml]": {
    "editor.tabSize": 2
  },

  // markdown
  "[markdown]": {
    "editor.unicodeHighlight.ambiguousCharacters": false,
    "editor.unicodeHighlight.invisibleCharacters": false,
    "editor.wordWrap": "on",
    "editor.quickSuggestions": false,
    "files.trimTrailingWhitespace": false
  }
}

デフォルトフォーマッタ

フォーマッタに強いこだわりはありません。
prettier をデフォルトのフォーマッタに設定しています。
フォーマットは保存時に自動で実行されるようにします。
貧弱なノート PC を使用すると、遅く感じることもありますが、それよりもプログラムが汚い方が許せません。
ただ、勝手にフォーマットがかかると困るさいは、この設定は外すこともあります。 また、行末のスペースは基本的に要らないので自動削除をかけます。

  "files.trimTrailingWhitespace": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,

python

python を使うことが多いので、python の設定は少し多いです。

  "jupyter.askForKernelRestart": false,
  "python.terminal.activateEnvInCurrentTerminal": true,
  "python.linting.enabled": true,
  "python.linting.pylintEnabled": false,
  "python.linting.flake8Enabled": true,
  "python.linting.lintOnSave": true,
  "python.formatting.provider": "black",
  "python.linting.flake8Args": ["--max-line-length=119", "--ignore=E203, W503"],
  "python.linting.mypyEnabled": true,
  "[python]": {
    "editor.defaultFormatter": null
  }

python フォーマッタは Black を使っています。
設定の余地がほぼない潔さが実に python らしく気に入っています。
フォーマットの宗教戦争は不要で不毛なのです。

python のリンターも保存時に実行されるようにします。
リンターに救われることがあるのでこれは外せません。 その他、避けようのないリンターの警告を切るオプションを設定しています。

yaml

yaml の追加設定はタブサイズだけです。

  "[yaml]": {
    "editor.tabSize": 2
  },

markdown

markdown では、行末の空白が改行の意味を持つので、空白を削除しない設定にします。

  "[markdown]": {
    "editor.unicodeHighlight.ambiguousCharacters": false,
    "editor.unicodeHighlight.invisibleCharacters": false,
    "editor.wordWrap": "on",
    "editor.quickSuggestions": false,
    "files.trimTrailingWhitespace": false
  },

機能関連の設定

  "files.autoSave": "onFocusChange",
  "explorer.confirmDragAndDrop": false,

  "editor.acceptSuggestionOnEnter": "off",
  "editor.parameterHints.enabled": false,
  "editor.minimap.enabled": false,
  "editor.unicodeHighlight.invisibleCharacters": false,
  "editor.unicodeHighlight.ambiguousCharacters": false,
  "editor.smoothScrolling": true,
  "editor.dragAndDrop": false,
  "window.zoomLevel": -1,

  "files.exclude": {
    "**/.git": true,
    "**/.svn": true,
    "**/.hg": true,
    "**/CVS": true,
    "**/.DS_Store": true,
    "**/Thumbs.db": true,
    "**/__pycache__": true,
    "**/*.exe": true
  }

保存はフォーカスが外れたタイミングで自動で行います。
これは、好き嫌いがありそうですが、pycharm を使っていた影響か、自動保存が欲しいです。

acceptSuggestionOnEnter は切っています。
入力完了後の改行のつもりの enter で入力補完されることが多く、邪魔に感じたからです。

同じように邪魔に感じる、drag & drop によるコードの移動と、ファイル移動時の確認も切っています。
特に、drag & drop によるコードの移動は事故が多いので、私には不要です。

また、無駄な情報はなるべく視界に入らない方がよいと考えているので、自分が開かないファイルは files.exclude に積極的に入れています。

見た目関連の設定

  "workbench.iconTheme": "material-icon-theme",
  "workbench.colorTheme": "GitHub Dark Dimmed",
  "workbench.colorCustomizations": {
    "scrollbarSlider.background": "#ffffff27",
    "scrollbarSlider.hoverBackground": "#ffffff30",
    "scrollbarSlider.activeBackground": "#ffffff30",
    "editorBracketMatch.border": "#ffffff00"
  }

material icon はファイルを識別しやすくなるので機能の面も考えて入れています。 editor の見た目は基本的に GitHub Dark Dimmend だけです。ですが、2 つだけ調整しています。

  • スクロールバーの色の変更: 色が薄く、見づらいので濃くしました。
  • ハイライト枠線の透明化: 括弧のハイライトが、カーソルと重なり、|( と (| が識別しにくいので、ハイライトの枠線を消しています。