From 88ba6cfe220216f371f8756921059fac51a21262 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 23 Dec 2022 23:27:09 +0900 Subject: AsciiDoc to DocBook --- ...ce-between-autocmd-bufwrite-and-bufwritepre.xml | 134 +++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 content/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre.xml (limited to 'content/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre.xml') diff --git a/content/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre.xml b/content/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre.xml new file mode 100644 index 0000000..ed7f03f --- /dev/null +++ b/content/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre.xml @@ -0,0 +1,134 @@ + +
+ + 【Vim】 autocmd events の BufWrite/BufWritePre の違い + + Vim の autocmd events における BufWrite/BufWritePre がどう違うのかを調べた結果、違いはないことがわかった。 + + + vim + + + + 2021-10-02 + Qiita から移植 + + + + この記事は Qiita から移植してきたものです。 元 URL: + https://qiita.com/nsfisis/items/79ab4db8564032de0b25 +
+
+ TL; DR + 違いはない。ただのエイリアス。 +
+
+ 調査記録 + Vim の autocmd events には似通った名前のものがいくつかある。大抵は + :help + に説明があるが、この記事のタイトルにある2つを含めた以下のイベントには、その違いについて説明がない。 + + + BufRead/BufReadPost + + + BufWrite/BufWritePre + + + BufAdd/BufCreate + + +このうち、BufAdd/BufCreate に関しては、:help BufCreate +
+ The BufCreate event is for historic reasons. +
+とあり、おそらくは BufAdd + のエイリアスであろうということがわかる。他の2組も同様ではないかと予想されるが、確認のため + vim と neovim のソースコードを調査した。 +
+ ソースコードへのリンク + vim + (調査時点での master branch) +neovim +(上に同じ) +
+
+ 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 の場合でも同様のマッピングが定義されているが、こちらの場合は 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* +FileEncoding Obsolete. It still works and is equivalent +to |EncodingChanged|. +
+
+ まとめ + 記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。 + + + BufAdd/BufCreate + + + BufCreate は歴史的な理由により (`for historic reasons'') + 存在しているため、新しい方 (`BufAdd) を使う + + + + + BufRead/BufReadPost + + + BufReadPre との対称性のため、あるいは BufWritePost + との対称性のため BufReadPost を使う + + + + + BufWrite/BufWritePre + + + BufWritePost との対称性のため、あるいは BufReadPre + との対称性のため BufWritePre を使う + + + + + FileEncoding/EncodingChanged + + + FileEncoding`Obsolete'' + と明言されているので、`EncodingChanged を使う + + + + +ところでこの調査で知ったのだが、BufReadBufWrite + は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら + Pre/Post 付きのものを使った方が分かりやすいだろう。 +
+
+
-- cgit v1.2.3-70-g09d2