Frage

Ich möchte oft ein mehrzeiliges Funktionsaufruf machen und es zu reduzieren, um eine Zeile nach unten. Zum Beispiel konvertieren ...

function_call(
     'first_arg',
     'second')

function_call('first_arg', 'second')

Gibt es irgendwo Emacs einige Befehle mit diesem zu helfen. Insbesondere ist es ein Befehl, alle Leerzeichen aus dem Punkt auf den ersten Nicht-Leerzeichen löscht?

War es hilfreich?

Lösung

Sie könnten versuchen, delete-indentation, mein Lieblings Befehl für mehrere Zeilen in einer Verbindungslinie. In Ihrem Beispiel, setzen Sie den Cursor auf die Zeile mit "zweiten" und drücken Sie M - ^ zweimal. Hier sind die docs:

  

M - ^ führt den Befehl delete-indentation, die eine interaktive zusammengestellt Lisp-Funktion in simple.el ist

.      

Es ist verpflichtet, M -. ^

     

(delete-indentation &optional arg)

     

An diese Linie zum vorherigen und reparieren Leerzeichen am beizutreten. Wenn ein Fill-Präfix ist, löschen Sie es von Anfang an dieser Linie. Mit dem Argument, verbinden Sie diese Zeile Linie folgen.

Andere Tipps

Werfen Sie einen Blick auf die fixup-whitespace Funktion. Es kommt mit Emacs, in simple.el. Seine docs sind:

  

Fixup Leerraum zwischen den Objekten um den Punkt.   Lassen Sie ein Leerzeichen oder keine, je nach Kontext.

Eine ähnliche Funktion, just-one-space, dass

  

Löscht alle Leerzeichen und Tabulatoren um den Punkt, so dass ein Raum

ist in der Regel gebunden M-SPC .

  

Im Einzelnen gibt es einen Befehl, alle Leerzeichen aus dem Punkt auf den ersten Nicht-Leerzeichen löscht?

Es gibt einen Befehl, der fast das tut:

  

M- \ führt den Befehl delete-horizontal-Raum     Das ist eine interaktive zusammengestellt Lisp-Funktion in `simple.el‘.

     

Es ist gebunden an M -. \

     

(delete-horizontal-Raum und optional nach hinten nur)

     

Löschen Sie alle Leerzeichen und Tabulatoren um den Punkt.   Wenn rückwärts nur Nicht-Null ist, löschen Sie sie nur vor dem Punkt.

Sie können jederzeit M-z verwenden bis zu einem Zeichen zu löschen.

Für zB in Ihrem Fall:

M-z 'bis zu dem Apostroph löschen (leider wird das Apostroph als auch löschen, aber das ist eine kleine Unannehmlichkeit).

Ich verwende den folgenden Makro zu „ziehen“, um die nächste Zeile an das Ende der aktuellen Zeile, Leerzeichen komprimiert wird.

(defun pull-next-line() 
  (interactive) 
  (move-end-of-line 1) 
  (kill-line)
  (just-one-space))

Das ist genau das Gegenteil von dem @ jrockway des move-line-up und von delete-indentation, die ich natürlicher finden. Der just-one-space Befehl im Makro ist genau @ Mike M-SPACE.

Ich binde pull-next-line M-J (in Analogie mit Vims J, für "join", Befehl) die folgenden in meinem .emacs verwendet wird.

(global-set-key (kbd "M-J") 'pull-next-line)

Beispiel. Der Aufruf pull-next-line auf der ersten Zeile

function_call(
     'first_arg',
     'second')

Ausbeuten

function_call( 'first_arg',
     'second')

es ein zweites Mal Ausbeuten Aufruf

function_call( 'first_arg', 'second')

Alt-Raum wird eine Reihe von Leerzeichen zu einem einzigen Leerzeichen reduzieren, aber es wird die Neue-Zeile nicht löschen. Dennoch sollte, dass ein wenig helfen.

Um alles von Punkt auf den ersten Nicht-Leerzeichen (oder Newline) zu löschen, geben Sie einen Nicht-Leerzeichen char, Alt-Raum, Backspace (endgültige Leerzeichen Zeichen entfernen), dann Backspace (das Zeichen zu löschen, die Sie hinzugefügt.

die mehrzeiligen Funktionsdeklaration in eine einzeiligen Erklärung zu aktivieren, verwendet eine Kombination aus Alt-Raum, Backspace und Alt-E (zur-endofline) Befehle.

Eine ziemlich drastische Art und Weise, dies zu tun ist Hungry-Delete -Modus:

  

Hungry-Delete ist ein kleiner-Modus, Löschen alle Leerzeichen in Richtung löschen bewirkt, dass Sie löschen.

Ein etwas anderer Ansatz wäre, eine Tastatur Makro erstellen für Sie den Job zu erledigen. so, für die Erstellung der Makrostufe ein allgemeines Szenario wie folgt:

foo


               bar

[eine Zeile mit „foo“, dann ein paar Zeilen später und mit einigen weißen Räumen, schreiben „bar“]

dann irgendwo zwischen foo und bar stehen, gehen Sie wie folgt vor:

C-x (                    ; start recording macro
M-b                      ; move backwards to the beginning of foo
END                      ; move to the end of foo
C-space                  ; place mark
C-M-f                    ; move to the end of bar
HOME                     ; move to the beginning of the line
C-w                      ; yank out all the white space
M-SPACE                  ; leave only one space
C-x )                    ; end recording the macro
M-x name-last-kbd-macro  ; name it, call it jline or something 

Jetzt können Sie immer alle Leerzeichen zwischen zwei Worten mit M-x einzeiligem entfernen

Merken Sie sich Ihre Tastatur-Makros zu speichern, indem M-x Insert-kbd-macro irgendwo in Ihrer .emacs-Datei Ausgabe - das ist, wie es aussieht:

(fset 'jline
   [?\M-b end ?\C-  ?\C-\M-f home ?\C-w escape ? ])

Ich tue dies:

(defun move-line-up ()
  "Removes leading spaces from the current line, and then moves
the current line to the end of the previous line."
  (interactive)
  (let (start end)
    (save-excursion
      (beginning-of-line)
      ; get first non-space character, only look on this line
      (let ((search-end (save-excursion (end-of-line) (point))))
        (re-search-forward "[^[:space:]]" search-end))
      (setq end (1- (point)))
      (previous-line)
      (end-of-line)
      (setq start (point))
      (delete-region start end))
    (goto-char start)))

(defun move-next-line-up ()
  "Moves the next line to the end of the current line"
  (interactive)
  (next-line)
  (move-line-up))

Und binden diese als:

(global-set-key (kbd "C-x ,") 'move-line-up)
(global-set-key (kbd "C-x .") 'move-next-line-up)

So Ihr Problem, auf der Linie zu lösen, das sagt: "Sekunde)", nur laufen C-x , C-x ,

Wenn Sie alle Ihre Löschungen wollen, so handeln, könnten Sie überprüfen gierig-löschen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top