3

我在这里找到了替换 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"))))
4

2 回答 2

1

这里可能有一些错误/正在发生的事情。第一个是执行此操作时的点位置。第二个是,如果您使用的是 /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)))

于 2012-08-06T10:40:33.520 回答
0

看不到“ffap-guesser”的定义位置。看起来像一个错误。

也许试试

“查找文件点”

于 2012-08-04T06:48:20.623 回答