5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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)" の部分を次のように書き換えます。

    "def(instance method)": {
        "prefix": "def(instance method)",
        "body": ["def ${1:funcname}(self, ${2:parameter_list}):", "\t\"\"\"", "\t${3:docstring}", "\t\"\"\"", "\t${4:pass}"],
        "description": "a instance method"
    },
    "def(class method)": {
        "prefix": "def(class method)",
        "body": ["@classmethod", "def ${1:funcname}(cls, ${2:parameter_list}):", "\t\"\"\"", "\t${3:docstring}", "\t\"\"\"", "\t${4:pass}"],
        "description": "a class method"
    },
    "def(static method)": {
        "prefix": "def(static method)",
        "body": ["@staticmethod", "def ${1:funcname}(${2:parameter_list}):", "\t\"\"\"", "\t${3:docstring}", "\t\"\"\"", "\t${4:pass}"],
        "description": "a static method"
    },

class の修正

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

    "class": {
        "prefix": "class",
        "body": ["class ${1:classname}(${2:}):", "\t\"\"\"", "\t${3:docstring}", "\t\"\"\"", "\t${4:pass}"],
        "description": "a class definition"
    },

※ この記事は自身のブログに掲載したものと同じ内容です。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?