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

おそらくここで間違っている/起こっていることがいくつかあります。1つ目は、これを実行するときのポイント位置です。2つ目は、/ home / user / somethingを使用している場合、/ home / user / somethingと〜/ somethingの間に不一致がある可能性が高いことです(ffapは後者を返しますが、前者)。

初め:

正規表現で引用されたファイル名でを使用するlooking-atと、ポイントが先頭にあることが期待されます|/home/user/something

そのパートナーは、looking-back期待して/home/user/something|います。途中にいると、このエラーがスローされます。

これに対する簡単な修正の1つは、に変更looking-atすることthing-at-point-looking-atです。

2番:

/ home / user / somethingを記述した場合、ffap関数(私の場合)は〜を使用してこれを短縮します。これを管理する設定はおそらくいくつかありますが、私が知っている最も簡単で迅速な修正は、を使用することexpand-file-nameです。これで最初のケースが処理され、〜/ somethingと記述されているsave-excursion場合は、別のケースで本体が置き換えられます。

私が見る唯一の否定的な結果は、あなたが時々置き換えるかもしれないということです:

/home/user/something~/somethingelse

しかし、とにかく、これらの2つの簡単な修正は、この完全な変更をもたらすだけです。

(thing-at-point-looking-at (regexp-quote (expand-file-name currfile)))

于 2012-08-06T10:40:33.520 に答える
0

「ffap-guesser」がどこで定義されているかわかりません。バグのようです。

多分代わりに試してみてください

「find-file-at-point」

于 2012-08-04T06:48:20.623 に答える