Emacs中类似于ct的功能是什么?

4

我希望您能提供一个等效的复制和粘贴策略,以复制vim的'cut til'。 如果我知道vim中它被称为什么,我相信可以在谷歌上搜索到它,但这就是我要找的内容:

如果我有如下文本块:

foo bar (baz)

我在行首位置,想要在第一个括号处截断,如果是在编辑器的可视化模式下,可以执行以下操作:

 ct (

我认为可能有一种方法可以回顾过去,并且我认为你可以传递更具体的正则表达式。但无论如何,我正在寻找一些类似于emacs的东西来进行这种文本替换。谢谢。

3个回答

8
以下有三种方法:
  1. 只需输入 M-dM-d 以删除两个单词。这将保留最后的空格,因此如果您想把这两个单词粘贴到别处,您需要自己删除空格并添加回去。
  2. M-zzap-to-char,它会删除从光标开始直到指定字符(包括该字符)的文本内容。在这种情况下,您需要执行类似于 M-2M-zSPC 的操作来删除直到第二个空格字符(包括该字符)的文本内容。
  3. 按下 C-SPC 设置标记,然后使用 C-s 进入增量搜索状态,在搜索栏中输入一个空格跳转至第一个空格,接着再次按下 C-s 前进搜索下一个空格,使用 RET 结束搜索,最后按下 C-w 来删除所选的文本内容。
个人建议通常采用第一种方法。

在第三种情况下,您不必在开头使用C-SPC设置标记,因为增量搜索会自动完成该操作。 - Tom
@Tom是正确的,对于第三个问题,您不需要设置标记。对于要标记哪个答案作为答案感到矛盾。我将标记Sean的答案作为答案,因为他提供了一些额外的选项;但我也会顶一下kindahero的答案,因为它也正好符合我的需求。 - Jed Schneider

5
正如ataylor所说,`zap-to-char`是最好的选择。下面是对`zap-to-char`的修改,正是你想要的:
(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

顺便提一下,不要忘记它具有使用负前缀向后移动的能力。


2
“zap-up-to-char” 已经在最近的 Emacs 中包含在 “misc.el” 中。 - sanityinc
@sanityinc 不知道啊,这样就有更多的空间放init.el了。 - kindahero
我很好奇,所以我又仔细检查了一遍;即使是版本为22.1.1的Emacs也在misc.el中有该函数。不过它没有自动加载,所以需要(require misc) - sanityinc

3

这听起来像是Emacs中的zap-to-char命令,默认情况下绑定到M-z快捷键。请注意,zap-to-char会删除从开始位置到所选字符(包括所选字符)的所有字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接