aboutsummaryrefslogtreecommitdiffhomepage
path: root/content/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre.xml
diff options
context:
space:
mode:
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.xml68
1 files changed, 34 insertions, 34 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 4e3f187..7e0dd2e 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
@@ -15,69 +15,69 @@
</revision>
</revhistory>
</info>
- <simpara>
+ <para>
この記事は Qiita から移植してきたものです。 元 URL:
<link xl:href="https://qiita.com/nsfisis/items/79ab4db8564032de0b25">https://qiita.com/nsfisis/items/79ab4db8564032de0b25</link>
- </simpara>
- <simpara>
+ </para>
+ <para>
<hr/>
- </simpara>
+ </para>
<section xml:id="tl-dr">
<title>TL; DR</title>
- <simpara>
+ <para>
違いはない。ただのエイリアス。
- </simpara>
+ </para>
</section>
<section xml:id="code-reading">
<title>調査記録</title>
- <simpara>
+ <para>
Vim の autocmd events には似通った名前のものがいくつかある。大抵は
<literal>:help</literal>
に説明があるが、この記事のタイトルにある2つを含めた以下のイベントには、その違いについて説明がない。
- </simpara>
+ </para>
<itemizedlist>
<listitem><literal>BufRead</literal>/<literal>BufReadPost</literal></listitem>
<listitem><literal>BufWrite</literal>/<literal>BufWritePre</literal></listitem>
<listitem><literal>BufAdd</literal>/<literal>BufCreate</literal></listitem>
</itemizedlist>
- <simpara>
+ <para>
このうち、<literal>BufAdd</literal>/<literal>BufCreate</literal> に関しては、<literal>:help BufCreate</literal> に
- </simpara>
+ </para>
<blockquote>
- <simpara>
+ <para>
The BufCreate event is for historic reasons.
- </simpara>
+ </para>
</blockquote>
- <simpara>
+ <para>
とあり、おそらくは <literal>BufAdd</literal>
のエイリアスであろうということがわかる。他の2組も同様ではないかと予想されるが、確認のため
vim と neovim のソースコードを調査した。
- </simpara>
+ </para>
<blockquote>
- <simpara>
+ <para>
ソースコードへのリンク
<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>
+ </para>
</blockquote>
<section xml:id="code-reading--vim">
<title>vim のソースコード</title>
- <simpara>
+ <para>
以下は、autocmd events
の名前と内部で使われている整数値とのマッピングを定義している箇所である。見ての通り、上でエイリアスではないかと述べた3組には、それぞれ同じ内部値が使われている。
- </simpara>
- <simpara>
+ </para>
+ <para>
<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>
+ </para>
<programlisting language="c" linenumbering="unnumbered">
<![CDATA[
{"BufAdd", EVENT_BUFADD},
{"BufCreate", EVENT_BUFADD},
]]>
</programlisting>
- <simpara>
+ <para>
<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>
+ </para>
<programlisting language="c" linenumbering="unnumbered">
<![CDATA[
{"BufRead", EVENT_BUFREADPOST},
@@ -85,9 +85,9 @@
{"BufReadPost", EVENT_BUFREADPOST},
]]>
</programlisting>
- <simpara>
+ <para>
<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>
+ </para>
<programlisting language="c" linenumbering="unnumbered">
<![CDATA[
{"BufWrite", EVENT_BUFWRITEPRE},
@@ -98,13 +98,13 @@
</section>
<section xml:id="code-reading--neovim">
<title>neovim のソースコード</title>
- <simpara>
+ <para>
neovim の場合でも同様のマッピングが定義されているが、こちらの場合は Lua
で書かれている。以下にある通り、はっきり <literal>aliases</literal> と書かれている。
- </simpara>
- <simpara>
+ </para>
+ <para>
<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>
+ </para>
<programlisting language="lua" linenumbering="unnumbered">
<![CDATA[
aliases = {
@@ -115,10 +115,10 @@
},
]]>
</programlisting>
- <simpara>
+ <para>
ところで、上では取り上げなかった <literal>FileEncoding</literal> だが、これは
<literal>:help FileEncoding</literal> にしっかりと書いてある。
- </simpara>
+ </para>
<literallayout class="monospaced">
<![CDATA[
*FileEncoding*
@@ -130,9 +130,9 @@
</section>
<section xml:id="outro">
<title>まとめ</title>
- <simpara>
+ <para>
記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。
- </simpara>
+ </para>
<itemizedlist>
<listitem>
<literal>BufAdd</literal>/<literal>BufCreate</literal>
@@ -159,10 +159,10 @@
</itemizedlist>
</listitem>
</itemizedlist>
- <simpara>
+ <para>
ところでこの調査で知ったのだが、<literal>BufRead</literal> と <literal>BufWrite</literal>
は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら
<literal>Pre</literal>/<literal>Post</literal> 付きのものを使った方が分かりやすいだろう。
- </simpara>
+ </para>
</section>
</article>