ShoWaka
@ShoWaka (わか)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

vscodeにおける入力補完直後の挙動について

###vscodeの入力補完直後の挙動について
入力補完直後の白網掛けを消したい。
→白網掛け内は入力補完が効かない。

発生している問題・エラー

スクリーンショット 2021-11-09 9.11.32.png
vscode上で'php'と入力するとサジェストが表示されます。

スクリーンショット 2021-11-09 9.13.13.png
展開しました。
問題はこのあとで、

スクリーンショット 2021-11-09 9.13.57.png
phpタグ内に'while'を書こうとしているところです。白網掛けになって入力補完が効きません。

スクリーンショット 2021-11-09 9.15.51.png
他のところをクリックしもう一度入力予定のところにカーソルを持ってくると入力補完が効くようになります。
白網掛けはありません。

自分で試したこと

スニペットの問題かと思いスクリーンショット 2021-11-09 9.22.54.png
"body":[""]とかに変更してみましたが挙動変わらず、、、

vscodeの設定や拡張機能の設定を調べてみたがよくわかりませんでした。
2年もvsode使ってるに未だ解決しないのでここに投稿させていただきました。
今回例に挙げたのはphpですがC、Javascriptなんかでも同様な挙動が見られます(言語によって設定されているスニペットが違うので多少違いますが)。
有識者の方ご教授お願いいたします。

追記
gifを追加しました。
画面収録-2021-11-11-9.08.14.gif

0

2Answer

Comments

  1. @ShoWaka

    Questioner

    ご回答ありがとうございますgifを追加しました。
  2. @ShoWaka

    Questioner

    無事解決いたしました!ありがとうございました!!

私も気になっていたので試してみましたが、スニペットの$1$0にすることで、カーソルは任意の位置かつ補完が効く状態で入力を開始することができました。

{
    // Place your snippets for php here. Each snippet is defined under a snippet name and has a prefix, body and
    // description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
    // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the
    // same ids are connected.
    "php": {
        "prefix": "php",
        "body": [
	    "<?php $0 ?>"
        ],
        "description": "php tag",
    }
}

$-1などは利用できない(文字列としてそのまま展開される)ので、$0を特殊として扱っているのではないかと思います。

ユーザースニペットのサンプルに書かれているコメントを見ると、$0は終了位置として扱われるようです。

0Like

Comments

  1. @ShoWaka

    Questioner

    ご回答ありがとうございます。返信が遅くなり申し訳ありません。スニペットファイルを編集してみましたが、挙動変わりませんでした。@hi97さんの環境でできているということは私のワークスペース側の設定の問題なのかなと思います。スニペットファイル上部を見るとたしかに$0で良さそうですよね。解決するきっかけになったかもしれません。ありがとうございました!
  2. @ShoWaka

    Questioner

    更に追記させていただきます。スニペットファイルをいじっていたところ、phpのスニペットファイルではなく、htmlのスニペットファイルにこちら$0の設定をしたところ、希望する挙動が得られました!調べてみたところ、phpのスニペットファイルは<?php ?>タグの中にあるものだけに適応されるようで、そもそものphpタグをスニペットとして表示するにはhtmlのスニペットに記述する必要があったようです(もしかしたら@hi97さんはご存知だったかもしれませんが、、、)。無事解決しましたのでご報告です。ありがとうございました!!
  3. 解決できたようで何よりです。

Your answer might help someone💌