diff options
Diffstat (limited to 'public/posts/2021-10-02')
4 files changed, 97 insertions, 97 deletions
diff --git a/public/posts/2021-10-02/ruby-then-keyword-and-case-in/index.html b/public/posts/2021-10-02/ruby-then-keyword-and-case-in/index.html index 097d417..ba31a99 100644 --- a/public/posts/2021-10-02/ruby-then-keyword-and-case-in/index.html +++ b/public/posts/2021-10-02/ruby-then-keyword-and-case-in/index.html @@ -65,15 +65,15 @@ </hr> </p> - <section id="section--_tl_dr"> - <h2><a href="#section--_tl_dr">TL; DR</a></h2> + <section id="section--tl-dr"> + <h2><a href="#section--tl-dr">TL; DR</a></h2> <p> <code>case</code> - <code>in</code> によるパターンマッチング構文でも、<code>case</code> - <code>when</code> と同じように <code>then</code> が使える (場合によっては使う必要がある)。 </p> </section> - <section id="section--_then_とは"> - <h2><a href="#section--_then_とは"><code>then</code> とは</a></h2> + <section id="section--what-is-then-keyword"> + <h2><a href="#section--what-is-then-keyword"><code>then</code> とは</a></h2> <p> 使われることは稀だが、Ruby では <code>then</code> がキーワードになっている。次のように使う: </p> @@ -110,8 +110,8 @@ <span class="hljs-keyword">end</span></code></pre> </section> - <section id="section--_なぜ普段は書かなくてもよいのか"> - <h2><a href="#section--_なぜ普段は書かなくてもよいのか">なぜ普段は書かなくてもよいのか</a></h2> + <section id="section--why-then-is-usually-unnecessary"> + <h2><a href="#section--why-then-is-usually-unnecessary">なぜ普段は書かなくてもよいのか</a></h2> <p> 普通 Ruby のコードで <code>then</code> を書くことはない。なぜか。次のコードを実行してみるとわかる。 </p> @@ -144,8 +144,8 @@ puts <span class="hljs-string">'Hello, World!'</span> <span class="hlj </p> </section> - <section id="section--_なぜ_then_や_や改行が必要か"> - <h2><a href="#section--_なぜ_then_や_や改行が必要か">なぜ <code>then</code> や <code>;</code> や改行が必要か</a></h2> + <section id="section--why-then-or-linebreak-is-needed"> + <h2><a href="#section--why-then-or-linebreak-is-needed">なぜ <code>then</code> や <code>;</code> や改行が必要か</a></h2> <p> なぜ <code>then</code> や <code>;</code> や改行 (以下 「<code>then</code> 等」) が必要なのだろうか。次の例を見てほしい: </p> @@ -175,8 +175,8 @@ b </p> </section> - <section id="section--_case_in_における_then"> - <h2><a href="#section--_case_in_における_then"><code>case</code> - <code>in</code> における <code>then</code></a></h2> + <section id="section--then-in-case-in"> + <h2><a href="#section--then-in-case-in"><code>case</code> - <code>in</code> における <code>then</code></a></h2> <p> ようやく本題にたどり着いた。来る Ruby 3.0 では <code>case</code> と <code>in</code> キーワードを使ったパターンマッチングの構文が入る予定である。この構文でもパターン部との区切りとして <code>then</code> 等が必要になる。 (現在の) Ruby には formal な形式での文法仕様は存在しないので、yacc の定義ファイルを参照した (yacc の説明は省略)。 </p> @@ -259,8 +259,8 @@ p_cases <span class="hljs-keyword">end</span></code></pre> </section> - <section id="section--_まとめ"> - <h2><a href="#section--_まとめ">まとめ</a></h2> + <section id="section--outro"> + <h2><a href="#section--outro">まとめ</a></h2> <ul> <li> <code>if</code> や <code>case</code> の条件の後ろには <code>then</code>、<code>;</code>、改行のいずれかが必要 diff --git a/public/posts/2021-10-02/rust-where-are-primitive-types-from/index.html b/public/posts/2021-10-02/rust-where-are-primitive-types-from/index.html index 9e77a85..8c6e269 100644 --- a/public/posts/2021-10-02/rust-where-are-primitive-types-from/index.html +++ b/public/posts/2021-10-02/rust-where-are-primitive-types-from/index.html @@ -62,8 +62,8 @@ </hr> </p> - <section id="section--_前置き"> - <h2><a href="#section--_前置き">前置き</a></h2> + <section id="section--intro"> + <h2><a href="#section--intro">前置き</a></h2> <p> Rust において、プリミティブ型の名前は予約語でない。したがって、次のコードは合法である。 </p> @@ -100,8 +100,8 @@ </blockquote> </section> - <section id="section--_調査"> - <h2><a href="#section--_調査">調査</a></h2> + <section id="section--code-reading"> + <h2><a href="#section--code-reading">調査</a></h2> <p> 調査に使用したソース (調査時点での最新 master) </p> @@ -242,8 +242,8 @@ rustc_resolve/src/lib.rs: table.insert(sym::i128, Int(IntTy::I128)); </p> </section> - <section id="section--_まとめ"> - <h2><a href="#section--_まとめ">まとめ</a></h2> + <section id="section--outro"> + <h2><a href="#section--outro">まとめ</a></h2> <p> Rust のプリミティブ型は予約語ではない。名前解決の最終段階で特別扱いされ、他に同名の型が見つかっていなければ対応するプリミティブ型に解決される。 </p> 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 44ee689..b9455f7 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 @@ -62,15 +62,15 @@ </hr> </p> - <section id="section--_tl_dr"> - <h2><a href="#section--_tl_dr">TL; DR</a></h2> + <section id="section--tl-dr"> + <h2><a href="#section--tl-dr">TL; DR</a></h2> <p> 違いはない。ただのエイリアス。 </p> </section> - <section id="section--_調査記録"> - <h2><a href="#section--_調査記録">調査記録</a></h2> + <section id="section--code-reading"> + <h2><a href="#section--code-reading">調査記録</a></h2> <p> Vim の autocmd events には似通った名前のものがいくつかある。大抵は <code>:help</code> に説明があるが、この記事のタイトルにある2つを含めた以下のイベントには、その違いについて説明がない。 </p> @@ -109,8 +109,8 @@ </p> </blockquote> - <section id="section--_vim_のソースコード"> - <h3><a href="#section--_vim_のソースコード">vim のソースコード</a></h3> + <section id="section--code-reading--vim"> + <h3><a href="#section--code-reading--vim">vim のソースコード</a></h3> <p> 以下は、autocmd events の名前と内部で使われている整数値とのマッピングを定義している箇所である。見ての通り、上でエイリアスではないかと述べた3組には、それぞれ同じ内部値が使われている。 </p> @@ -139,8 +139,8 @@ {<span class="hljs-string">"BufWritePre"</span>, EVENT_BUFWRITEPRE},</code></pre> </section> - <section id="section--_neovim_のソースコード"> - <h3><a href="#section--_neovim_のソースコード">neovim のソースコード</a></h3> + <section id="section--code-reading--neovim"> + <h3><a href="#section--code-reading--neovim">neovim のソースコード</a></h3> <p> neovim の場合でも同様のマッピングが定義されているが、こちらの場合は Lua で書かれている。以下にある通り、はっきり <code>aliases</code> と書かれている。 </p> @@ -160,59 +160,59 @@ FileEncoding = <span class="hljs-string">'EncodingChanged'</span>, ところで、上では取り上げなかった <code>FileEncoding</code> だが、これは <code>:help FileEncoding</code> にしっかりと書いてある。 </p> - <pre class="highlight monospaced"><code> *FileEncoding* - FileEncoding Obsolete. It still works and is equivalent + <pre class="highlight monospaced"><code> *FileEncoding* +FileEncoding Obsolete. It still works and is equivalent to |EncodingChanged|.</code></pre> </section> + </section> + + <section id="section--outro"> + <h2><a href="#section--outro">まとめ</a></h2> + <p> + 記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。 + </p> - <section id="section--_まとめ"> - <h3><a href="#section--_まとめ">まとめ</a></h3> - <p> - 記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。 - </p> + <ul> + <li> + <code>BufAdd</code>/<code>BufCreate</code> + <ul> + <li> + → <code>BufCreate</code> は歴史的な理由により ("for historic reasons") 存在しているため、新しい方 (<code>BufAdd</code>) を使う + </li> + </ul> + </li> - <ul> - <li> - <code>BufAdd</code>/<code>BufCreate</code> - <ul> - <li> - → <code>BufCreate</code> は歴史的な理由により ("for historic reasons") 存在しているため、新しい方 (<code>BufAdd</code>) を使う - </li> - </ul> - </li> - - <li> - <code>BufRead</code>/<code>BufReadPost</code> - <ul> - <li> - → <code>BufReadPre</code> との対称性のため、あるいは <code>BufWritePost</code> との対称性のため <code>BufReadPost</code> を使う - </li> - </ul> - </li> - - <li> - <code>BufWrite</code>/<code>BufWritePre</code> - <ul> - <li> - → <code>BufWritePost</code> との対称性のため、あるいは <code>BufReadPre</code> との対称性のため <code>BufWritePre</code> を使う - </li> - </ul> - </li> - - <li> - <code>FileEncoding</code>/<code>EncodingChanged</code> - <ul> - <li> - → <code>FileEncoding</code> は <code>`Obsolete'' と明言されているので、`EncodingChanged</code> を使う - </li> - </ul> - </li> - </ul> + <li> + <code>BufRead</code>/<code>BufReadPost</code> + <ul> + <li> + → <code>BufReadPre</code> との対称性のため、あるいは <code>BufWritePost</code> との対称性のため <code>BufReadPost</code> を使う + </li> + </ul> + </li> - <p> - ところでこの調査で知ったのだが、<code>BufRead</code> と <code>BufWrite</code> は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら <code>Pre</code>/<code>Post</code> 付きのものを使った方が分かりやすいだろう。 - </p> - </section> + <li> + <code>BufWrite</code>/<code>BufWritePre</code> + <ul> + <li> + → <code>BufWritePost</code> との対称性のため、あるいは <code>BufReadPre</code> との対称性のため <code>BufWritePre</code> を使う + </li> + </ul> + </li> + + <li> + <code>FileEncoding</code>/<code>EncodingChanged</code> + <ul> + <li> + → <code>FileEncoding</code> は <code>`Obsolete'' と明言されているので、`EncodingChanged</code> を使う + </li> + </ul> + </li> + </ul> + + <p> + ところでこの調査で知ったのだが、<code>BufRead</code> と <code>BufWrite</code> は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら <code>Pre</code>/<code>Post</code> 付きのものを使った方が分かりやすいだろう。 + </p> </section> </div> </article> diff --git a/public/posts/2021-10-02/vim-swap-order-of-selected-lines/index.html b/public/posts/2021-10-02/vim-swap-order-of-selected-lines/index.html index 6b9e423..320e80e 100644 --- a/public/posts/2021-10-02/vim-swap-order-of-selected-lines/index.html +++ b/public/posts/2021-10-02/vim-swap-order-of-selected-lines/index.html @@ -62,8 +62,17 @@ </hr> </p> - <section id="section--_バージョン情報"> - <h2><a href="#section--_バージョン情報">バージョン情報</a></h2> + <section id="section--tl-dr"> + <h2><a href="#section--tl-dr">TL; DR</a></h2> + <pre class="highlight" language="vim" linenumbering="unnumbered"><code class="highlight"><span class="hljs-comment">" License: Public Domain</span> + +command! -bar -<span class="hljs-built_in">range</span>=% + \ Reverse + \ keeppatterns <span class="hljs-symbol"><line1></span>,<span class="hljs-symbol"><line2></span>g/^/<span class="hljs-keyword">m</span><span class="hljs-symbol"><line1></span>-<span class="hljs-number">1</span></code></pre> + </section> + + <section id="section--version"> + <h2><a href="#section--version">バージョン情報</a></h2> <p> <code>:version</code> の一部 </p> @@ -75,10 +84,10 @@ </blockquote> </section> - <section id="section--_よく紹介されている手法"> - <h2><a href="#section--_よく紹介されている手法">よく紹介されている手法</a></h2> - <section id="section--_tac_tail"> - <h3><a href="#section--_tac_tail"><code>tac</code> / <code>tail</code></a></h3> + <section id="section--existing-solution"> + <h2><a href="#section--existing-solution">よく紹介されている手法</a></h2> + <section id="section--existing-solution--external-commands"> + <h3><a href="#section--existing-solution--external-commands"><code>tac</code> / <code>tail</code></a></h3> <p> <code>tac</code> や <code>tail -r</code> などの外部コマンドを <code>!</code> を使って呼び出し、置き換える。 </p> @@ -94,8 +103,8 @@ </p> </section> - <section id="section--_gm0"> - <h3><a href="#section--_gm0"><code>:g/^/m0</code></a></h3> + <section id="section--existing-solution--global-command"> + <h3><a href="#section--existing-solution--global-command"><code>:g/^/m0</code></a></h3> <p> こちらは外部コマンドに頼らず、Vim の機能のみを使う。<code>g</code> は <code>:global</code> コマンドの、<code>m</code> は <code>:move</code> コマンドの略 </p> @@ -138,8 +147,8 @@ </section> </section> - <section id="section--_gm0_の問題点"> - <h2><a href="#section--_gm0_の問題点"><code>:g/^/m0</code> の問題点</a></h2> + <section id="section--problem-of-global-command"> + <h2><a href="#section--problem-of-global-command"><code>:g/^/m0</code> の問題点</a></h2> <p> <code>:global</code> コマンドは各行に対してマッチングを行う際、現在の検索パターンを上書きしてしまう。<code>^</code> は行の先頭にマッチするため、結果として全ての行がハイライトされてしまう。<code>'hlsearch'</code> オプションを無効にしている場合その限りではないが、その場合でも直前の検索パターンが失われてしまうと <code>n</code> コマンドなどの際に不便である。 </p> @@ -151,8 +160,8 @@ </blockquote> </section> - <section id="section--_解決策"> - <h2><a href="#section--_解決策">解決策</a></h2> + <section id="section--solution"> + <h2><a href="#section--solution">解決策</a></h2> <blockquote> <p> [2020/9/28追記] より簡潔な方法を見つけたので次節に追記した @@ -212,8 +221,8 @@ command! -bar -<span class="hljs-built_in">range</span>=% </p> </section> - <section id="section--_解決策_改訂版"> - <h2><a href="#section--_解決策_改訂版">解決策 (改訂版)</a></h2> + <section id="section--solution-revised"> + <h2><a href="#section--solution-revised">解決策 (改訂版)</a></h2> <blockquote> <p> [2020/9/28追記] より簡潔な方法を見つけたため追記する @@ -234,15 +243,6 @@ command! -bar -<span class="hljs-built_in">range</span>=% </p> </blockquote> </section> - - <section id="section--_コピペ用再掲"> - <h2><a href="#section--_コピペ用再掲">コピペ用再掲</a></h2> - <pre class="highlight" language="vim" linenumbering="unnumbered"><code class="highlight"><span class="hljs-comment">" License: Public Domain</span> - -command! -bar -<span class="hljs-built_in">range</span>=% - \ Reverse - \ keeppatterns <span class="hljs-symbol"><line1></span>,<span class="hljs-symbol"><line2></span>g/^/<span class="hljs-keyword">m</span><span class="hljs-symbol"><line1></span>-<span class="hljs-number">1</span></code></pre> - </section> </div> </article> </main> |
