38 votes

Comment faire pour que le vscode cesse de remplacer les parenthèses fermées lors de l'insertion ?

Lorsque j'essaie d'ajouter des parenthèses fermantes, elles remplacent toujours les parenthèses suivantes à droite.

Voici une capture d'écran (on dirait que j'ai appuyé sur la touche droite du clavier, mais en fait j'insère une nouvelle parenthèse fermante) :

enter image description here

Est-il possible de modifier ce comportement ?

18voto

John Y Points 5475

À partir de la version 1.38, la réponse est la suivante oui vous pouvez le désactiver complètement, tout en conservant les supports d'autoclavage .

Cette version introduisait un nouveau paramètre, editor.autoClosingOvertype qui peut prendre trois valeurs possibles :

  • always - toujours surtyper les parenthèses fermantes (le comportement ancien, classique, inspiré de Sublime-Text)
  • auto - surtype "intelligent" qui essaie de détecter si une parenthèse de fermeture a été automatiquement insérée par l'éditeur, et ne surtype que ces parenthèses (c'est la valeur par défaut).
  • never - ne jamais surtyper les parenthèses de fermeture

Le comportement actuel par défaut a été introduit dans la version 1.37. À cette époque, il n'y avait pas de paramètre disponible, vous obteniez le comportement du surtype "intelligent" quoi qu'il arrive.

Je laisse les éléments ci-dessous à des fins historiques.


Non, ce n'est pas possible (encore), et c'est à dessein. Lorsque vous tapez du code tout neuf, et que vous tapez une parenthèse ouvrante, vous obtenez automatiquement la parenthèse fermante (lorsque vous avez editor.autoClosingBrackets sur, bien sûr). Ensuite, lorsque vous avez fini de taper ce que vous voulez à l'intérieur de ces crochets, comment allez-vous " sortir " et laisser le crochet de fermeture où il est ? Le moyen le plus naturel est de taper une parenthèse fermante ! Certains ne sont pas d'accord, mais de nombreux dactylographes trouvent cela beaucoup plus facile que de déplacer leur main jusqu'aux touches fléchées ou à la souris pour les dépasser.

Notez que ce comportement est largement inspiré et modelé sur ce que fait Sublime Text.

Il peut être utile de comprendre que la fonction de fermeture automatique des parenthèses n'a pas pour but premier d'économiser les frappes de clavier. Son objectif principal est plutôt d'améliorer la stabilité de la coloration syntaxique (qui peut se dérégler lorsqu'il y a une parenthèse non fermée), et accessoirement de vous empêcher de oubliant pour saisir la parenthèse fermante. Si, pour une raison ou une autre, vous vous éloignez de la page sans l'avoir tapée, félicitations. faire obtenez ce support gratuitement !

Les deux options les plus simples dont vous disposez si vous souhaitez ajouter une parenthèse (et permettez-moi de noter que dans votre exemple, vous ajouteriez une mal assortis ) sont soit (1) de mettre le curseur après le groupe de parenthèses fermantes avant de taper une nouvelle parenthèse, ou (2) mettre le curseur là où vous l'avez fait, mais continuer à taper des parenthèses fermantes jusqu'à ce qu'une nouvelle parenthèse soit ajoutée. Dans les deux cas, toute nouveau Les parenthèses ne seront ajoutées qu'à la fin de la grappe.

Mise à jour (maintenant obsolète) :

Pour ce que ça vaut, il y a maintenant un numéro pour cela sur le tracker, ainsi qu'une demande de retrait pour créer un paramètre qui vous permette de désactiver le "bracket-swallowing". Pour tous ceux qui lisent ceci, si c'est quelque chose qui vous intéresse, vous devriez donner votre avis sur la demande de retrait.

Nouvelle mise à jour (désormais obsolète) :

Il y a actuellement nouveau code en cours de test qui rendre le surtypage des parenthèses plus sophistiqué . Il est prévu que l'éditeur garde la trace des parenthèses qui ont été générées automatiquement et qu'il ne tape que sur ces parenthèses. Une fois que le curseur quitte la zone des parenthèses, l'éditeur cesse de garder la trace de ces parenthèses et elles deviennent des caractères "à part entière" qui ne peuvent plus être tapés. Nous espérons que cela permettra de conserver le surtypage là où il est utile et de l'éliminer là où il ne l'est pas. Notez que le plan actuel est de faire en sorte que ce nouveau comportement devienne standard, et de pas ont un paramètre pour contrôler s'ils sont en vigueur.

12 votes

La fonctionnalité est tout à fait logique, c'est juste que l'implémentation est trop naïve pour être utile. Elle ne vérifie pas si les parenthèses correspondent, ce qui rend plus difficile l'ajout de la fonction manquant entre parenthèses.

0 votes

@ÁlvaroGonzález - J'entends ce que vous dites, mais je ne suis pas sûr qu'il y ait es Il n'existe pas de méthode "intelligente" pour gérer ce problème. Vérifier simplement si les parenthèses correspondent ne serait pas suffisant pour gérer tous les cas raisonnables. Et si votre logiciel ne peut pas lire dans votre esprit, la meilleure chose à faire est que votre logiciel ait un comportement facilement définissable et prévisible (même s'il est naïf), de sorte que vous peuvent s'y adapter. Si vous ne parvenez pas à vous habituer à cette fonction, vous pouvez heureusement la désactiver complètement. (Personnellement, je l'ai désactivée, mais pour d'autres raisons).

7 votes

Je trouve ces aides à la fermeture automatique plus gênantes qu'utiles. En particulier lorsque vous devez revenir en arrière et diviser un fichier if en une structure imbriquée if ou dans d'autres cas où vous souhaitez modifier un code existant. Ce n'est généralement pas un problème lorsque l'on tape du code pour la première fois. Je désactive ces trois fonctions : "editor.autoClosingQuotes": "never" , "editor.autoClosingBrackets": "never" y "editor.autoSurround": "never" .

15voto

Matt Bierner Points 1076

Essayez paramètre :

"editor.autoClosingBrackets": "never"

pour désactiver complètement la fonction d'autoclavage des parenthèses.

20 votes

Techniquement parlant, cela a résolu mon problème... mais j'aime bien la fonction de fermeture automatique. Je n'aime juste pas le truc d'annulation automatique.

11 votes

Je suis d'accord avec l'OP (kundasaba) ; c'est-à-dire que j'aime la fermeture automatique lorsque j'ajoute '(', mais je n'aime pas l'omission de ')' lorsque je tape un ')'. C'est vraiment problématique quand on édite du code existant avec beaucoup d'imbrications. De plus, la fermeture automatique ne semble pas fonctionner lors de l'ajout de "(" lorsqu'il n'est pas dans la paire "(" / ")" la plus à l'intérieur.

2 votes

J'ai changé cela, mais cela n'a aucun effet. Même après un redémarrage. Cela me rend fou :(

2voto

kundasaba Points 249

Vscode a finalement corrigé ce problème, et vous n'avez rien à faire pour obtenir le nouveau comportement. Maintenant, il n'avale que les parenthèses qui ont été automatiquement ajoutées, donc tout fonctionne comme prévu. Si vous avez déjà désactivé l'option autoClosingBrackets dans les paramètres, il est recommandé de la réactiver maintenant.

1 votes

Avez-vous un bug avec les appels de fonction ou ont-ils introduit un paramètre pour le corriger à cet endroit ? Cela fonctionne comme prévu pour moi, sauf quand j'intellisense une fonction et qu'il insère la parène d'ouverture, mais à la fermeture, il en insère une autre au lieu de la sauter.

0 votes

Je ne suis pas sûr d'avoir compris votre question. Quoi qu'il en soit, jusqu'à il y a quelques semaines, si vous essayiez d'insérer un crochet fermant, le crochet était avalé (regardez le gif dans la question originale). Maintenant, ils ont corrigé ce comportement et vous n'avez pas besoin de changer quoi que ce soit dans les paramètres.

0 votes

Certaines personnes peuvent trouver qu'elles ont toujours jamais veulent cualquier des crochets à avaler. La dernière version vous permet de choisir ce comportement si vous le souhaitez (voir ma réponse mise à jour).

0voto

Matt Wyndham Points 1

La façon de travailler avec le paramètre original du VSCode est d'ajouter de nouvelles parenthèses à la fin d'une liste de parenthèses.

...if (test === funFunction(data))| /* <- here */ {...

Vous devriez pouvoir taper une nouvelle parenthèse et elle ne remplacera pas l'ancienne. Cela ne résout pas votre problème, mais si vous vouliez suivre le paradigme utilisé par VSCode, vous y êtes.

(personnellement je le désactive comme le disent les autres commentaires)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X