Emacs的。如何删除直到括号?

时间:2013-12-08 20:57:55

标签: emacs

我曾经使用M-d删除行中的长子字符串,如:

if ( aaaaa[dddd(d,s,d)] + bbbbbb[ssd] ) {

但是我总是讨厌我需要删除最后一个括号。例如,要删除第一项aaaaa[dddd(d,s,d)],我需要按M-d 4次,C-d按2次。

我想知道,是否有一个命令会删除所有东西,直到一个右括号,对应第一个开括号?

因此,如果您的光标位于dddd(d,s,d),则应删除整个d,如果您从aaaaa[dddd(d,s,d)]开始,则应删除整个a,如果您从if ( aaaaa[dddd(d,s,d)] + bbbbbb[ssd] )开始,则应删除整个M-d C-space M-C-f C-w行的开头。

原则上,一组命令{{1}}将完成这项工作,但我正在寻找一种标准解决方案。

3 个答案:

答案 0 :(得分:3)

尝试M-C-kkill-sexp)或M-z ]zap-to-char)。

答案 1 :(得分:1)

smartparens-modehttps://github.com/Fuco1/smartparens或MELPA)知道如何处理括在各种类型的括号/括号/等中的表达式。它的行为通常是语言特定的。例如,如果你绑定

(define-key sp-keymap (kbd "C-M-k") 'sp-kill-sexp)

然后如果您在表达式中的第一个( C-M-k 将会杀死包括最终)在内的所有内容。或者看看c++ example。我意识到这不是你描述的确切行为,但包有很多(特定于模式)调整配置选项。

作为替代方案,常规zap-up-to-charzap-to-char接受数字参数。我将zap-up-to-char绑定到 M-z ,所以,说 C-u 2 M-z)将所有内容杀死到最终)

答案 2 :(得分:0)

我正在使用this question中的代码 做你描述的任务。

它基本上是一个广义的kill-sexp - 它会杀死它 任何有内在点的列表。也适用于字符串。