From 7f15e0b8277ac8b101b4f71ce57c1c5442927141 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 18 Mar 2023 19:51:06 +0900 Subject: fix(nuldoc): fix whitespaces being trimmed --- .../index.html | 98 +++++++++++----------- 1 file changed, 49 insertions(+), 49 deletions(-) (limited to 'public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html') diff --git a/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html b/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html index a878638..3c6342b 100644 --- a/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html +++ b/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html @@ -54,163 +54,163 @@

- この記事は 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.

- +

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

- +

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

- +
-

vim のソースコード

+

vim のソースコード

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

- +

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

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

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

- +
  aliases = {
 BufCreate = 'BufAdd',
 BufRead = 'BufReadPost',
 BufWrite = 'BufWritePre',
 FileEncoding = 'EncodingChanged',
 },
- +

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

- +
                                                           *FileEncoding*
 FileEncoding                    Obsolete.  It still works and is equivalent
 to |EncodingChanged|.
- +
-

まとめ

+

まとめ

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

- +
  • - BufAdd/BufCreate + BufAdd/BufCreate
    • - →BufCreateは歴史的な理由により ("for historic reasons") 存在しているため、新しい方 (BufAdd) を使う + → BufCreate は歴史的な理由により ("for historic reasons") 存在しているため、新しい方 (BufAdd) を使う
  • - +
  • - BufRead/BufReadPost + BufRead/BufReadPost
    • - →BufReadPreとの対称性のため、あるいはBufWritePostとの対称性のためBufReadPostを使う + → BufReadPre との対称性のため、あるいは BufWritePost との対称性のため BufReadPost を使う
  • - +
  • - BufWrite/BufWritePre + BufWrite/BufWritePre
    • - →BufWritePostとの対称性のため、あるいはBufReadPreとの対称性のため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