VSCode で Python 拡張機能 (Microsoft) を有効にしている場合、def や if, for, try などの文でスニペットによる入力補完(サジェスト)が効くのですが、この機能が 2021年1月21日のバージョンで削除されました。
公式ページ (github) のリリースノートには、「コードスニペットは削除したので、もし必要なら自分で追加してね」という旨の記述があります。
- Remove code snippets (you can copy the old snippets and use them as your own snippets).
― Releases · microsoft/vscode-python
スニペットの追加方法
Python 拡張で提供されていたスニペットをユーザースニペットとして追加すると、入力補完機能を復元できます。
手順は次の通りです。
- コマンドパレット (
Ctrl+Shift+P
) にsnippet
と入力し、「基本設定: ユーザースニペットの構成」を選択。 -
python
と入力し、"python.json" を選択。 - エディタで "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"
},
※ この記事は自身のブログに掲載したものと同じ内容です。