2012-04-05 12 views
4

auf der Suche nach einer äquivalenten Cut-and-Paste-Strategie, die Vim "Schnitt bis" replizieren würde. Ich bin sicher, dass dies googleable ist, wenn ich wirklich wusste, was es in vim genannt wurde, aber heres, was ich suche:Emacs Äquivalent von ct

wenn ich einen Block von Text haben wie so:

foo bar (baz) 

und ich am Anfang der Linie war, und ich wollte, bis dem ersten paren, im visuellen Modus schneiden, würde ich tun:

ct (

ich denke, es wahrscheinlich ein Weg zurück zu blicken, und ich glaube, Sie mehr passieren können bestimmte reguläre Ausdrücke. Aber auf der Suche nach ein paar Emacs-Äquivalenten für diese Art von Textersetzung. Vielen Dank.

Antwort

8

Hier sind drei Möglichkeiten:

  1. Geben Sie einfach M-dM-d zwei Worte zu löschen. Dadurch wird das letzte Leerzeichen zurückgelassen. Sie müssen es also selbst löschen und dann wieder hinzufügen, wenn Sie die beiden Wörter an anderer Stelle einfügen.
  2. M-z ist zap-to-char, die Text vom Cursor bis einschließlich eines von Ihnen angegebenen Zeichens löscht. In diesem Fall müssten Sie etwas tun, um bis zum und einschließlich des zweiten Leerzeichens zu zappen, wie z. B. M-zSPC .
  3. Typ C-SPC die Markierung zu setzen, geht dann in inkrementelle Suche mit Cs ein Leerzeichen in dem ersten Raum zu springen, dann Cs nach vorn für den nächsten Raum zu suchen, RET zu Beenden Sie die Suche und schließlich Cw, um den ausgewählten Text zu löschen.

Persönlich würde ich im Allgemeinen mit # 1 gehen.

+0

Im Falle der 3. müssen Sie nicht die Markierung mit C-SPC am Anfang setzen, weil inkrementelle Suche das automatisch macht. – Tom

+0

@Tom ist korrekt, für die 3. müssen Sie die Markierung nicht setzen. In Konflikt, welche Antwort als Antwort zu markieren ist. Seans Antwort als Antwort auf ein paar zusätzliche Optionen markieren; aber die Antwort von Kindahero, weil es genau das ist, was ich in diesem Fall brauche. –

3

Das klingt wie zap-to-char in Emacs, gebunden an M-z standardmäßig. Beachten Sie, dass zap-to-char alle Zeichen bis und einschließlich die von Ihnen ausgewählte Zeichen schneiden.

5

als ataylor sagte zap-to-char die Art und Weise ist, die folgende Änderung an das zap-to-char zu gehen, was genau Sie wollen

(defun zap-up-to-char (arg char) 
    "Like standard zap-to-char, but stops just before the given character." 
    (interactive "p\ncZap up to char: ") 
    (kill-region (point) 
       (progn 
       (search-forward (char-to-string char) nil nil arg) 
       (forward-char (if (>= arg 0) -1 1)) 
       (point)))) 

(define-key global-map [(meta ?z)] 'zap-up-to-char)   ; Rebind M-z to our version 

BTW nicht vergessen, dass es die Fähigkeit, rückwärts zu gehen mit ein negatives Präfix

+2

'zap-up-to-char' ist im aktuellen Emacsen in' misc.el' enthalten. – sanityinc

+0

@sanityinc wusste das nicht. mehr Platz für init.el dann – kindahero

+0

Ich war neugierig, also habe ich einfach nachgeprüft; sogar Emacs-Versionen so alt wie 22.1.1 habe diese Funktion in 'misc.el'. Es wird jedoch nicht automatisch geladen, so dass '(require misc)' benötigt wird. – sanityinc