如何在某些emacs函数中摆脱“默认”(上次使用)字符串?


12

我有以下问题:当我使用“ Cx rt”(字符串矩形)时,系统提示我输入一些字符串,以替换选定的矩形。假设我输入“ ;;” (注释掉矩形)。这工作得很好,但是下次我调用相同的函数,并且我想不替换任何内容(空字符串)时,我将无法执行此操作,因为存在“默认”字符串“ ;;”。我以前使用过的命令,如果我刚刚按Enter键,该命令将使用该“ ;;” 字符串而不是空字符串。如何将其设置为空字符串?

我在某些搜索/替换功能中遇到了类似的问题。基本上,当它记住我使用的最后一个字符串并将其设置为默认字符串时,我该如何“输入”空字符串呢?

编辑:

YoungFrog提到的Kill-rectangle解决了特定的问题,但是我想到了另一件事:从根本上讲,在emacs所使用的任何函数中,它都会记住您输入的最后一个值,并在您按回车键时将其用作“默认值”,您应该能够在您首次使用该功能之前将“默认”清除为实际的默认值。这是另一个例子:

在Dired模式下,如果您“ Mx rgrep”,它会要求您输入3个:

1)搜索内容:您在此处输入的内容将在您下次使用rgrep时用作默认设置。正如有人指出的那样,搜索空字符串没有任何意义,因此我猜确实不需要清除此“默认”值。

2)接下来,它将询问要搜索哪些文件。真正的默认设置是“所有”文件。如果我输入* .txt并进行搜索,则下次使用rgrep时,*。txt将用作“默认值”。现在,我希望清除此“默认” * .txt,并返回其原始默认值“ all”,就像我想清除“ ;;”一样。字符串矩形函数中的“默认”为其真正的默认空字符串。

当然,可以通过键入*解决所有文件的特定问题。但是,其他可能记住上次使用值的命令仍然存在潜在的一般问题。

3)接下来将询问基本目录,这里没有问题。

因此,我的观察方式是,每当emacs试图通过记住某个命令中我最后一次使用的值来帮助我时(我发现大部分时间该值非常有用),应该有一种清除该使用过的值的方法,就像我从未使用过那样命令之前。

PS我仍然是emacs的新手,也许不需要我所需的功能,因为总有一些解决方法?


1
我相信这很困难,因为在大多数情况下,在同一函数中不会发生空字符串的默认值的读取和交换。在这种特定情况下,delete-rectangle可以选择。
politza

如果要在选定的矩形中插入空格,可以使用clear rectangle
Kaushal Modi 2015年

如果您只想阻止评论/取消评论,为什么不使用comment-dwim?另外,输入“空”字符串进行搜索没有任何意义,但是您可以为替换部件输入一个空字符串。我很好奇看到更多示例,其中用户可能需要输入一个空字符串。
Kaushal Modi

3
只是快速查看了您的描述,但是听起来命令的设计可能存在问题string-rectangle。只要有空字符串作为可能的输入有意义,就应该有一种输入它的方式,区别于接受默认值。仔细查看该命令的文档(如果愿意,请仔细查看其源代码),以查看此处是否确实存在设计缺陷。如果您认为有,请报告:M-x report-emacs-bug
Drew

对于2),您可以直接输入all,它与稍有不同*:它也匹配.*
npostavs

Answers:


3

不要使用C-x r tstring-rectangle),而应使用C-x r kkill-rectangle)。


1
我只回答了给出的具体示例,因为IMO的一般情况(标题中的问题)不接受(一般)答案。不过,我想提一下C-j(而不是RET)在某些情况下可能会有所帮助,例如ido-mode。
YoungFrog

3

在一般情况下,您想要的东西无法实现。这是因为Emacs中的几种实用程序和模式将其读取完成历史记录存储在不同的变量中,而不是存储在一个位置。您可以手动将这些历史记录变量设置为nilC-x r t例如(setq string-rectangle-history nil)),但不会缩放。在不阅读代码的情况下发现历史变量的名称也不容易。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.