Các tài liệu nói:
<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).
Tuy nhiên, nếu tôi có điều này autocmd
:
autocmd BufNewFile * echo expand('<amatch>') expand('<afile>')
Và mở ra, nói .zshrc
trong /tmp
( cd /tmp; vim .zshrc
), tôi nhận được:
/tmp/.zshrc .zshrc
Chúng không giống nhau. Chuyện gì đang xảy ra vậy?
%
trung thành với những gì tôi thực sự gõ. vim ./.zshrc
với expand('%')
thêm vào ở trên autocmd
cho tôi:
/tmp/.zshrc .zshrc ./.zshrc
%
, tuy nhiên, trung thành với bất cứ điều gì tôi thực sự đề cập. Nhưng tôi không chắc mình có thể tin tưởng %
ở đây. : /
vim /tmp/.zshrc
chúng là cùng một chuỗi. Nếu cwd của bạn là /tmp
bạn sẽ có một đường dẫn tuyệt đối và một đường dẫn tương đối, và trong khi chúng không phải là cùng một chuỗi, chúng là các đường dẫn giống nhau.
vim .zshrc
expand('<amatch>') == expand('%:p')
và expand('<afile>') == expand('%')
. Bạn nghĩ sao ? Chỉnh sửa: Chỉ cần xem phiên bản của bạn, expand('<afile>') == expand('%')
không áp dụng nữa
<afile>
chỉ là tên tệp trong khi đó<amatch>
là đường dẫn đầy đủ cho tệp không?