<afile>はいつ<amatch>と正確に異なりますか?


7

ドキュメントは言います:

<afile>    When executing autocommands, is replaced with the file name
           for a file read or write.
<abuf>     When executing autocommands, is replaced with the currently
           effective buffer number (for ":r file" and ":so file" it is
           the current buffer, the file being read/sourced is not in a
           buffer).
<amatch>   When executing autocommands, is replaced with the match for
           which this autocommand was executed.  It differs from
           <afile> only when the file name isn't used to match with
           (for FileType, Syntax and SpellFileMissing events).

それでも、私がこれを持っていた場合autocmd

autocmd BufNewFile * echo expand('<amatch>') expand('<afile>')

そして開かれた、と言う.zshrcでは/tmpcd /tmp; vim .zshrc)、私が取得します:

/tmp/.zshrc .zshrc

彼らは同じではありません。どうしたの?

%私が実際にタイプしたものに忠実です。上記に追加私を与えます:vim ./.zshrcexpand('%')autocmd

/tmp/.zshrc .zshrc ./.zshrc

違い<afile>はファイル名だけであるのに対し、ファイル<amatch>の完全なパスは違うと思いますか?
nobe4

@ Nobe4はい、それは常にそれが判明する方法です。%しかし、私が実際に言及したことはすべて忠実です。しかし、%ここで信頼できるかどうかはわかりません。:/
muru 2015

入力した場合vim /tmp/.zshrc、それらは同じ文字列です。cwdが/tmp絶対パスと相対パスである場合、それらは同じ文字列ではありませんが、同じパスです。
Martin Tournoij、2015

@Carpetsmoker私は単純にタイプしたvim .zshrc
ムル

エキスパンドでは、:expand('<amatch>') == expand('%:p')expand('<afile>') == expand('%')。どう思いますか ?編集:エディションを見ただけで、expand('<afile>') == expand('%')もう適用されません
nobe4 '

回答:


8

<amatch>正確にautocmdパターンと照合されます。以下のためautocmdのファイル名と一致するS、シンボリックリンクは、結果が正規化され、解決され、そして完全なパスが返されます。

<afile>は、上記の正規のフルパスですが、結果も短縮されます。これは、本質的に同じですfnamemodify(file, ':.')(正確な詳細はより複雑ですが、前述の説明はすべての「通常の」ケースに対して正確です)。

したがって、一般的にはexpand('<afile>') == expand('<amatch>:.')編集:もちろん、同じものを参照していることを前提として)。


はい、そうです。しかし、この答えを裏付けるものはありますか?
muru、2015

3
@muru:つまり、私の見栄えと完璧な笑顔以外に?;)ええ、私はそう思います:<afile>および<amatch>ソース。
佐藤桂

一般に、afileはamatchと同じではありません。これは、autocommandイベントによってかなり異なる可能性があるためです。
クリスチャンブラバンド

2
@ChristianBrabandtはい。質問のポイントは、彼らがすることができますされ、まだのために異なる場合がautocmdS <afile><amatch> します(つまり、ファイルへの)同じこと、マニュアルが暗示に反しを参照してください。私の答えは、それらがその特定のケースでどのようにそしてなぜ異なるのかを説明しています。今はまし?:)
佐藤桂
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.