From 4f46d262e6967c9c638b40f3b0246d21b7a9b9dc Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 9 Apr 2025 20:29:15 +0900 Subject: feat(blog/nuldoc): rebuild --- .../index.html | 105 +++++++++------------ 1 file changed, 47 insertions(+), 58 deletions(-) (limited to 'vhosts/blog/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html') diff --git a/vhosts/blog/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html b/vhosts/blog/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html index ddf70cae..fa0553d5 100644 --- a/vhosts/blog/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html +++ b/vhosts/blog/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html @@ -62,103 +62,92 @@ NOTE
- この記事は Qiita から移植してきたものです。元 URL: https://qiita.com/nsfisis/items/79ab4db8564032de0b25 +

+ この記事は Qiita から移植してきたものです。 元 URL: https://qiita.com/nsfisis/items/79ab4db8564032de0b25 +

-
-

TL; DR

+

TL; DR

- 違いはない。ただのエイリアス。 + 違いはない。ただのエイリアス。

-
-

調査記録

+

調査記録

- Vim の autocmd events には似通った名前のものがいくつかある。大抵は :help に説明があるが、この記事のタイトルにある2つを含めた以下のイベントには、その違いについて説明がない。 + Vim の autocmd events には似通った名前のものがいくつかある。大抵は :help に説明があるが、この記事のタイトルにある2つを含めた以下のイベントには、その違いについて説明がない。

- -

- このうち、BufAdd/BufCreate に関しては、:help BufCreate に + このうち、BufAdd/BufCreate に関しては、:help BufCreate

-

- The BufCreate event is for historic reasons. + The BufCreate event is for historic reasons.

-

- とあり、おそらくは BufAdd のエイリアスであろうということがわかる。他の2組も同様ではないかと予想されるが、確認のため vim と neovim のソースコードを調査した。 + とあり、おそらくは BufAdd のエイリアスであろうということがわかる。他の2組も同様ではないかと予想されるが、確認のため vim と neovim のソースコードを調査した。

- -
-

- ソースコードへのリンク vim (調査時点での master branch) neovim (上に同じ) -

-
- +

+ ソースコードへのリンク +

+
-

vim のソースコード

+

vim のソースコード

- 以下は、autocmd events の名前と内部で使われている整数値とのマッピングを定義している箇所である。見ての通り、上でエイリアスではないかと述べた3組には、それぞれ同じ内部値が使われている。 + 以下は、autocmd events の名前と内部で使われている整数値とのマッピングを定義している箇所である。見ての通り、上でエイリアスではないかと述べた3組には、それぞれ同じ内部値が使われている。

-

- https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L85-L86 + https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L85-L86

-
{"BufAdd",      EVENT_BUFADD},
 {"BufCreate",   EVENT_BUFADD},
-

- https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L95-L97 + https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L95-L97

-
{"BufRead",     EVENT_BUFREADPOST},
 {"BufReadCmd",  EVENT_BUFREADCMD},
 {"BufReadPost", EVENT_BUFREADPOST},
-

- https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L103-L105 + https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L103-L105

-
{"BufWrite",    EVENT_BUFWRITEPRE},
 {"BufWritePost",    EVENT_BUFWRITEPOST},
 {"BufWritePre", EVENT_BUFWRITEPRE},
-
-

neovim のソースコード

+

neovim のソースコード

- neovim の場合でも同様のマッピングが定義されているが、こちらの場合は Lua で書かれている。以下にある通り、はっきり aliases と書かれている。 + neovim の場合でも同様のマッピングが定義されているが、こちらの場合は Lua で書かれている。以下にある通り、はっきり aliases と書かれている。

-

- https://github.com/neovim/neovim/blob/71d4f5851f068eeb432af34850dddda8cc1c71e3/src/nvim/auevents.lua#L119-L124 + https://github.com/neovim/neovim/blob/71d4f5851f068eeb432af34850dddda8cc1c71e3/src/nvim/auevents.lua#L119-L124

-
aliases = {
   BufCreate = 'BufAdd',
@@ -167,11 +156,9 @@
   FileEncoding = 'EncodingChanged',
 },
-

- ところで、上では取り上げなかった FileEncoding だが、これは :help FileEncoding にしっかりと書いてある。 + ところで、上では取り上げなかった FileEncoding だが、これは :help FileEncoding にしっかりと書いてある。

-
                                                              *FileEncoding*
 FileEncoding                    Obsolete.  It still works and is equivalent
@@ -179,53 +166,55 @@
               
-
-

まとめ

+

まとめ

- 記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。 + 記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。

-
  • - BufAdd/BufCreate +

    + BufAdd/BufCreate +

    • - → BufCreate は歴史的な理由により ("for historic reasons") 存在しているため、新しい方 (BufAdd) を使う + → BufCreate は歴史的な理由により (“for historic reasons”) 存在しているため、新しい方 (BufAdd) を使う
  • -
  • - BufRead/BufReadPost +

    + BufRead/BufReadPost +

    • BufReadPre との対称性のため、あるいは BufWritePost との対称性のため BufReadPost を使う
  • -
  • - BufWrite/BufWritePre +

    + BufWrite/BufWritePre +

    • BufWritePost との対称性のため、あるいは BufReadPre との対称性のため BufWritePre を使う
  • -
  • - FileEncoding/EncodingChanged +

    + FileEncoding/EncodingChanged +

    • - → FileEncoding`Obsolete'' と明言されているので、`EncodingChanged を使う + → FileEncoding は “Obsolete” と明言されているので、EncodingChanged を使う
-

- ところでこの調査で知ったのだが、BufReadBufWrite は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら Pre/Post 付きのものを使った方が分かりやすいだろう。 + ところでこの調査で知ったのだが、BufReadBufWrite は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら Pre/Post 付きのものを使った方が分かりやすいだろう。

-- cgit v1.2.3-70-g09d2