2010-10-12 15 views

Odpowiedz

12

Spróbuj

M-z CHAR 

który zabija tekst przez następne wystąpienie CHAR. Aka M-x zap-to-char. Interesująca może być dokumentacja dla Other Kill Commands.

Edited by dodać: Na życzenie, tutaj jest zap-to-before-char, który właśnie wziął kodu źródłowego zap-to-char i usunięte komentarz (i aktualizowany ciąg doc):

(defun zap-to-before-char (arg char) 
    "Kill up to and ARGth occurrence of CHAR. 
Case is ignored if `case-fold-search' is non-nil in the current buffer. 
Goes backward if ARG is negative; error if CHAR not found." 
    (interactive "p\ncZap to char: ") 
    ;; Avoid "obsolete" warnings for translation-table-for-input. 
    (with-no-warnings 
    (if (char-table-p translation-table-for-input) 
     (setq char (or (aref translation-table-for-input char) char)))) 
    (kill-region (point) (progn 
         (search-forward (char-to-string char) nil nil arg) 
         (goto-char (if (> arg 0) (1- (point)) (1+ (point)))) 
         (point)))) 
+0

Żałuję, że nie było M-x zap-do-wyrażeń regularnych. lub co najmniej M-x zap-before-char. – aartist

+0

@aartist 'zap-to-before-char' jest łatwe - zmieniłem odpowiedź, aby uwzględnić to, zmiana była w kodzie źródłowym, po prostu skomentowana. Wygląda na to, że nie pierwszy tego chciałeś. –

0

Oczywiście, zdefiniuj makro. Rozpocznij rejestrowanie makr, wpisując c-x (. Następnie wykonaj sekwencję poleceń, które chcesz powtórzyć:

c-s (
c-space 
c-s) 
M-w 

następnie kasy makro z c-x). Użyj go pod numerem c-x e.

Coś takiego ... Prawdopodobnie ma problemy z płotem. Jeśli nie chcesz, aby przesunął swój znak, zapisz go i przywróć na początku makra.

Więcej informacji na temat makr (jak jak zapisać wiążą je do innych klawiszy) tutaj:

http://www.emacswiki.org/emacs/KeyboardMacros

-1

Emacs posiada komendy gazillion, więc nie może być również taki, który robi dokładnie to.

W takiej sytuacji zaznaczam moje miejsce (za pomocą ctrl-spacji), następnie szukam dalej (ctrl-s) i wpisuję to, czego szukam (w twoim przypadku koniec-paren, ale może to być coś bardziej gadatliwego, jak w przypadku Pascala "end My_Procedure_Name;"). To spowoduje zaznaczenie całego tekstu od miejsca, w którym zaznaczyłem, do miejsca, w którym znalazł wzór wyszukiwania. Następnie klikam ctrl-k, aby wyciąć tekst do bufora kill.

W skrócie:

ctrl-space 
ctrl-s 
) return 
ctrl-k 

(a ctrl-_ jeśli chcesz zachować tekst, gdzie jest zbyt).

Może być szybszy/lepszy/itd. sposoby, ale to jest podzbiór poleceń emacsa, które znam na tyle dobrze, aby to zrobić, bez konieczności zatrzymywania się, aby o tym myśleć.

+0

Tak to robię, jeśli muszę to zrobić raz. Jeśli muszę to zrobić z pewną regularnością, robię makro ... –

2

Jeśli kursor znajduje się w nawiasach , najkrótszą sekwencją, jaką mogę skopiować do całej nawiasowanej grupy (włącznie z nawiasami) jest C-M-u C-M-SPC M-w (backward-up-list, , kill-ring-save). Jeśli chcesz zabić ten tekst, C-M-u C-M-k (backward-up-sexp,).Polecenia seksu są na ogół najłatwiejszym sposobem radzenia sobie z grupami nawiasowymi; inne ważne polecenia to: C-M-b (backward-sexp) i C-M-f (forward-sexp) (zauważ motyw C-M-).

0

Piękno Emacs jest to, że bardzo łatwo jest napisać Elisp, aby robić to, co chcesz:

(defun mark-inside-delimiters() 
"Mark all chars inside the balanced expression point is in" 
    (interactive) 
    (let (p start pairs stop) 
    (skip-chars-backward "^<({[\"'") 
    (setq p (point)) 
    (setq start (char-to-string (preceding-char))) 
    (setq pairs '(("<" . ">")("(" . ")")("{" . "}") 
        ("[" . "]")("\"" . "\"")("'" . "'"))) 
    (setq stop (cdr (assoc start pairs))) 
    (skip-chars-forward (concat"^" stop)) 
    (set-mark p))) 

(global-set-key (kbd "C-c m") 'mark-inside-delimiters) 

Ten konkretny przykład składni nie jest świadomy, więc nie będzie obsługiwać ciągi, które zawierają Escaped cudzysłów lub nawiasów wewnątrz ciągów, ale działa w większości przypadków.

+0

Nie jestem hakerem emacsa, ale gdzie powinienem dodać tę część w emacs? – starcorn

+0

W pliku ".emacs", który ma wszystkie ustawienia Emacs. Wewnątrz Emacsa, naciśnij 'C-x C-f' (naciśnij i przytrzymaj Ctrl, a następnie naciśnij i zwolnij x, a następnie f). Zostaniesz poproszony o podanie nazwy pliku. Wpisz '~/.emacs' i naciśnij enter. Wklej powyższy kod w dowolne miejsce w tym pliku. –

Powiązane problemy