Dans Sublime Text 2, comment puis-je mettre en retrait vers une colonne droite avec plusieurs curseurs sur un bord irrégulier?

33

Supposons que j'ai plusieurs curseurs sur plusieurs lignes, comme ceci:

foo|
barr|
foobar|
baz|

Comment puis-je pousser automatiquement l'espace blanc à la fin de chaque ligne vers un bord plat, comme ceci?:

foo    |
barr   |
foobar |
baz    |

(Dans ces exemples, |est censé être mon curseur.)

Lorsque vous venez Tabou Spacede l'arrangement initial, vous obtenez ceci:

foo    |
barr    |
foobar    |
baz    |

C'est utile, mais pas ce que je recherche. Je suis à la recherche d'une sorte de raccourci clavier qui me permettra de mettre en retrait un insert multi-curseur irrégulier vers une colonne droite.

GladstoneKeep
la source
Est-ce que l'insertion d'un ou deux onglets fonctionne?
Dark Android
Non, mais je ne comprends peut-être pas. J'ai édité pour clarifier ma question.
GladstoneKeep
Votre modification décrit ce que fait Space et, dans une certaine mesure, Tab le fera si vos lignes varient considérablement, mais si elles sont toutes assez proches, après deux onglets, vos curseurs devraient tous être sur un tabstop. Vous devrez peut-être faire un peu d'ajustement pour les mettre tous sur le même onglet, mais ce sera moins que d'essayer de les ajuster avec des espaces.
Dark Android
C'est étrange. Une pression Tabà la fin de chaque ligne met en retrait l'insertion de plusieurs curseurs irréguliers dans une colonne droite, mais il n'est pas possible d'obtenir le même effet en utilisant l'expression régulière. J'ai recherché les espaces de fin: \s*$et les ai remplacés par le caractère de tabulation: \t- mais \tn'obtient pas le même effet que d'appuyer Tabmanuellement.
amiregelz
1
Pour info, j'ai posté cela comme une demande de fonctionnalité sur le tableau de requête Sublime Text 2.
GladstoneKeep

Réponses:

10

Vous pouvez utiliser l' alignement sublime de wbond

Vous devrez peut-être l'ajouter à votre fichier de paramètres (Préférences> Paramètres du package> Alignement> Paramètres-Utilisateur:

// The mid-line characters to align in a multi-line selection, changing
// this to an empty array will disable mid-line alignment
"alignment_chars": ["=", "|"],
// If the following character is matched for alignment, insert a space
// before it in the final alignment
"alignment_space_chars": ["=", "|"]

Remplacer "|" avec le caractère que vous souhaitez aligner.

Edit: Comme mtoast l'a découvert, l'ajout "\n"à "alignement_chars" donne l'effet souhaité. L'ajout du nouveau caractère de ligne à "alignement_espace_chars" n'est probablement pas nécessaire et peut supprimer le texte. Cependant, avec mes tests limités, je n'ai pas vu de différence.

Maintenez controlet cliquez à la fin de chaque ligne. Appuyez ensuite sur les touches de raccourci d'alignement (pour linux, la valeur par défaut est ctrl+ alt+ a). Vous constaterez que les curseurs sont alignés avec la position de curseur la plus éloignée.

Edit2: L'ajout de nouvelle ligne à "alignment_space_chars"supprimera le texte si vous mettez en surbrillance un bloc de texte et que Sublime Alignment ne trouve pas autre chose à aligner sur la ligne (comme un signe égal).

De plus, si Sublime Alignment ne trouve pas autre chose à aligner, l'ajout de nouvelle ligne à "alignment_chars"remplira la fin des lignes avec des espaces (ou des tabulations selon vos paramètres) pour correspondre à la plus longue ligne mise en évidence.

d_rail
la source
1
Wow, super! J'ai installé le package Sublime Alignment, ajouté "\n"(nouvelle ligne) à mon "alignment_chars", et obtenu le résultat souhaité. (Remarque: je ne l'ai pas ajouté à "alignment_space_chars", ce qui a entraîné la suppression des lignes.) Si vous ajoutez cette suggestion spécifique ( "n") à votre réponse, je l'accepterai.
GladstoneKeep
Agréable! Paquet très utile pour les perfectionnistes comme moi :)
amiregelz
3
Il existe également un package similaire: Align Tabular , qui est un peu plus flexible (vous pouvez vous aligner sur plusieurs caractères).
d_rail
Avec AlignTab mentionné ci - dessus par d_rail, souvenez - vous d'échapper |par un seul `\`
utilisateur
Je ne peux pas croire que cela n'ait pas un million de votes positifs.
Charles
44

Vous pouvez également le faire sans package externe en utilisant un hack mineur, avec seulement un peu plus d'effort. Voici comment:

| représente un curseur dans ces instructions.

  1. Créez des curseurs sur toutes les lignes souhaitées en utilisant Ctrl+ Cliquez ou en sélectionnant un bloc de texte et en appuyant sur Ctrl+ Shift+ L. ( documents de sélection )

  2. Ajoutez des espaces supplémentaires à la fin de chaque mot, jusqu'à ce que chaque curseur atteigne ou dépasse le point où vous voulez que votre colonne (quelle que soit la distance):

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. ( facultatif 1 ) Tapez n'importe quel caractère suivi d'un espace; utilisons c:

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. Appuyez Homepour faire passer les curseurs au début des lignes:

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. Appuyez sur → (right arrow) jusqu'à ce que les curseurs soient là où vous voulez que votre colonne:

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. Appuyez sur Ctrl+ Shift+ pour sélectionner tous les espaces blancs suivants c, puis appuyez sur Delete:

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. ( facultatif 1 ) Appuyez à Deletenouveau pour nettoyer le caractère d'espace supplémentaire que nous avons ajouté à l'étape facultative.


1 Nous utilisons le ccaractère suivi d'un espace uniquement s'il y a du contenu supplémentaire sur les lignes que nous voulons conserver. Sans cela, Ctrl+ Shift+ sélectionnerait le premier mot de tout contenu supplémentaire sur les lignes, ce qui rendrait la suppression délicate.

kogre
la source
2
Cela semble tordu au début, mais c'est un hack soigné. Bon pour coller des colonnes avec un alignement correct. La colonne suivante peut être collée à l'aide du plug-in de pâtisserie de texte.
utilisateur
1
J'utilise cette technique depuis un certain temps, mais attention , ctrl+shift+rightne traite pas tous les personnages de manière cohérente, il peut donc finir par sélectionner plus qu'un simple espace blanc.
SpareBytes
1
Un truc vraiment sympa, je suis d'accord. Mais je l'ai juste essayé sans personnage à la fin, et utilisé Shift-End Deleteet cela a juste fonctionné. Cela fonctionne-t-il dans certains cas mais pas dans d'autres?
12h54
C'est ce que je fais toujours :)
Domino
Cela ne fonctionne pas si la cligne est avant la fin du mot sur une autre. Quel est le problème que j'ai actuellement. Certaines lignes ne contiennent pas suffisamment de caractères pour défiler vers la droite, donc lorsque vous le faites, vous passez à la ligne suivante, en laissant ce hack comme ça. Il s'agit d'un hack, pas d'un remplacement fourre-tout utile.
leetNightshade
0

Pour ceux qui souhaitent mettre en retrait des caractères autres que =et |, j'ai pu installer le package d' alignement et modifier le fichier Sublime Text > Preferences > Package Settings > Alignment > Settings - Userpour qu'il ressemble à ce qui suit:

{
  "alignment_chars": [
    "{create",
   ]
}

J'ai ensuite sélectionné le code suivant:

  let!(:admin_user) {create(:admin_user, :admin)}
  let!(:another_admin_user) {create(:admin_user, :admin)}
  let!(:superadmin_user1) {create(:admin_user, :superadmin)}
  let!(:superadmin_user2) {create(:admin_user, :superadmin)}
  let!(:nonadmin_user) {create(:admin_user)}

et pressé Command + Ctrl + Apour l'aligner.

  let!(:admin_user)        {create(:admin_user, :admin)}
  let!(:another_admin_user){create(:admin_user, :admin)}
  let!(:superadmin_user1)  {create(:admin_user, :superadmin)}
  let!(:superadmin_user2)  {create(:admin_user, :superadmin)}
  let!(:nonadmin_user)     {create(:admin_user)}

Tout a été déplacé vers la colonne la plus à gauche que le {createtexte pouvait occuper tout en étant aligné.

Matthew Hinea
la source