Wie kann ich in Sublime Text 2 eine gerade Spalte mit mehreren Cursorn an einer zackigen Kante einrücken?


33

Angenommen, ich habe mehrere Cursor in mehreren Zeilen:

foo|
barr|
foobar|
baz|

Wie kann ich das Leerzeichen am Ende jeder Zeile automatisch an eine flache Kante verschieben ?:

foo    |
barr   |
foobar |
baz    |

(In diesen Beispielen |soll das mein Cursor sein.)

Wenn Sie gerade Taboder Spacevon der anfänglichen Vereinbarung erhalten Sie diese:

foo    |
barr    |
foobar    |
baz    |

Das ist nützlich, aber nicht das, wonach ich suche. Ich suche nach einer Art Tastaturkürzel, mit der ich von einer zerlumpten Einfügemarke mit mehreren Cursorn zu einer geraden Spalte wechseln kann.


Funktioniert das einfache Einfügen eines oder zweier Tabs?
Darth Android

Nein, aber ich verstehe es vielleicht nicht. Ich habe bearbeitet, um meine Frage zu klären.
GladstoneKeep

Ihre Bearbeitung beschreibt, was Space macht, und bis zu einem gewissen Grad werden Tabulatoren angezeigt, wenn sich Ihre Zeilen stark unterscheiden, aber wenn sie alle ziemlich nahe beieinander liegen, sollten sich Ihre Cursor nach zwei Tabulatoren alle auf einem Tabulator befinden. Möglicherweise müssen Sie einige Anpassungen vornehmen, um sie alle auf die gleiche Registerkarte zu setzen, aber es ist weniger als der Versuch, sie mit Leerzeichen anzupassen.
Darth Android

Es ist komisch. Wenn Sie Tabam Ende jeder Zeile drücken, wird der zerlumpte Mehrfachcursor in eine gerade Spalte eingerückt. Mit Regex kann jedoch nicht der gleiche Effekt erzielt werden. Ich habe nach folgenden Leerzeichen gesucht: \s*$und sie durch das Tabulatorzeichen ersetzt: \t- hat jedoch \tnicht den gleichen Effekt wie Tabmanuelles Drücken .
Amiregelz

1
Zu Ihrer Information, ich habe dies als Feature-Anfrage auf der Sublime Text 2- Anfragetafel gepostet .
GladstoneKeep

Antworten:


10

Sie könnten Sublime Alignment von wbond verwenden

Möglicherweise müssen Sie dies zu Ihrer Einstellungsdatei hinzufügen (Einstellungen> Paketeinstellungen> Ausrichtung> Einstellungen-Benutzer:

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

"|" Ersetzen mit welchem ​​Zeichen Sie ausrichten möchten.

Bearbeiten: Wie mtoast herausgefunden hat, "\n"ergibt das Hinzufügen zu " align_chars " den gewünschten Effekt. Das Hinzufügen des neuen Zeilenzeichens zu "alignment_space_chars" ist wahrscheinlich nicht erforderlich und kann den Text löschen. Bei meinen begrenzten Tests konnte ich jedoch keinen Unterschied feststellen.

Halten controlSie die Maustaste gedrückt und klicken Sie am Ende jeder Zeile. Drücken Sie dann die Ausrichtungs-Hotkeys (für Linux ist die Standardeinstellung ctrl+ alt+ a). Sie werden feststellen, dass die Cursor an der am weitesten entfernten Cursorposition ausgerichtet sind.

Bearbeiten2: Wenn Sie eine neue Zeile hinzufügen, "alignment_space_chars"um Text zu löschen, wenn Sie einen Textblock markieren und Sublime Alignment auf der Zeile nichts anderes zum Ausrichten findet (wie ein Gleichheitszeichen).

Wenn Sublime Alignment keine andere Option zum Ausrichten findet, wird durch Hinzufügen einer neuen Zeile "alignment_chars"das Zeilenende mit Leerzeichen (oder Tabulatoren, abhängig von Ihren Einstellungen) aufgefüllt , um der längsten hervorgehobenen Zeile zu entsprechen.


1
Wow großartig! Ich habe das Sublime Alignment-Paket installiert "\n", meinem hinzugefügt (Newline) "alignment_chars"und das gewünschte Ergebnis erhalten. (Hinweis: Ich habe es nicht hinzugefügt "alignment_space_chars", wodurch die Zeilen gelöscht wurden.) Wenn Sie "n"Ihrer Antwort diesen speziellen Vorschlag ( ) hinzufügen , werde ich akzeptieren.
GladstoneKeep

Nett! Sehr nützliches Paket für Perfektionisten wie mich :)
amiregelz

3
Es gibt auch ein ähnliches Paket: Tabellarisch ausrichten, das etwas flexibler ist (Sie können mehrere Zeichen ausrichten).
d_rail

Mit AlignTab von d_rail oben erwähnt, denken Sie daran zu entkommen |durch einen einzigen `\`
Benutzer

Ich kann nicht glauben, dass dies nicht eine Million Stimmen hat.
Charles

44

Sie können es auch ohne ein externes Paket mit einem kleinen Hack tun, mit nur etwas mehr Aufwand. Hier ist wie:

| Stellt einen Cursor in dieser Anleitung dar.

  1. Erstellen Sie Cursor in allen gewünschten Zeilen mit Ctrl+ Klicken oder indem Sie einen Textblock auswählen und Ctrl+ Shift+ drücken L. ( Auswahldokumente )

  2. Fügen Sie am Ende jedes Wortes weitere Leerzeichen ein, bis sich jeder Cursor an der Stelle oder hinter der Stelle befindet, an der Sie Ihre Spalte einfügen möchten (egal wie weit die Zeit zurückliegt):

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. ( optional 1 ) Geben Sie ein beliebiges Zeichen gefolgt von einem Leerzeichen ein. Verwenden wir c:

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. Drücken Sie Home, um die Cursor an den Anfang der Zeilen zu setzen:

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. Drücken Sie, → (right arrow) bis die Cursor sind , wo Sie Ihre Spalte wollen:

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. Drücken Sie Ctrl+ Shift+ wählen alle folgenden Leerzeichen und cdann drücken Delete:

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. ( Optional 1 ) Drücken Sie Deleteerneut, um das zusätzliche Leerzeichen zu entfernen, das Sie im optionalen Schritt hinzugefügt haben.


1 Wir verwenden das cZeichen gefolgt von einem Leerzeichen nur, wenn die Zeilen, die wir behalten möchten, zusätzlichen Inhalt enthalten. Ohne sie Ctrl+ Shift+ wäre das erste Wort von zusätzlichen Inhalten auf den Linien wählen, so dass Löschen schwierig.


2
Das sieht auf den ersten Blick verdreht aus, ist aber ein ordentlicher Hack. Gut zum Einfügen von Spalten mit korrekter Ausrichtung. Die nächste Spalte kann mit dem Text Pastry Plug-In eingefügt werden.
Benutzer

1
Ich verwende diese Technik seit einiger Zeit, aber sei vorsichtig , ctrl+shift+rightbehandle nicht alle Zeichen konsistent, so dass möglicherweise mehr als nur Leerzeichen ausgewählt werden.
SpareBytes

1
Ein wirklich guter Trick, stimme ich zu. Aber ich habe es am Ende nur ohne Charakter ausprobiert und verwendet Shift-End Deleteund es hat einfach funktioniert. Funktioniert es in einigen Fällen aber nicht in anderen?
Septagram

Das ist, was ich immer tue :)
Domino

Dies funktioniert nicht, wenn cin einer Zeile vor dem Ende des Wortes in einer anderen Zeile steht. Welches Problem habe ich gerade? Bestimmte Zeilen enthalten nicht genug Zeichen, um nach rechts zu scrollen. Wenn Sie dies tun, wird die nächste Zeile umbrochen und dieser Hack bleibt nur derselbe. Dies ist ein Hack, kein nützlicher Allheilmittelersatz.
LeetNightshade

0

Für diejenigen, die andere Zeichen als =und einrücken möchten |, konnte ich das Alignment- Paket installieren und die Datei so ändern Sublime Text > Preferences > Package Settings > Alignment > Settings - User, dass sie wie folgt aussieht:

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

Ich habe dann den folgenden Code ausgewählt:

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

und gedrückt Command + Ctrl + A, um es auszurichten.

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

Alles wurde in die äußerste linke Spalte verschoben, die der {createText einnehmen konnte, während er noch ausgerichtet war.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.