diff options
| author | nsfisis <nsfisis@gmail.com> | 2023-03-19 03:24:43 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2023-03-19 03:24:43 +0900 |
| commit | db3d51ddc421dad68abddb95d01ffdab440197d6 (patch) | |
| tree | 35a6b45bb964b22fa74486596f4e640db82fb0ac /content/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre.xml | |
| parent | cb5a2a0afdf822651db035904cd8c1307a7b7743 (diff) | |
| download | blog.nsfisis.dev-db3d51ddc421dad68abddb95d01ffdab440197d6.tar.gz blog.nsfisis.dev-db3d51ddc421dad68abddb95d01ffdab440197d6.tar.zst blog.nsfisis.dev-db3d51ddc421dad68abddb95d01ffdab440197d6.zip | |
feat(content): specify heading id
Diffstat (limited to 'content/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre.xml')
| -rw-r--r-- | content/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre.xml | 223 |
1 files changed, 111 insertions, 112 deletions
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 index 2a61fb4..4e3f187 100644 --- 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 @@ -22,13 +22,13 @@ <simpara> <hr/> </simpara> - <section xml:id="_tl_dr"> + <section xml:id="tl-dr"> <title>TL; DR</title> <simpara> 違いはない。ただのエイリアス。 </simpara> </section> - <section xml:id="_調査記録"> + <section xml:id="code-reading"> <title>調査記録</title> <simpara> Vim の autocmd events には似通った名前のものがいくつかある。大抵は @@ -56,114 +56,113 @@ <blockquote> <simpara> ソースコードへのリンク - <link xl:href="https://github.com/vim/vim/tree/8e6be34338f13a6a625f19bcef82019c9adc65f2">vim - (調査時点での master branch)</link> - <link xl:href="https://github.com/neovim/neovim/tree/71d4f5851f068eeb432af34850dddda8cc1c71e3">neovim - (上に同じ)</link> - </simpara> -</blockquote> -<section xml:id="_vim_のソースコード"> - <title>vim のソースコード</title> - <simpara> - 以下は、autocmd events - の名前と内部で使われている整数値とのマッピングを定義している箇所である。見ての通り、上でエイリアスではないかと述べた3組には、それぞれ同じ内部値が使われている。 - </simpara> - <simpara> - <link xl:href="https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L85-L86">https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L85-L86</link> - </simpara> - <programlisting language="c" linenumbering="unnumbered"> - <![CDATA[ - {"BufAdd", EVENT_BUFADD}, - {"BufCreate", EVENT_BUFADD}, - ]]> - </programlisting> - <simpara> - <link xl:href="https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L95-L97">https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L95-L97</link> - </simpara> - <programlisting language="c" linenumbering="unnumbered"> - <![CDATA[ - {"BufRead", EVENT_BUFREADPOST}, - {"BufReadCmd", EVENT_BUFREADCMD}, - {"BufReadPost", EVENT_BUFREADPOST}, - ]]> - </programlisting> - <simpara> - <link xl:href="https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L103-L105">https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L103-L105</link> - </simpara> - <programlisting language="c" linenumbering="unnumbered"> - <![CDATA[ - {"BufWrite", EVENT_BUFWRITEPRE}, - {"BufWritePost", EVENT_BUFWRITEPOST}, - {"BufWritePre", EVENT_BUFWRITEPRE}, - ]]> - </programlisting> -</section> -<section xml:id="_neovim_のソースコード"> - <title>neovim のソースコード</title> - <simpara> - neovim の場合でも同様のマッピングが定義されているが、こちらの場合は Lua - で書かれている。以下にある通り、はっきり <literal>aliases</literal> と書かれている。 - </simpara> - <simpara> - <link xl:href="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</link> - </simpara> - <programlisting language="lua" linenumbering="unnumbered"> - <![CDATA[ - aliases = { - BufCreate = 'BufAdd', - BufRead = 'BufReadPost', - BufWrite = 'BufWritePre', - FileEncoding = 'EncodingChanged', - }, - ]]> - </programlisting> - <simpara> - ところで、上では取り上げなかった <literal>FileEncoding</literal> だが、これは - <literal>:help FileEncoding</literal> にしっかりと書いてある。 - </simpara> - <literallayout class="monospaced"> *FileEncoding* - <![CDATA[ - FileEncoding Obsolete. It still works and is equivalent - to |EncodingChanged|. - ]]> -</literallayout> -</section> -<section xml:id="_まとめ"> - <title>まとめ</title> - <simpara> - 記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。 - </simpara> - <itemizedlist> - <listitem> - <literal>BufAdd</literal>/<literal>BufCreate</literal> - <itemizedlist> - <listitem>→ <literal>BufCreate</literal> は歴史的な理由により ("for historic reasons") 存在しているため、新しい方 (<literal>BufAdd</literal>) を使う</listitem> - </itemizedlist> - </listitem> - <listitem> - <literal>BufRead</literal>/<literal>BufReadPost</literal> - <itemizedlist> - <listitem>→ <literal>BufReadPre</literal> との対称性のため、あるいは <literal>BufWritePost</literal> との対称性のため <literal>BufReadPost</literal> を使う</listitem> - </itemizedlist> - </listitem> - <listitem> - <literal>BufWrite</literal>/<literal>BufWritePre</literal> - <itemizedlist> - <listitem>→ <literal>BufWritePost</literal> との対称性のため、あるいは <literal>BufReadPre</literal> との対称性のため <literal>BufWritePre</literal> を使う</listitem> - </itemizedlist> - </listitem> - <listitem> - <literal>FileEncoding</literal>/<literal>EncodingChanged</literal> - <itemizedlist> - <listitem>→ <literal>FileEncoding</literal> は <literal>`Obsolete'' と明言されているので、`EncodingChanged</literal> を使う</listitem> - </itemizedlist> - </listitem> - </itemizedlist> - <simpara> - ところでこの調査で知ったのだが、<literal>BufRead</literal> と <literal>BufWrite</literal> - は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら - <literal>Pre</literal>/<literal>Post</literal> 付きのものを使った方が分かりやすいだろう。 - </simpara> -</section> -</section> + <link xl:href="https://github.com/vim/vim/tree/8e6be34338f13a6a625f19bcef82019c9adc65f2">vim (調査時点での master branch)</link> + <link xl:href="https://github.com/neovim/neovim/tree/71d4f5851f068eeb432af34850dddda8cc1c71e3">neovim (上に同じ)</link> + </simpara> + </blockquote> + <section xml:id="code-reading--vim"> + <title>vim のソースコード</title> + <simpara> + 以下は、autocmd events + の名前と内部で使われている整数値とのマッピングを定義している箇所である。見ての通り、上でエイリアスではないかと述べた3組には、それぞれ同じ内部値が使われている。 + </simpara> + <simpara> + <link xl:href="https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L85-L86">https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L85-L86</link> + </simpara> + <programlisting language="c" linenumbering="unnumbered"> + <![CDATA[ + {"BufAdd", EVENT_BUFADD}, + {"BufCreate", EVENT_BUFADD}, + ]]> + </programlisting> + <simpara> + <link xl:href="https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L95-L97">https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L95-L97</link> + </simpara> + <programlisting language="c" linenumbering="unnumbered"> + <![CDATA[ + {"BufRead", EVENT_BUFREADPOST}, + {"BufReadCmd", EVENT_BUFREADCMD}, + {"BufReadPost", EVENT_BUFREADPOST}, + ]]> + </programlisting> + <simpara> + <link xl:href="https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L103-L105">https://github.com/vim/vim/blob/8e6be34338f13a6a625f19bcef82019c9adc65f2/src/autocmd.c#L103-L105</link> + </simpara> + <programlisting language="c" linenumbering="unnumbered"> + <![CDATA[ + {"BufWrite", EVENT_BUFWRITEPRE}, + {"BufWritePost", EVENT_BUFWRITEPOST}, + {"BufWritePre", EVENT_BUFWRITEPRE}, + ]]> + </programlisting> + </section> + <section xml:id="code-reading--neovim"> + <title>neovim のソースコード</title> + <simpara> + neovim の場合でも同様のマッピングが定義されているが、こちらの場合は Lua + で書かれている。以下にある通り、はっきり <literal>aliases</literal> と書かれている。 + </simpara> + <simpara> + <link xl:href="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</link> + </simpara> + <programlisting language="lua" linenumbering="unnumbered"> + <![CDATA[ + aliases = { + BufCreate = 'BufAdd', + BufRead = 'BufReadPost', + BufWrite = 'BufWritePre', + FileEncoding = 'EncodingChanged', + }, + ]]> + </programlisting> + <simpara> + ところで、上では取り上げなかった <literal>FileEncoding</literal> だが、これは + <literal>:help FileEncoding</literal> にしっかりと書いてある。 + </simpara> + <literallayout class="monospaced"> + <![CDATA[ + *FileEncoding* + FileEncoding Obsolete. It still works and is equivalent + to |EncodingChanged|. + ]]> + </literallayout> + </section> + </section> + <section xml:id="outro"> + <title>まとめ</title> + <simpara> + 記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。 + </simpara> + <itemizedlist> + <listitem> + <literal>BufAdd</literal>/<literal>BufCreate</literal> + <itemizedlist> + <listitem>→ <literal>BufCreate</literal> は歴史的な理由により ("for historic reasons") 存在しているため、新しい方 (<literal>BufAdd</literal>) を使う</listitem> + </itemizedlist> + </listitem> + <listitem> + <literal>BufRead</literal>/<literal>BufReadPost</literal> + <itemizedlist> + <listitem>→ <literal>BufReadPre</literal> との対称性のため、あるいは <literal>BufWritePost</literal> との対称性のため <literal>BufReadPost</literal> を使う</listitem> + </itemizedlist> + </listitem> + <listitem> + <literal>BufWrite</literal>/<literal>BufWritePre</literal> + <itemizedlist> + <listitem>→ <literal>BufWritePost</literal> との対称性のため、あるいは <literal>BufReadPre</literal> との対称性のため <literal>BufWritePre</literal> を使う</listitem> + </itemizedlist> + </listitem> + <listitem> + <literal>FileEncoding</literal>/<literal>EncodingChanged</literal> + <itemizedlist> + <listitem>→ <literal>FileEncoding</literal> は <literal>`Obsolete'' と明言されているので、`EncodingChanged</literal> を使う</listitem> + </itemizedlist> + </listitem> + </itemizedlist> + <simpara> + ところでこの調査で知ったのだが、<literal>BufRead</literal> と <literal>BufWrite</literal> + は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら + <literal>Pre</literal>/<literal>Post</literal> 付きのものを使った方が分かりやすいだろう。 + </simpara> + </section> </article> |
