In Sublime Text 2, come posso rientrare in una colonna diritta con più cursori su un bordo irregolare?


33

Supponiamo di avere più cursori lungo diverse linee, in questo modo:

foo|
barr|
foobar|
baz|

Come posso spingere automaticamente lo spazio bianco alla fine di ogni linea su un bordo piatto, come questo ?:

foo    |
barr   |
foobar |
baz    |

(In questi esempi, |dovrebbe essere il mio cursore.)

Quando appena Tabo Spacedalla disposizione iniziale, ottieni questo:

foo    |
barr    |
foobar    |
baz    |

È utile, ma non quello che sto cercando. Sto cercando una sorta di scorciatoia da tastiera che mi permetta di rientrare da un multi-cursore sfilacciato inserito in una colonna diritta.


Inserire semplicemente una scheda o due funziona?
Darth Android

No, ma potrei non riuscire a capire. Ho modificato per chiarire la mia domanda.
Gladstone:

La tua modifica descrive cosa fa Space, e in una certa misura Tab lo farà se le tue linee variano in larga misura, ma se sono tutte abbastanza vicine, dopo due schede i tuoi cursori dovrebbero essere tutti su una tabstop. Potresti dover fare un po 'di regolazione per metterli tutti sullo stesso tabstop, ma sarà meno che cercare di adattarti con gli spazi.
Darth Android

È strano. Premendo Taballa fine di ogni riga si fa rientrare l'inserto multi-cursore sfilacciato su una colonna diritta, ma non è possibile ottenere lo stesso effetto usando regex. Ho cercato spazi finali: \s*$e li ho sostituiti con il carattere di tabulazione: \t- ma \tnon ottiene lo stesso effetto della pressione Tabmanuale.
amiregelz,

1
Cordiali saluti, ho pubblicato questo come una richiesta di funzionalità sulla scheda di richiesta Sublime Text 2.
Gladstone:

Risposte:


10

Puoi usare wbond's allineamento sublime

Potrebbe essere necessario aggiungere questo al file delle impostazioni (Preferenze> Impostazioni pacchetto> Allineamento> Impostazioni-Utente:

// 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": ["=", "|"]

Sostituisci "|" con qualunque personaggio tu voglia allineare.

Modifica: come ha scoperto mtoast, l'aggiunta "\n"a "alignment_chars" dà l'effetto desiderato. L'aggiunta del nuovo carattere di riga a "alignment_space_chars" probabilmente non è necessaria e potrebbe eliminare il testo. Tuttavia, con i miei test limitati non ho visto differenze.

Tieni premuto controle fai clic alla fine di ogni riga. Quindi premere i tasti di scelta rapida per l'allineamento (per Linux il valore predefinito è ctrl+ alt+a ). Scoprirai che i cursori sono allineati con la posizione del cursore più lontana.

Modifica2: L'aggiunta di una nuova riga per "alignment_space_chars"eliminare il testo se si evidenzia un blocco di testo e Sublime Alignment non riesce a trovare qualcos'altro da allineare sulla linea (come un segno di uguale).

Inoltre, se Sublime Alignment non riesce a trovare qualcos'altro da allineare, l'aggiunta di newline "alignment_chars"riempirà la fine delle linee con spazi (o schede a seconda delle impostazioni) per abbinare la linea più lunga evidenziata.


1
Wow grande! Ho installato il pacchetto Sublime Alignment, ho aggiunto "\n"(newline) al mio "alignment_chars"e ho ottenuto il risultato desiderato. (Nota: non l'ho aggiunto a "alignment_space_chars", il che ha causato l'eliminazione delle righe.) Se aggiungerai quel suggerimento specifico ( "n") alla tua risposta, accetterò.
Gladstone:

Bello! Pacchetto molto utile per i perfezionisti come me :)
amiregelz,

3
C'è anche un pacchetto simile: Allinea tabulare , che è un po 'più flessibile (sei in grado di allineare su più caratteri).
d_rail,

Con AlignTab menzionato sopra da d_rail, ricorda di scappare |da un singolo `\`
utente

Non posso credere che questo non abbia un milione di voti positivi.
Charles,

44

Puoi anche farlo senza un pacchetto esterno usando un hack minore, con solo un po 'più di sforzo. Ecco come:

| rappresenta un cursore in queste istruzioni.

  1. Crea i cursori su tutte le righe desiderate usando Ctrl+ Fai clic o selezionando un blocco di testo e premendo Ctrl+ Shift+ L. ( documenti di selezione )

  2. Aggiungi spazi aggiuntivi alla fine di ogni parola, fino a quando ogni cursore non si trova sul punto in cui vuoi la colonna (o non importa quanto lontano passato):

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. ( opzionale 1 ) Digita qualsiasi carattere seguito da uno spazio; usiamo c:

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. Premere Homeper far andare i cursori all'inizio delle righe:

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. Premere → (right arrow) fino a quando i cursori sono dove vuoi la tua colonna:

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. Premere Ctrl+ Shift+ per selezionare tutti i seguenti spazi bianchi c, quindi premere Delete:

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. ( opzionale 1 ) Premere di Deletenuovo per ripulire il carattere di spazio aggiuntivo che è stato aggiunto nel passaggio facoltativo.


1 Usiamo il ccarattere seguito da uno spazio solo se ci sono contenuti aggiuntivi sulle linee che vogliamo mantenere. Senza di essa, Ctrl+ Shift+ selezionerebbe la prima parola di qualsiasi contenuto aggiuntivo sulle righe, rendendo difficile la cancellazione.


2
All'inizio sembra contorto ma è un trucco ordinato. Buono per incollare colonne con un corretto allineamento. La colonna successiva può essere incollata utilizzando il plug-in di pasticceria del testo.
utente il

1
Sto usando questa tecnica da un po ', ma fai attenzione , ctrl+shift+rightnon tratta tutti i personaggi in modo coerente, quindi potrebbe finire per selezionare più di uno spazio bianco.
SpareBytes,

1
Un trucco davvero pulito, sono d'accordo. Ma alla fine l'ho provato senza un personaggio, Shift-End Deletee l'ho usato e ha funzionato. Funziona in alcuni casi ma non in altri?
Septagram

Questo è quello che faccio sempre :)
Domino

Questo non funziona se csu una riga è prima della fine della parola su un'altra. Qual è il problema che sto riscontrando in questo momento. Alcune linee non contengono abbastanza caratteri per scorrere verso destra, quindi quando lo fai si sposta sulla riga successiva, lasciando questo hack proprio come quello. Questo è un trucco, non un utile sostituto per tutti.
leetNightshade,

0

Per coloro che vogliono rientrare in caratteri diversi da =e |, sono stato in grado di installare il pacchetto Allineamento e modificare il file in modo Sublime Text > Preferences > Package Settings > Alignment > Settings - Userche assomigli a quanto segue:

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

Ho quindi selezionato il seguente codice:

  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)}

e premuto Command + Ctrl + Aper allinearlo.

  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)}

Tutto è stato spostato nella colonna più a sinistra che il {createtesto poteva occupare pur rimanendo allineato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.