VSCode で def や if 等のスニペットが出なくなったら (Python)

2021-01-24

#Python3 #VSCode VisualStudioCode

VSCode で Python 拡張機能 (Microsoft) を有効にしている場合、def や if, for, try などの文でスニペットによる入力補完(サジェスト)が効くのですが、この機能が 2021年1月21日のバージョンで削除されました。

公式ページ (github) のリリースノートには、「コードスニペットは削除したので、もし必要なら自分で追加してね」という旨の記述があります。

  1. Remove code snippets (you can copy the old snippets and use them as your own snippets).
    Releases · microsoft/vscode-python

スニペットの追加方法

Python 拡張で提供されていたスニペットをユーザースニペットとして追加すると、入力補完機能を復元できます。
手順は次の通りです。

  1. コマンドパレット (Ctrl+Shift+P) に snippet と入力し、「基本設定: ユーザースニペットの構成」を選択。
  2. python と入力し、“python.json” を選択。
  3. エディタで “python.json” が開かれるので、下記 URL のスニペットをコピペする等して追加する。
    vscode-python/python.json at 2020.12.424452561 · microsoft/vscode-python

スニペットを修正

お好みで、あまり使わないコードスニペットをコメントアウトすると、より快適になります。
また、一部のスニペットは Python 3 では若干使いにくいので、これらに少し手を加えます。

def の修正と追加

“def(class method)” という名前のスニペットは Python の @classmethod ではなく、Python 公式の表現に従えばインスタンスメソッドにあたります。
そこで、これらを解りやすいように名前変更し、@classmethod の def を追加します。

元の “def(class method)” と “def(static class method)” の部分を次のように書き換えます。

class の修正

class は object を明示的に継承しなくても定義できる為、object を消去します。
下記の例では継承も考慮して () は残してありますが、こちらも削除したほうが使いやすいかもしれません。

QooQ