我在这里找到了替换filen的函数,但它似乎无法正常工作:http://www.emacswiki.org/emacs/InsertFileName。它正确地找到了文件中的点,但替换似乎将您输入的文件,而不是从我能看到的最初检测到的文件。我不知道如何解决这个问题。替换emacs处的文件
如果我上的/ home/testfile的运行功能
首先,它说,文件替换等等,例如:/家庭/ secondfile 于是说更换一个 '/ home/secondfile' 有:/家庭/ 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"))))
谢谢!是的,它不能正常工作在完整的路径名称上,除非你使用expand-file-name,但正如你所说的用简写的版本替换它。如果它已经被扩展,或者最好只是扩展文件名,如果前缀arg(C-u)被传递给函数,是否有轻易强制扩展它的方法? – 2012-08-06 22:46:31