通过选择一个单词,在Emacs中设置替换字符串的默认值
我使用这样的函数来替换Emacs中的字符串通过选择一个单词,在Emacs中设置替换字符串的默认值,emacs,replace,Emacs,Replace,我使用这样的函数来替换Emacs中的字符串 (defun replace-string-from-top () (interactive) (save-excursion (beginning-of-buffer) (call-interactively 'replace-string))) (global-set-key "\C-r" 'replace-string-from-top) 我想通过选择一个单词来使用replace string函数的默认值 我想做的是 通
(defun replace-string-from-top ()
(interactive)
(save-excursion
(beginning-of-buffer)
(call-interactively 'replace-string)))
(global-set-key "\C-r" 'replace-string-from-top)
我想通过选择一个单词来使用replace string函数的默认值
我想做的是
通过双击选择一个单词。
使用默认值选择的单词从顶部调用replace string函数。
我试过写这个函数,但是写不出来
如何操作?无论是替换字符串还是交互调用时用于读取其参数的函数(即query replace read args),都没有以动态方式以编程方式提供默认值的规定。您最多只能设置变量查询替换默认值。您可以将该变量绑定到命令中的值,以便其列表值中的第一个元素是区域中的字符串,即:
(let* ((region-string (buffer-substring (region-beginning) (region-end))))
(query-replace-defaults (cons region-string region-string)))
...)
该值是一个cons。使用您喜欢的任何其他值作为cdr。这里我刚刚使用了相同的区域字符串
但若你们使用这个库,你们可以更容易、更直接地做你们想做的事情。在这种情况下,只需将选项search/replace region作为默认标志设置为non-nil即可获得所需的内容。您也可以随时切换该选项,使用命令toggle search/replace region作为默认值。该库的描述如下。这是我的设置。若需要,可以在一些地方更改它,比如添加缓冲区的开头
(defvar qr-beg)
(defun string-dwim ()
(let ((bounds
(if (region-active-p)
(cons (region-beginning)
(region-end))
(ignore-errors
(bounds-of-thing-at-point 'symbol)))))
(setq qr-beg (car bounds))
(when (region-active-p)
(set-mark nil))
(when qr-beg
(kill-new
(buffer-substring-no-properties
qr-beg
(cdr bounds))))))
(defun query-replace-dwim (from)
(interactive
(list
(read-regexp "Query replace" (string-dwim))))
(when qr-beg
(goto-char qr-beg)
(setq qr-beg))
(query-replace
from
(query-replace-read-to from "Query replace" nil)))
如您所见,这是查询替换的设置。
它自动建议将要替换的对象作为当前字符串。
当前字符串可以是当前区域(如果它处于活动状态),也可以是点处的符号。
另外,当前字符串是kill newed,因此您可以将其作为替换,
然后稍微调整一下。谢谢你的提示!我将使用replace+.el',但这并不像我预期的那样有效。安装后,我在init文件中输入require'replace+setq search/replace region作为默认标志t`并对其求值,然后选择一个单词并调用函数query-replace-w-option,但默认值为空。我做错了什么?空是什么意思?默认情况下,微缓冲区中没有任何内容-这将是初始值,而不是默认值。要获得默认值,您可以像在Emacs中一样使用M-n。如果在使用M-n后没有在minibuffer中获取所选文本,那么这是一个错误-请告诉我。我误解了“初始值”和“默认值”这两个词。我想要的是在不输入M-n的情况下设置初始值。我用这个词的首字母搜索过,但找不到任何信息。如何设置初始值?Emacs Dev不鼓励使用初始值。但是,在query replace read from的replace+.el定义中,您可以使用default而不是nil替换第5个参数以完成读取,以及第2个参数以从minibuffer读取,以获得所需的效果。或者,您可以使用并自定义选项icicle default value,使默认值始终用作初始值,即插入到迷你缓冲区中。例如,我自己做的。谢谢你的建议!我花了30分钟才用上冰柱,但没用。我已经从这里进行了git克隆并加载它,然后将我的init文件require'iciclessetq icicle default value t setq ICICCLE default置于提示符格式函数t中。我正在读一个维基页面EmacsWiki:冰柱-定制和一般提示