# 🏆MVP
## Vim駅伝投稿 『AutoHotkeyが織りなすNeovimの魅力』
[[Vim駅伝]]に4回目の投稿をした。
<div class="link-card">
<div class="link-card-header">
<img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" class="link-card-site-icon"/>
<span class="link-card-site-name">minerva.mamansoft.net</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">📘AutoHotkeyが織りなすNeovimの魅力</p>
<p class="link-card-description">AutoHotkeyでNeovimの魅力を一層引き出し、高みを目指す3つの方法を紹介します。</p>
</div>
<img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-07-17.webp" class="link-card-image" />
</div>
<a class="internal-link" data-href="📘Articles/📘AutoHotkeyが織りなすNeovimの魅力.md"></a>
</div>
%%[[📘AutoHotkeyが織りなすNeovimの魅力]]%%
自分で言うのもなんだけど、結構コアなテーマだと思う。ただ、[[Vim]]をメインで使うにおいて、キータイプの人的コストを下げること非常に大事なポイントだと思うので、[[AutoHotkey]]を使ってどのように最適化しているかをまとめてみた。前々から脳内にはありつつも、言語化が面倒でサボっていた部分だったので、この機会に具現化できたことは個人的に満足している。
もちろん、本記事では紹介しきれなかった[[AutoHotkey]]の設定や戦略も多数存在するが、あまり長くなると焦点がずれてしまうため敢えて3つに絞らせてもらった。
# 🥈RUP
## 8年ぶりにMarpでLT資料をつくった
2016年頃、[[Marp]]が[[𝕏|Twitter]]でバズっていたことがあり、そのときに一度利用したことがあった。だが、当時は少し使ったあと、同様の別ツールなども色々試して結局使わなくなってしまった。なんだかんだ言って[[Google Slides]]の方が直感的で自由で早いという結論に至ったのである。
時は2024年。明日は職場で主催する初のVim LT。まだ資料は何も作っていない...ときたものだ。『せっかくなら[[Neovim]]でプレゼンしたい』... とも思ったが流石にターミナルの表現には限界がある。
**『ならばせめてプレゼンテーションの作成だけでも...』**
ということで8年ぶりに[[Marp]]を使ってみることにした。
<div class="link-card">
<div class="link-card-header">
<img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" class="link-card-site-icon"/>
<span class="link-card-site-name">minerva.mamansoft.net</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">📜2024-07-21 Marp CLIでVim LTのプレゼンテーションを作成してみる</p>
<p class="link-card-description">Markdownからスライド作成するツールを試してみることにした。</p>
</div>
<img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" class="link-card-image" />
</div>
<a class="internal-link" data-href="Notes/📜2024-07-21 Marp CLIでVim LTのプレゼンテーションを作成してみる.md"></a>
</div>
%%[[📜2024-07-21 Marp CLIでVim LTのプレゼンテーションを作成してみる]]%%
上記の[[ノート]]にはあまり仔細を書いていないが、[[Marp CLI]]を使って `marp -s . --html` コマンドを実行するだけで、[[Neovim]]を使って[[Markdown]]を編集すればホットリロードでプレビューが見えるという体験は非常に素晴らしかった。
また、8年前と比べて、自身のフロントエンドスキル... 特に[[CSS]]周りが進化していることも大きい。世の中的にも[[Tailwind CSS]]が誕生しており、[[Marp]]でも[[Tailwind CSSを利用 (Marp)|Tailwind CSSを利用]]することができる。Web開発で培った[[Tailwind CSS]]の知識が[[Marp]]でのスライド作成にも活かせるし、逆に[[Marp]]で培った[[Tailwind CSS]]の知識がWeb開発にも活かせるわけだ。スライド作成が単なる作業ではなく、自身のスキルアップにつながる有意義なものへと変わる。素晴らしい。
> [!hint]
> [[Tailwind CSS]]の利用は標準機能ではなくscriptタグ経由。
# 🪙OPA
## lualineのwinbar表示、inclineからの脱却
[[incline.nvim]]は[[Neovim]]の[[ウィンドウ (Vim)|ウィンドウ]]に対し、[[フローティングウィンドウ (Neovim)|フローティングウィンドウ]]でファイル名や付随情報などを表示する[[Neovimプラグイン]]。通常、そのような情報の表示には[[ステータスライン (Neovim)|ステータスライン]]を表示することが多いが、[[ステータスライン (Neovim)|ステータスライン]]は画面下部に表示されることもあり、個人的には直感的で確認しやすいとは言えなかったので[[incline.nvim]]は重宝していた。
![[2024-07-23_08h27_15.avif|frame]]
*incline.nvimによるフローティングウィンドウ*
しかし、[[incline.nvim]]を有効にしていると、[[Neovim]]の作業中にランダムでしばしばエラーが発生するようになった。その場合は見た目が崩れたりするため、都度[[Neovim]]を再起動する必要があり、再現性がないことから小さなストレスが降り積もっていった。
**『意図せずエラーが出続けるのは避けたいけど、[[incline.nvim]]の表現は捨てがたいんだよな... どうすれば...』**
そう悩んでいた時に[[winbar]]の存在を知った。[[winbar]]とは[[ウィンドウ (Vim)|ウィンドウ]]の上部に表示される[[ステータスライン (Neovim)|ステータスライン]]のようなものであり、[[Neovim]] 0.8で導入されたようだ。
**『これをいい感じにカスタマイズすれば、自分がやりたいことができるのでは...?』**
調べてみると[[lualine.nvim]]にその辺をカスタマイズする機能がついていたので、[[ステータスライン (Neovim)|ステータスライン]]だけでなく[[winbar]]のカスタマイズ設定も追加してみた。その結果が以下の画面である。
![[2024-07-23_08h30_59.avif|frame]]
*lualine.nvimでwinbarをカスタマイズして表示*
> [!code]- lualine.lua
> ```lua
> {
> "nvim-lualine/lualine.nvim",
> dependencies = { "nvim-web-devicons", opt = true },
> event = { "BufNewFile", "BufRead" },
> options = { theme = "gruvbox-material" },
> config = function()
> local lualine = require("lualine")
>
> local theme_base = {
> a = { fg = "#1b1d2b", bg = "#82aaff", gui = "bold" },
> b = { fg = "#82aaff", bg = "#3b4261" },
> c = { fg = "#828bb8", bg = "#1e2030" },
> }
> local theme_base_active = {
> a = { fg = "#efef33", bg = "#888888", gui = "bold" },
> b = { fg = "#82aaff", bg = "#3b4261" },
> c = { fg = "#828bb8", bg = "#1e2030" },
> }
> local custom_theme = {
> normal = theme_base_active,
> insert = theme_base_active,
> visual = theme_base_active,
> replace = theme_base,
> command = theme_base,
> inactive = theme_base,
> }
>
> local config = {
> options = {
> theme = custom_theme,
> component_separators = {},
> section_separators = {},
> disabled_filetypes = {
> statusline = { "no-neck-pain" },
> winbar = { "no-neck-pain" },
> },
> },
> winbar = {
> lualine_a = {},
> lualine_b = { { "diagnostics", sources = { "nvim_lsp" } } },
> lualine_c = {},
> lualine_x = {
> { "diff", symbols = { added = " ", modified = " ", removed = " " } },
> },
> lualine_y = {
> { "filetype", icon_only = true },
> },
> lualine_z = {
> {
> "filename",
> newfile_status = true,
> symbols = {
> modified = " ",
> readonly = " ",
> },
> },
> },
> },
> inactive_winbar = {
> lualine_a = {},
> lualine_b = { { "diagnostics", sources = { "nvim_lsp" } } },
> lualine_c = {},
> lualine_x = {
> { "diff", symbols = { added = " ", modified = " ", removed = " " } },
> },
> lualine_y = {
> { "filetype", icon_only = true },
> },
> lualine_z = {
> {
> "filename",
> newfile_status = true,
> symbols = {
> modified = " ",
> readonly = " ",
> },
> },
> },
> },
> sections = {
> lualine_a = {},
> lualine_b = {},
> lualine_c = {},
> lualine_x = { { "filename", path = 3 } },
> lualine_y = { "encoding", "fileformat" },
> lualine_z = {},
> },
> }
> lualine.setup(config)
> end,
> }
> ```
付随する嬉しいポイントとして、アクティブウィンドウのファイル名表示表現を変更することもできた。上記の画像では、右下の`clipboard.lua`がそれにあたり、黄色く輝くようなUIに変更されている。
この設定に変えてから1週間弱、今のところメリットだらけだ。
- [[incline.nvim]]使用時のエラーは**一度も**発生していない
- [[incline.nvim]]利用時より優れた表現
- パフォーマンスが少し上がった気がする ([[フローティングウィンドウ (Neovim)|フローティングウィンドウ]]を表示する数が減った影響?)
- 1行目の右端が隠れなくなった
わずかだがデメリットもある。これらが気になるならば少し考えた方がいいかもしれない。
- [[ウィンドウ (Vim)|ウィンドウ]]の高さが1行分減る
- アクティブウィンドウが切り替わったとき、[[Git]]の情報(追加・変更・削除)が一瞬点滅して表示される
# 🚀Releases
なし
# 👀Reading
## 【要約】「辞める人・ぶら下がる人・潰れる人」さて、どうする?【上村紀夫】
![](https://youtu.be/UPaZ6aAv8tU?si=A97XkgD_6_yZQH-k)
~~~
なるほど。分かる気がする。
https://youtu.be/UPaZ6aAv8tU?si=A97XkgD_6_yZQH-k
~~~
## Marvelous Academic Research System
<div class="link-card">
<div class="link-card-header">
<img src="https://public-files.gumroad.com/9s1dwf5camqo7sx3gvcqh1k9ylsu" class="link-card-site-icon"/>
<span class="link-card-site-name">Gumroad</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">Marvelous Academic Research System</p>
<p class="link-card-description">Obsidianの設定済みVaultテンプレートですスクリーンショットの説明Zoteroから文献情報を含んだノートを一括インポートします検索可能なデータベースとして管理します指定の形式で引用と引用文献リストを自動生成し、wordファイルに出力します(要Pandocインストール)Vault内に使用方法や簡単な初期設定を記載したDocumentsが含まれています ... </p>
</div>
<img src="https://public-files.gumroad.com/p5wcx8hahprdnk9kd57vixz8oa08" class="link-card-image" />
</div>
<a href="https://masa21gifus.gumroad.com/l/ucwfc"></a>
</div>
~~~
造り込みがすごい。
https://masa21gifus.gumroad.com/l/ucwfc
~~~
## GitHub - NStefan002/screenkey.nvim: Screencast your keys in Neovim
<div class="link-card">
<div class="link-card-header">
<img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">GitHub</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">GitHub - NStefan002/screenkey.nvim: Screencast your keys in Neovim</p>
<p class="link-card-description">Screencast your keys in Neovim. Contribute to NStefan002/screenkey.nvim development by creating an account on GitHub.</p>
</div>
<img src="https://opengraph.githubassets.com/d3b72bc1aac65416bd2386bf3b2bad87ad1c090752166109e77996cc5488c488/NStefan002/screenkey.nvim" class="link-card-image" />
</div>
<a href="https://github.com/NStefan002/screenkey.nvim"></a>
</div>
~~~
これは使いやすそう。VHSでも表示されると思うし。
https://github.com/NStefan002/screenkey.nvim
~~~
## VHS で楽に Neovim のデモ動画を録る
<div class="link-card">
<div class="link-card-header">
<img src="https://static.zenn.studio/images/logo-transparent.png" class="link-card-site-icon"/>
<span class="link-card-site-name">Zenn</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">VHS で楽に Neovim のデモ動画を録る</p>
</div>
<img src="https://res.cloudinary.com/zenn/image/upload/s--nQdfNpEj--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:VHS%2520%25E3%2581%25A7%25E6%25A5%25BD%25E3%2581%25AB%2520Neovim%2520%25E3%2581%25AE%25E3%2583%2587%25E3%2583%25A2%25E5%258B%2595%25E7%2594%25BB%25E3%2582%2592%25E9%258C%25B2%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_34:monaqa%2Cx_220%2Cy_108/bo_3px_solid_rgb:d6e3ed%2Cg_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzU1YzllYzNiYzAuanBlZw==%2Cr_20%2Cw_90%2Cx_92%2Cy_102/co_rgb:6e7b85%2Cg_south_west%2Cl_text:notosansjp-medium.otf_30:vim-jp%2Cx_220%2Cy_160/bo_4px_solid_white%2Cg_south_west%2Ch_50%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzE3OTQ0OWFlNjYuanBlZw==%2Cr_max%2Cw_50%2Cx_139%2Cy_84/v1627283836/default/og-base-w1200-v2.png" class="link-card-image" />
</div>
<a href="https://zenn.dev/vim_jp/articles/2024-07-15-vim-vhs-and-neovim"></a>
</div>
~~~
以前にVHS触ったときは『これならScreenpressoでいいかな... キーストロークも表示されるし...』と思ってた。
... けど、今一度やってみたら、Neovimの動画撮影ならこっちの方が圧倒的に楽なことに気づいた。
・Carnac使わなくていい
・日本語変換候補とかで変なの映るの気にしなくていい
・PCが動画撮影よりは軽い (ように感じる)
・何度でも取り直しできる
あたりが神すぎる。課題は少し残っているけど、それは解決できるよう考えてみる。
https://zenn.dev/vim_jp/articles/2024-07-15-vim-vhs-and-neovim
~~~
## sharp - High performance Node.js image processing
<div class="link-card">
<div class="link-card-header">
<img src="https://cdn.jsdelivr.net/gh/lovell/sharp@main/docs/image/sharp-logo.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">sharp.pixelplumbing.com</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">sharp - High performance Node.js image processing</p>
<p class="link-card-description">Resize large images in common formats to smaller, web-friendly JPEG, PNG, WebP, GIF and AVIF images of varying dimensions</p>
</div>
<img src="https://cdn.jsdelivr.net/gh/lovell/sharp@main/docs/image/sharp-logo-600.png" class="link-card-image" />
</div>
<a href="https://sharp.pixelplumbing.com/"></a>
</div>
~~~
AVIF使うならこっちのがいいのだろうか。。
https://sharp.pixelplumbing.com/
~~~
## 【要約】スタンフォード式 最高の睡眠【西野精治】
![](https://youtu.be/PuLXl_Le2Pc?si=VmO0w0afAX-DBxBG)
~~~
結構できている気がする。
https://youtu.be/PuLXl_Le2Pc?si=VmO0w0afAX-DBxBG
~~~
## Helix
<div class="link-card">
<div class="link-card-header">
<img src="https://helix-editor.com/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">helix-editor.com</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">Helix</p>
<p class="link-card-description">A post-modern modal text editor.</p>
</div>
</div>
<a href="https://helix-editor.com/"></a>
</div>
~~~
気になる。Neovimよりも標準機能の充実さがウリなのかな..?
https://helix-editor.com/
~~~
## 【要約】無(最高の状態)【鈴木祐】
![](https://youtu.be/3nx1pAzpGak?si=6ZP99DjrpezKZGKj)
~~~
当事者意識はまあ大事なんだけど、ほどほどにしないとメンタル壊すからこういう自己防衛知識はそれ以上に大事。
SNSや公開チャットで昔より無限に情報仕入れてしまえるから尚更。
https://youtu.be/3nx1pAzpGak?si=6ZP99DjrpezKZGKj
~~~
## NeovimのLSPのFormatter設定を見直す
<div class="link-card">
<div class="link-card-header">
<img src="https://eiji.page/_astro/favicon.Dz3ZmIIo.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">えいじのサイバー備忘録</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">NeovimのLSPのFormatter設定を見直す</p>
<p class="link-card-description">ソフトウェアに関する備忘録を書く個人ブログです!</p>
</div>
<img src="https://eiji.page/og/neovim-dynamic-capabilities.png" class="link-card-image" />
</div>
<a href="https://eiji.page/blog/neovim-dynamic-capabilities/"></a>
</div>
~~~
Biomeでnone-ls外すのやりたかったけど client.supports_method("textDocument/formatting") がどうやってもtrueにならないので断念した... capabilitiesには含まれるのに...謎
https://eiji.page/blog/neovim-dynamic-capabilities/
~~~
## GitHub - stevearc/conform.nvim: Lightweight yet powerful formatter plugin for Neovim
<div class="link-card">
<div class="link-card-header">
<img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">GitHub</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">GitHub - stevearc/conform.nvim: Lightweight yet powerful formatter plugin for Neovim</p>
<p class="link-card-description">Lightweight yet powerful formatter plugin for Neovim - stevearc/conform.nvim</p>
</div>
<img src="https://opengraph.githubassets.com/0775793aa4db03b53e61d237b8c5f652178cd4c1b1181b5ea5ef7da96858b119/stevearc/conform.nvim" class="link-card-image" />
</div>
<a href="https://github.com/stevearc/conform.nvim"></a>
</div>
~~~
none-ls.nvimからconform.nvimに移行中。期待通りのシンプルな設定と見やすいInfo画面。
https://github.com/stevearc/conform.nvim
~~~
# 📚New Notes
- [[AV1]]
- [[AVIF]]
- [[FIGlet]]
- [[HEIF]]
- [[HTMLタグを利用 (Marp CLI)]]
- [[MPEG]]
- [[Marp CLI]]
- [[Marp]]
- [[Screenkey.nvim]]
- [[Tailwind CSSを利用 (Marp)]]
- [[Typeでクォーテーションを指定する方法 (VHS)]]
- [[bottom]]
- [[conceal (markdown.nvim)]]
- [[conform.nvim]]
- [[conform.nvimでファイル保存時にインポート最適化 (Biome)]]
- [[ファイルタイプ (Vim)]]
- [[noUnusedImports (Biome)]]
- [[nvim-keycastr]]
- [[resession.nvim]]
- [[sharp (javascript)]]
- [[winbar]]
- [[カスタムコマンド (Lazygit)]]
- [[セッション (Neovim)]]
- [[タブ (Obsidian)]]
- [[タブ (Vim)]]
- [[タブページ (Vim)]]
- [[タブページライン (Vim)]]
- [[ファイル保存時に自動フォーマット (conform.nvim)]]
- [[フォント指定 (VHS)]]
- [[マクロ記録中はvirtual textに表示 (Noice)]]
- [[メソッド (Go)]]
- [[中央寄せ (Marp)]]
- [[主要ブラウザ]]
- [[推奨ルール (Biome)]]
- [[新しいキーと値を追加 (jq)]]
- [[未使用import文をファイル保存時に自動削除 (Biome)]]
- [[構造体 (Go)]]
- [[構造体 (Rust)]]
- [[💽2024-07 更新履歴]]
- [[📕MarkdownのWYSIWYG表示 (Neovim)]]
- [[📕VHSでNeovimの操作を撮影する場合のtapeファイルテンプレ]]
- [[📕入力されたキーを表示 (Neovim)]]
- [[📕設定を読み込まずに起動 (Neovim)]]
- [[📜2024-07-15 Spinal reflex bindings templateで設定を読み込むときに走るFileIOをメモリに変える]]
- [[📜2024-07-18 Neovimのステータスラインをすべてのウィンドウで表示させてみる]]
- [[📜2024-07-20 none-ls.nvimからconform.nvimに乗り換えてみる]]
- [[📜2024-07-21 Lazygitで差分ファイルに対して変更前の内容をNeovimで表示させてみる]]
- [[📜2024-07-21 Marp CLIでVim LTのプレゼンテーションを作成してみる]]
- [[📝VHSでmp4やwebmに変換しようとするとUnrecognized option 'crf' エラー]]
- [[📝conform.nvimでThe nested {} syntax のdeprecatedエラー]]
- [[📝conform.nvimでluaファイルにStyluaを設定してもlua_lsのフォーマットが優先される]]
- [[📝markdown.nvimで現在行ではアイコン表示をオフにしたい]]
- [[📰2024年28週 Weekly Report]]
- [[📰Goの関数を呼び出すときの実引数はポインタにすべきか]]