gpt4 book ai didi

emacs - 在emacs中的点替换文件

转载 作者:行者123 更新时间:2023-12-02 03:57:49 25 4
gpt4 key购买 nike

我在这里找到了替换filen的函数,但似乎无法正常工作:http://www.emacswiki.org/emacs/InsertFileName。它可以正确找到指向的文件,但是替换似乎是采用您输入的文件,而不是我所看到的最初检测到的文件。我不确定如何解决此问题。

如果我在/ home / testfile上运行该功能

首先,它说要替换的文件,例如:/ home / secondfile
然后说“/ home / secondfile”替换为:/ home / secondfile
然后它说:此时没有文件

有任何想法吗??

这是函数:

(autoload 'ffap-guesser "ffap")
(autoload 'ffap-read-file-or-url "ffap")

(defun my-replace-file-at-point (currfile newfile)
"Replace CURRFILE at point with NEWFILE.

When interactive, CURRFILE will need to be confirmed by user
and will need to exist on the file system to be recognized,
unless it is a URL.

NEWFILE does not need to exist. However, Emacs's minibuffer
completion can help if it needs to be.
"

(interactive
(let ((currfile (ffap-read-file-or-url "Replace filename: "
(ffap-guesser))))
(list currfile
(ffap-read-file-or-url (format "Replace `%s' with: "
currfile) currfile))))
(save-match-data
(if (or (looking-at (regexp-quote currfile))
(let ((filelen (length currfile))
(opoint (point))
(limit (+ (point) (length currfile))))
(save-excursion
(goto-char (1- filelen))
(and (search-forward currfile limit
'noerror)
(< (match-beginning 0) opoint))
(>= (match-end 0) opoint))))
(replace-match newfile)
(error "No file at point to replace"))))

最佳答案

这里可能有一些错误/正在进行的事情。首先是执行此操作时的点位置。第二个是,如果您使用的是/ home / user / something,则很有可能在/ home / user / something和〜/ something之间不匹配(ffap返回后者,而此时您可能已经编写了前任的)。

首先:

looking-at与正则表达式引用的文件名一起使用时,期望该点位于开头:例如|/home/user/something

它的伙伴looking-back期望/home/user/something|。在中间某处将引发此错误。

一种快速解决方案可以将looking-at更改为thing-at-point-looking-at

第二个:

如果您编写了/ home / user / something,ffap函数(在我的情况下)使用〜来缩短它。
可能有一些设置可以控制此设置,但是我知道最简单,快速的解决方案是使用expand-file-name。这将处理第一种情况,如果将其写为〜/ something,则save-excursion主体将在另一种情况下替换它。

我看到的唯一负面结果是,您有时可能会替换:

/home/user/something~/somethingelse
但是,无论如何,这两个快速修复只会导致这一完整的更改:
(thing-at-point-looking-at (regexp-quote (expand-file-name currfile)))

关于emacs - 在emacs中的点替换文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com