Wie lösche ich die ersten n Zeichen jeder Zeile?

15

Ich habe kürzlich gefragt:

Wie füge ich jeder Zeile ein Präfix hinzu?

Gehen Sie also vom folgenden Code aus:

I said Hello
I said There
I said I am some code

So codieren Sie wie folgt:

Hello
There
I am some code

Wie lösche ich nun n Zeichen aus einer Zeile?

Luke
quelle
IMHO ist es das gleiche wie deine vorherige Frage.
A_P

Antworten:

29

Es ist noch einfacher! Verwenden Sie erneut Rechteckbefehle . Bewegen Sie sich zu einer Ecke des zu löschenden Rechtecks ​​und drücken Sie C-SPC, um die Markierung zu setzen. Gehen Sie zur anderen Ecke des Rechtecks ​​und drücken Sie C-x r d( delete-rectangle). Gehen Sie beispielsweise zur ersten Zeile, auf die Sie einwirken möchten, drücken Sie C-aoder home, um zum Zeilenanfang zu gelangen, gehen Sie nach unten zur letzten Zeile, auf die Sie einwirken möchten, gehen Sie zur rechten unteren Ecke und löschen Sie sie.C-u number C-fC-x r d

Wenn die letzte Zeile weniger als die gewünschte Anzahl von Zeichen enthält, ist es möglicherweise praktischer, stattdessen die linke untere und rechte obere Ecke zu verwenden. Alternativ können Sie Junk-Zeichen einfügen (dies ist nützlich, wenn sowohl die erste als auch die letzte Zeile kürzer sind).

Sie können C-x r kdas Rechteck mit töten, um C-x r yes später zu ziehen ( ) (bewegen Sie es in die linke obere Ecke der Stelle, an der Sie es einfügen möchten).

Sie können auch C-x r t( string-rectangle) verwenden und eine leere Zeichenfolge eingeben.

Rechteckbefehle basieren auf Spaltenpositionen. Wenn Sie n Zeichen anstelle von n Spalten löschen möchten (was sich bei mehrspaltigen Zeichen wie Tabulatoren bemerkbar macht), können Sie reguläre Ausdrücke ersetzen : Ersetzen Sie diese ^.\{42\}durch nichts, um die ersten 42 Zeichen jeder Zeile zu löschen.

Gilles 'SO - hör auf böse zu sein'
quelle
3
Anstatt zu versuchen, sich alle Rechteckbefehle zu merken, können Sie auch Cx spc anstelle von C-spc verwenden, wodurch Ihre Region in ein Rechteck verwandelt wird und alles einfach funktioniert.
Malabarba
1
@Malabarba Nur seit Emacs 24 obwohl. (Schreiben Sie dies auf einem Computer mit Emacs 23. Sie sind immer noch sehr weit verbreitet.)
Gilles 'SO - hören Sie auf, böse zu sein'
2
Mein Beileid ... :-(
Malabarba
Dies funktionierte gerade für mich auf GNU Emacs 23.4.1 (x86_64-pc-linux-gnu, GTK + Version 2.24.21) vom 25.10.2013 auf Piment, modifiziert von Debian
davidrmcharles
4

Eine andere Möglichkeit: Ich mag es wirklich, mehrere Cursor für solche Aufgaben zu verwenden. Erhältlich package.elüber MELPA, ist es ein unverzichtbarer Bestandteil meines Emacs geworden. Ich würde einfach auswählen I said(und möglicherweise den Zeilenumbruch davor einfügen), verwenden M-x mc/mark-all-like-thisund mich auf den Weg machen. Wenn Sie eine feinkörnigere Steuerung wünschen, können Sie mc/mark-next-like-thisoder verwenden mc/mark-next-lines.

Meine Tastenkombinationen:

(use-package multiple-cursors
  :bind (("C->"   . mc/mark-next-like-this)
         ("C-M->" . mc/mark-all-like-this-dwim)))

Die obligatorischen Emacs Rocks! Folge: http://emacsrocks.com/e13.html

Sean Allred
quelle
3

Wenn Sie cua-modeaktiviert haben, dann:

  • C-a an den anfang der zeile gehen,
  • C-RET um ein Rechteck zu beginnen,
  • Bewegen Sie sich dann mit den Pfeiltasten oder einem beliebigen Emacs-Befehl wie C-f
  • DEL Auswahl löschen

Ich bevorzuge die cua-modeArbeitsweise im Vergleich zum Emacs-Standardrechteck, wo das Äquivalent wäre:

  • C-a an den anfang der zeile gehen,
  • C-SPC um ein Rechteck zu beginnen,
  • Bewegen Sie sich dann mit den Pfeiltasten oder einem beliebigen Emacs-Befehl wie C-f
  • C-x r d Auswahl löschen

Das cua-modespart drei Tastendrücke im Vergleich zum Standard-Emacs-Rechteck.

thdox
quelle
3

Der Vollständigkeit halber: Das Löschen der ersten 3 Zeichen aus jeder Zeile (formal: ab dem Punkt oder in der Region) kann durch regexp-Ersetzen ^...(oder allgemeiner :) ^.\{3\}durch eine leere Zeichenfolge erfolgen.

Erklärung: In regulärer Schreibweise ^bedeutet "Zeilenanfang", ."beliebiges Zeichen" und \{n\}" n Wiederholungen des vorherigen Objekts ".

Dies hat den zusätzlichen Vorteil, dass es interaktiv ist (es sei denn, man drückt !, wodurch query-regexp-replacevon nun an alles ohne weitere Fragen ersetzt wird).

mbork
quelle
1
Warum die Abstimmungen?
mbork
0

Und noch eine Möglichkeit:

F3C-aC-3C-dC-nF4

Zeichnet ein Tastaturmakro auf, das im Grunde "an den Zeilenanfang gehen, drei Zeichen löschen und zur nächsten Zeile gehen" sagt. Anschließend können Sie es bis zum Ende des Puffers durch abspielen C-uF4oder C-xC-krauf die Linien in der Region anwenden. Dies hat einen Nachteil: Es wird unterbrochen, wenn eine Zeile weniger als 3 Zeichen enthält.

mbork
quelle
-1

Wenn es sich nur um eine Linie handelt, können Sie mit Mz zappen, wobei vorausgesetzt wird, dass dieses Zeichen zwischen dem Punkt und dem Punkt, den Sie löschen möchten, nicht wiederholt wird. In einigen Fällen ist dies schneller als das Erstellen einer Region.

Willyfrog
quelle