Comment basculer les commentaires dans la colonne 1 de Sublime Text 3

0

Dans Sublime Text 3, Edit->Comment->Toggle Comment( command- /sur un Mac) commentera la sélection actuelle (ou la ligne actuelle) ou la décommentera, en fonction de son état actuel. Pour ce faire, il insère un espace et le ou les caractères de début du commentaire au début de la ligne en cours, dans la colonne dans laquelle la ligne en cours commence, tout en préservant les espaces. Par exemple, en commentant la quatrième ligne de ceci:

#***************************************************************************
sub invoke
{
    my($self) = @_;

entraînerait ceci:

#***************************************************************************
sub invoke
{
    # my($self) = @_;

J'adorerais vraiment si cela laissait à gauche le motif de commentaire, comme ceci:

#***************************************************************************
sub invoke
{
#   my($self) = @_;

Y a-t-il un moyen de faire cela? Merci!

Joe Casadonte
la source

Réponses:

2

Attention:

Pour ce faire, vous devez vous occuper de l'un des fichiers de base de Sublime. Ne continuez pas si cela vous met mal à l'aise.


Cela étant dit, les changements que vous allez effectuer ne sont pas si radicaux et sont facilement réversibles. Ne t'inquiète pas, je vais rendre les choses faciles.

La première chose à faire est d'installer Package Control si ce n'est déjà fait. Ensuite, installez PackageResourceViewer. Ouvrez la palette de commandes, tapez prvpour faire apparaître les PackageResourceViewer:options, puis choisissez PackageResourceViewer: Open Resource. Faites défiler un peu, sélectionnez Default, puis faites un peu plus défiler et sélectionnez comment.pypour ouvrir le fichier dans Sublime. Vous pouvez maintenant appuyer Escpour fermer la palette de commandes. Les deux premières définitions de fonctions ressemblent à ceci:

import sublime, sublime_plugin

def advance_to_first_non_white_space_on_line(view, pt):
    while True:
        c = view.substr(pt)
        if c == " " or c == "\t":
            pt += 1
        else:
            break

    return pt

def has_non_white_space_on_line(view, pt):
    while True:
        c = view.substr(pt)
        if c == " " or c == "\t":
            pt += 1
        else:
            return c != "\n"

Tout d’abord, commentez toutes les lignes advance_to_first_non_white_space_on_line()sauf la returndéclaration finale :

def advance_to_first_non_white_space_on_line(view, pt):
    # while True:
    #     c = view.substr(pt)
    #     if c == " " or c == "\t":
    #         pt += 1
    #     else:
    #         break

    return pt

Continuez à has_non_white_space_on_line()commenter toutes les lignes:

def has_non_white_space_on_line(view, pt):
    # while True:
    #     c = view.substr(pt)
    #     if c == " " or c == "\t":
    #         pt += 1
    #     else:
    #         return c != "\n"

Ensuite, créez une nouvelle ligne après l' returninstruction, indentez 4 espaces et collez-y:

return view.substr(pt) != "\n"

faire tout ce qui se passe ainsi:

def has_non_white_space_on_line(view, pt):
    # while True:
    #     c = view.substr(pt)
    #     if c == " " or c == "\t":
    #         pt += 1
    #     else:
    #         return c != "\n"
    return view.substr(pt) != "\n"

Et c'est tout! Enregistrez le fichier et essayez juste de vous amuser en commentant quelques lignes - vous verrez que tous les #caractères de commentaire sont dans la colonne 1.

Maintenant, cela va évidemment changer le comportement de toutes les langues, pas seulement de Python, alors soyez prêt pour cela. Pour annuler les modifications, il suffit de remplacer les deux définitions de fonctions par celles du premier bloc de code ci-dessus. Oh, pour revenir au fichier, vous n'avez pas besoin de passer par PackageResourceViewer. A la place, sélectionnez Preferences -> Browse Packages...(ou Sublime Text -> Preferences -> Browse Packages...si vous êtes sous OS X) le Packagesdossier dans le gestionnaire de fichiers de votre système d'exploitation (Explorateur Windows, Finder, Nautilus, etc.). Dans Packages/Defaultvous trouverez comment.py, comme vous l'avez changé. Si vous souhaitez revenir à la situation antérieure, supprimez simplement ce fichier et vous serez prêt (l'original est stocké ailleurs, mais il est remplacé lorsqu'un fichier portant le même nom existe Packages).

Si vous êtes vraiment aventureux, vous pouvez cloner le fichier, le renommer et le modifier afin d'inclure la logique pour indenter uniquement de la sorte avec certains langages, mais cela dépasse le cadre de cette réponse. Demandez à Stack Overflow si vous voulez savoir comment faire cela.

MattDMo
la source
Merci! Je suis nouveau dans Sublime. Existe-t-il un moyen de surcharger les fonctions de base de ce type?
Joe Casadonte
@ JoeCasadonte non, c'est vraiment le moyen le plus simple de le faire. Je suppose que je pourrais écrire un plugin configurable pour le faire, mais ce serait une somme de travail non négligeable. Si vous ne voulez vraiment pas faire cela, faites le moi savoir et je verrai ce que je peux faire, mais les étapes décrites ici représentent vraiment le meilleur moyen de remplacer le comportement actuel sans rien endommager - rappelez-vous, le fichier d'origine est toujours Sain et sauf (contrairement à ce que vous feriez dans ST2), vous pouvez donc supprimer votre nouveau Packages/Default/comment.pyquand vous le souhaitez. Si les instructions ne sont pas claires, merci de me le faire savoir.
MattDMo