Wie kann ich in Sublime Text 2 zu einer geraden Spalte mit mehreren Cursors auf einer unregelmäßigen Kante einrücken?

13274
GladstoneKeep

Angenommen, ich habe mehrere Cursor entlang mehrerer Linien, wie folgt:

foo| barr| foobar| baz| 

Wie kann ich den Whitespace am Ende jeder Zeile wie folgt automatisch an eine flache Kante hinausschieben ?:

foo | barr | foobar | baz | 

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

Wenn Sie gerade Taboder Spaceaus der ursprünglichen Vereinbarung, erhalten Sie Folgendes:

foo | barr | foobar | baz | 

Das ist nützlich, aber nicht das, wonach ich suche. Ich bin auf der Suche nach einer Art Tastenkombination, mit der ich aus einem rauhen Multi-Cursor-Insert in eine gerade Spalte einrücken kann.

31
Funktioniert es einfach, ein oder zwei Tabs einzufügen? Darth Android vor 12 Jahren 0
Nein, aber ich kann es nicht verstehen. Ich habe bearbeitet, um meine Frage zu klären. GladstoneKeep vor 12 Jahren 0
In Ihrer Bearbeitung wird beschrieben, was Space tut, und in gewissem Maße werden sich Tabs ändern, wenn Ihre Zeilen stark voneinander abweichen. Wenn sie alle ziemlich dicht sind, sollten sich die Cursor nach zwei Tabs alle auf einem Tabstop befinden. Möglicherweise müssen Sie einige Anpassungen vornehmen, um alle auf derselben Registerkarte zu platzieren. Dies ist jedoch weniger, als wenn Sie versuchen, sich mit Leerzeichen anzupassen. Darth Android vor 12 Jahren 0
Es ist komisch. Wenn Sie am Ende jeder Zeile die Tabulatortaste drücken, wird die rauhe Multi-Cursor-Einfügung in eine gerade Spalte eingerückt. Mit Regex kann jedoch nicht derselbe Effekt erzielt werden. Ich suchte nach folgenden Leerzeichen: `\ s * $` und ersetzte sie mit dem Tabulatorzeichen: `\ t` - aber` \ t` erzielt nicht denselben Effekt wie das manuelle Drücken von `Tab`. amiregelz vor 12 Jahren 0
Zu Ihrer Information, ich habe dies als Feature-Request (http://sublimetext.userecho.com/topic/127714-/) auf der Sublime Text 2-Request-Board veröffentlicht. GladstoneKeep vor 12 Jahren 1

3 Antworten auf die Frage

41
kogre

Sie können dies auch ohne externes Paket mit einem geringfügigen Hack tun, mit nur etwas mehr Aufwand. Hier ist wie:

| steht in diesen Anweisungen für einen Cursor.

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

  2. Fügen Sie am Ende jedes Wortes weitere Leerzeichen hinzu, bis sich jeder Cursor an oder hinter dem Punkt befindet, an dem Sie Ihre Spalte haben möchten (egal, wie weit weg).

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

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

    |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+ alle folgenden Leerzeichen auszuwählen und cdrücken Sie dann Delete:

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


1 Das cZeichen, gefolgt von einem Leerzeichen, wird nur verwendet, wenn die Zeilen zusätzlichen Inhalt enthalten, den wir behalten möchten. Andernfalls würde Ctrl+ Shift+ das erste Wort eines zusätzlichen Inhalts in den Zeilen auswählen, was das Löschen schwierig macht.

Das sieht auf den ersten Blick verdreht aus, ist aber ein ordentlicher Hack. Gut für das Einfügen von Spalten mit korrekter Ausrichtung. Die nächste Spalte kann mit dem Text-Gebäck-Plug-In eingefügt werden. user vor 10 Jahren 2
Ich benutze diese Technik schon eine Weile **, aber seien Sie vorsichtig **, `ctrl + shift + right` behandelt nicht alle Charaktere konsistent, so dass am Ende mehr als nur Leerzeichen ausgewählt werden kann. SpareBytes vor 9 Jahren 1
Ein wirklich toller Trick, stimme ich zu. Aber ich habe es am Ende einfach ohne Charakter ausprobiert und `Shift-End`` Delete` verwendet, und es hat einfach funktioniert. Funktioniert es in einigen Fällen, aber nicht in anderen? Septagram vor 9 Jahren 0
Das mache ich immer :) Jacque Goupil vor 8 Jahren 0
Dies funktioniert nicht, wenn das "c" in einer Zeile vor dem Ende des Wortes in einer anderen steht. Welches ist das Problem, das ich gerade habe. Bestimmte Zeilen enthalten nicht genügend Zeichen, um nach rechts zu scrollen. Wenn Sie dies tun, wird die nächste Zeile aufgerufen, und dieser Hack bleibt genau so. Dies ist ein Hack, kein nützlicher Ersatz für alles. leetNightshade vor 8 Jahren 0
10
d_rail

You could use wbond's Sublime Alignment

It may require you to add this to your settings file (Preferences>Package Settings>Alignment>Settings-User:

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

Replace "|" with whatever character you want to align.

Edit: As mtoast has found out, adding "\n" to "alignment_chars" gives the desired effect. Adding the new line character to "alignment_space_chars" is probably not needed and may delete the text. However, with my limited tests I did not see a difference.

Hold control and click at the end of each line. Then press the alignment hotkeys (For linux the default is ctrl + alt + a). You will find that the cursors are lined up with the furthest cursor position.

Edit2: Adding newline to "alignment_space_chars" will delete text if you highlight a block of text and Sublime Alignment can't find something else to align on the line (like a equal sign).

Also, if Sublime Alignment can't find something else to align, adding newline to "alignment_chars" will pad the end of lines with spaces (or tabs depending on your settings) to match longest line highlighted.

Wow großartig! Ich installierte das Sublime Alignment-Paket, fügte `` \ n '' (Newline) zu meinen '' Alignment_chars '`hinzu und erhielt das gewünschte Ergebnis. (Hinweis: Ich habe es nicht zu "Ausrichtungszeichen" hinzugefügt, wodurch die Zeilen gelöscht wurden.) Wenn Sie Ihrer Antwort diesen speziellen Vorschlag ("" n "") hinzufügen, akzeptiere ich. GladstoneKeep vor 12 Jahren 1
Nett! Sehr nützliches Paket für Perfektionisten wie mich :) amiregelz vor 12 Jahren 0
Es gibt auch ein ähnliches Paket: [Align Tabular] (https://github.com/randy3k/AlignTab), das etwas flexibler ist (Sie können mehrere Zeichen ausrichten). d_rail vor 11 Jahren 3
Denken Sie daran, dass mit AlignTab, das oben von d_rail erwähnt wurde, `|` durch ein einzelnes `\\` entkommen ist user vor 11 Jahren 0
Ich kann nicht glauben, dass dies keine Millionen Stimmen hat. Charles vor 7 Jahren 0
0
Matthew Hinea

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": [ " 

Ich habe dann folgenden Code ausgewählt:

 let!(:admin_user)  let!(:another_admin_user)  let!(:superadmin_user1)  let!(:superadmin_user2)  let!(:nonadmin_user)  

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

 let!(:admin_user)  let!(:another_admin_user) let!(:superadmin_user1)  let!(:superadmin_user2)  let!(:nonadmin_user)  

Alles wurde in die linke Spalte verschoben, die der /bin/pidof ssh if [[ $? -ne 0 ]]; then echo Creating new tunnel connection createTunnel fi

Der Cronjob ist einfach:

crontab -e */1 * * * * /root/scripts/ssh_tunnel.sh > tunnel.log 2>&1 

Ich brauche ssh-Sitzungen, um sich im Falle einer Unterbrechung automatisch wieder herzustellen. Wenn der sshd-Prozess auf dem Server derzeit beendet wird, wird der Prozess auf dem Client nicht beendet. Dies führt dazu, dass das Skript nicht versucht, eine neue Sitzung einzurichten.
Ich stelle fest, dass beim manuellen Start der Verbindung von einem interaktiven Terminal aus kein Problem besteht, dh der Client stirbt zusammen mit dem serverseitigen Prozess bei der Beendigung.

Jede Hilfe wäre dankbar, danke.