2012-04-05 96 views
4

正在尋找等效的剪切和粘貼策略,以複製vim的「剪切直至」。我敢肯定,這是googleable如果我真的知道這是什麼所謂的VIM,但繼承人什麼我正在尋找:emacs等價於ct

如果我有一個文本塊,像這樣:

foo bar (baz) 

和我在該行的開頭,我想砍,直到第一個括號,在可視化模式,我會做:

ct (

我認爲有可能是一個辦法回過頭來,我想你可以通過更多特定正則表達式。但無論如何,尋找一些emacs等同於做這種文本替換。謝謝。

回答

8

這裏有三種方式:

  1. 只需鍵入M-dM-d刪除兩個單詞。這將留下最後的空間,所以您必須自己刪除它,然後將其添加回來,如果您將這兩個單詞粘貼回其他地方。
  2. M-zzap-to-char,它將光標中的文本從指定的字符刪除幷包括在內。在這種情況下,您必須執行如下操作:M-2M-zSPC將跳入幷包括第二個空格字符。
  3. 類型C-SPC設置標記,然後進入增量搜索與,鍵入一個空格跳到第一空間,然後向前搜索下一個空間,RET到終止搜索,最後Cw殺死您選擇的文本。

就我個人而言,我一般會去#1。

+0

在第三種情況下,您不必在開始時使用C-SPC設置標記,因爲增量搜索會自動進行。 – Tom 2012-04-06 05:20:43

+0

@Tom是正確的,第三次你不需要設置標記。關於標記爲答案的答案有衝突。將肖恩的答案標記爲給予一些額外選擇的答案;但碰撞kindahero的答案,因爲這也正是我需要在這種情況下。 – 2012-04-20 12:45:58

3

這聽起來像是emacs中的zap-to-char,默認綁定到M-z。請注意,zap-to-char會將所有字符截至,包括您選擇的

5

爲ataylor說zap-to-char是要走的路,以下修改的ZAP對焦炭正是你想要

(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不要忘記,它必須與倒退的能力一個否定前綴

+2

''zap-up-to-char'包含在'misc.el'中最近的Emacsen中。 – sanityinc 2012-04-06 12:31:37

+0

@sanityinc不知道。更多的空間init.el然後 – kindahero 2012-04-06 13:15:29

+0

我很好奇,所以我只是仔細檢查;甚至Emacs的版本也只有22.1。1在'misc.el'中有這個功能。不過,它不是自動加載的,因此需要'(需要混淆)'。使用23.4.1的 – sanityinc 2012-04-06 19:21:55