2025ねんのヴぃむあーるしぃー
まず初めに言えば、今年はなんだかんだ言って結局のところneovimに回帰した一年だった。
ということで、2024ねんのヴぃむあーるしぃーとの違いとしては、
- neovimに戻ったので当然init.luaに書き直した
- lazy.nvim
- im-select
- Snack.nvim
あたり。特にUbuntuで仕事をしていることが増えたので、今までのvimscriptでInsertModeの切り替えをしていたのを、im-select.nvimを使って切り替えるように変更した(だからなんだという話ではあるけど)。
というのも、それまではWin11でneovimを使うことの方が大多数でWSL環境でも同じだったからspzenhanを使っていたが、同じinit.luaをWin/Linux両方の環境で使い回すようになったため、どうせならfcitx5-remtoeを使おうという気持ちが大きかった。
それにim-selectかfcitx5-remoteさえ入っていれば(大抵のプラグインと同様に)デフォルト設定そのままで動き、しかもUS配列化JIS配列かを判定するのは1行書き換えれば終わりなので、いちいちどこにどの設定が書いてあるかを意識しなくて済むようになったのはメリットかも。
(※いちおうspzenhanも残してあるにはある)
{ "keaising/im-select.nvim", config = function() require('im_select').setup({ -- IM will be set to `default_im_select` in `normal` mode -- For Windows/WSL, default: "1033", aka: English US Keyboard -- For macOS, default: "com.apple.keylayout.ABC", aka: US -- For Linux, default: -- "keyboard-us" for Fcitx5 -- "1" for Fcitx -- "xkb:us::eng" for ibus -- You can use `im-select` or `fcitx5-remote -n` to get the IM's name default_im_select = "keyboard-us", -- Can be binary's name, binary's full path, or a table, e.g. 'im-select', -- '/usr/local/bin/im-select' for binary without extra arguments, -- or { "AIMSwitcher.exe", "--imm" } for binary need extra arguments to work. -- For Windows/WSL, default: "im-select.exe" -- For macOS, default: "macism" -- For Linux, default: "fcitx5-remote" or "fcitx-remote" or "ibus" default_command = "fcitx5-remote", -- Restore the default input method state when the following events are triggered -- "VimEnter" and "FocusGained" were removed for causing problems, add it by your needs set_default_events = { "InsertLeave", "CmdlineLeave" }, -- Restore the previous used input method state when the following events -- are triggered, if you don't want to restore previous used im in Insert mode, -- e.g. deprecated `disable_auto_restore = 1`, just let it empty -- as `set_previous_events = {}` set_previous_events = { "InsertEnter" }, -- Show notification about how to install executable binary when binary missed keep_quiet_on_no_binary = false, -- Async run `default_command` to switch IM or not async_switch_im = true }) end, }, -- デフォルト設定そのまま、ただしWin環境ではspzenhanのほうが楽なので無効化
Windows環境では上記を丸ごとコメントアウトして、下記のコメントアウトを外している:
vim.cmd [[ if executable('spzenhan') let s:lastimestate = 0 autocmd InsertLeave * :call system('spzenhan 0') " autocmd InsertLeave * s:call system('spzenhan 0')* :call system('spzenhan 0') autocmd CmdlineLeave * :call system('spzenhan 0') endif ]]
去年の記事を見るとvim-jetpackを使ってもろもろのプラグインを利用していたが、こちらは当然ながらvim-plugスタイルで設定を書いているので、まずはlazy向けに書式と設定をオーバーホールしていた記憶がある。
Snacks.nvim
そしてその後(いつだか忘れたけど)Snacks.nvimが登場したことで、それ関連の設定を追記(LSP設定してるのに}の閉じ忘れとか,の書き忘れを忘れて四苦八苦したのは良い思い出)。
加えて、vim-startifyを使わずSnacksのdashboardを使うようになったので、起動時にはかわいいおうまさんのAAが出るように設定した。意外とこういうのが仕事のモチベに繋がるんだよなぁ。
header = [[ |\___/| |\___/| |\___/| |\___/| /O O \__ /O O \__ /O O \__ /O O \__ / / \/_ / / \/_ / / \/_ / / \/_ / / \/_ / / \/_ / / \/_ / / \/_ @___@` \_/ @___@` \_/ @___@` \_/ @___@` \_/]], },
こうして振り返ると、つくづくSnacksの機能でほとんど置き換えてしまったのが多い。Fern.vimはexplorerで置換したし、なんならこっちのほうが(luaネイティブだからなのか)動作が早い。
pickerもオプションが充実しすぎていてこれ無しでは仕事が進まないくらいだし、grep_buffers()、search_history()、lines()あたりはほぼ必ずと言っていいほど常用するようになった。
例えば、自分のキーマップではkjをEscと同じ動作になるようにv,i,rの各モードで設定しているが、これはこのキーが一番押しやすいからこの位置に設定してある。
そして同様に、バッファ内の行単位ファジーファインダーコマンドであるlines()も、kjのマップと同じくらいの頻度で使うことがある。なので、
vim.keymap.set("n", "<leader>kj", function() Snacks.picker.lines() end, { desc = "Snacks: word line picker" })
としてやれば、こんな感じでnモードからすぐにバッファ内検索を、思考の流れに逆らわずに呼び出すことが出来る

また、同じくSnacksのZenモードもとても使い勝手が良い。
キーマップを<leader>ffに割り当て、Zenモードに入ると下のようにカーソル行とその周辺のインデントのみがハイライトされ、コメント行はグレーでコメントされたままになる。
Snacks.config.style("zen", { enter = true, fixbuf = false, minimal = false, width = 120, height = 0, backdrop = { transparent = true, blend = 40 }, keys = { q = false }, zindex = 40, wo = { winhighlight = "NormalFloat:Normal", }, w = { snacks_main = true, }, })

本来Zenモードならステータスラインも消せるのだが、そこまですると逆に今いるバッファがどこかわからなくなるので自分の環境では表示させている。
上のスクショの通り、WindowsでのGUIクライアントはNeovideを通年で使用している。他の(e.g.neovim-Qt)と違うのは、カーソルアニメーションが設定できることと、そのアニメーションが見ていて違和感を感じないこと。もちろん現代のクライアントらしく、ウインドウの透過も出来る。
-- Neovide(windows) config vim.g.neovide_remember_window_size = true vim.g.neovide_refresh_rate = 60 vim.g.neovide_underline_stroke_scale = 1.0 vim.g.neovide_hide_mouse_when_typing = true vim.g.neovide_position_animation_length = 0.05 vim.g.neovide_floating_shadow = false vim.g.neovide_floating_z_height = 10 vim.g.neovide_light_angle_degrees = 45 vim.g.neovide_light_radius = 5 vim.g.neovide_normal_opacity = 0.8
特に高リフレッシュレートのディスプレイと組み合わせると、カーソル移動をしているだけで気持ちがいい。自己満足といえば自己満足だけど、Ubuntuではメインマシンほど高性能なPCを使わないので、他のGUIクライアントを使う場合はSnacksのscrollを有効化する。
そもそもUbuntuでGUIクライアントを使わないのって、何らかの理由で端末エミュレータで動かさないときくらいだし…
バッファ管理
vimでは jeetsukumaran/vim-buffergator を使い、
こっちのほうがメリットが多く、例えばnvimでの利用前提ならフローティングウインドウ(~バッファだっけ?)が使えるので、<leader>bでバッファ一覧をフローティングで呼び出して切り替えるとか、その時にLRUやMRUでバッファの並び順を切り替えるなど柔軟な運用が出来る。
そしてそのフローティングウインドウの位置も左端固定ではなく、今使っているバッファの(正確にいえば画面分割をしている場合、いま使っている分割したバッファの)中央に合わせて出るので、視線移動をしなくて済むようになった。非常に楽。

rendere-markdown
基本的にメモや仕事上のログはMarkdownで残すようにしている(Obsidianを使って整理する都合)ので、その表示のプラグインとしてこれを使っている。
その際、デフォルトでは特になんの変化もなくプレーンテキストとしてmdファイルを編集するわけだが、当然neovimはmdエディタではないので、レンダリングをしてくれるわけではない。そこでこのプラグインを入れると、

のように、対応しているタグをレンダリングしてくれるようになり、しかもそれは編集途中のものでも反映されるようになる。
ヤンク&ペースト
ヤンクとペーストはYankRing.vimからこちらに移行した。キーマップは以前と同じなので割愛。
一つ言えば、使い勝手がほぼ変わらないかわりにSnacks.pickerと連携するようになっているので、そのへんの使い勝手が良いことくらいか。
タブ設定
いままでmdやhtmlファイルばかり書いていたが、仕事や個人でPHP、Python、Rustも書くようになったので設定を追加しておいた。
-- ファイルの拡張子によってタブストップとかを上書きする vim.cmd[[ augroup fileTypeIndent autocmd! autocmd BufNewFile,BufRead *.lua setlocal tabstop=2 softtabstop=2 shiftwidth=2 autocmd BufNewFile,BufRead *.md setlocal tabstop=4 softtabstop=4 shiftwidth=4 autocmd BufNewFile,BufRead *.html setlocal tabstop=4 softtabstop=4 shiftwidth=4 autocmd BufNewFile,BufRead *.py setlocal tabstop=2 softtabstop=2 shiftwidth=2 autocmd BufNewFile,BufRead *.php setlocal tabstop=4 softtabstop=4 shiftwidth=4 autocmd BufNewFile,BufRead *.rs setlocal tabstop=2 softtabstop=2 shiftwidth=2 augroup END ]]
大体こんなところ。一言で言うなら、Snacks.nvimが強すぎて他のプラグインを物色することがなくなったの一言に尽きる。いや、尽き過ぎる…。
上記のうちSnacks導入後に変えたのはタブ設定とim-select.nvimぐらいなもので、それ以外はすべてSnacks導入前に追加した設定になる。そして、この記事ももちろんSnacksを導入したneovimでお送りしました。
来年のSnacksにも期待したいし、なんなら今も新機能が追加され続けているのでもっと進化しているかもしれない。
2027年時点でのinit.luaの晒し首に乞うご期待。
今年買った(読んだ)本
メモ書き。買った本はかなり去年より減ったけど、今まで買った本も読み返したりしているのでむしろ読書量は上がっているかも。
以下、半角カッコは巻数または購入年、全角カッコはジャンルまたは本の種類。著者名は省略するが、タイトルでググれば出てくるはず。
買った本のうち読了済み
SF
・未必のマクベス(長編)
・グリフォンズ・ガーデン(長編)
・ネクサス(上下)(長編)
・神の目の小さな塵(上下)(長編)
・いま集合的無意識を、(短編集)
・宙の復讐者(長編)
・プロジェクト・ヘイル・メアリー(上下)(長編)
・ニューロマンサー(長編)
・カウント・ゼロ(長編)
・モナリザ・オーヴァドライヴ(長編)
・猫のゆりかご(長編)
・BEATLESS(上)(長編)
・アンブロークン アロー 戦闘妖精・雪風(長編)
・グッドラック 戦闘妖精・雪風(長編)
・天冥の標Ⅴ 羊と猿と百菊の銀河(長編)
・SFマガジン(偶数月刊行のうち2025年2,4,6,8,10月号)(雑誌)
・ツインスター・サイクロン・ランナウェイ(4)(長編)
自伝など
・プログラミングバカ一代(自伝)
アンソロジー(単体購入)
・コーラルとロータス(創元日本SFアンソロジー2019)(短編)
・循環(創元日本SFアンソロジー2020)(短編)
・調律師(創元日本SFアンソロジー2019)(短編)
・ほんとうの旅(創元日本SFアンソロジー2021)(短編)
・草原のサンタ・ムエルテ(創元日本SFアンソロジー2018)(短編)
その他文芸・一般書・教養書・コミック
・愛するということ
・こころ(新潮文庫版)
・完全教祖マニュアル
・猫のあしあと(エッセイ)
・猫にかまけて(エッセイ)
・パンク侍、斬られて候(長編?)
・俺の文章修行(エッセイ)
・ヤニねこ(1)(漫画)
・姉のともだち(1,2)(漫画)
買った本のうち読書中
・オーバーロードの街(長編)
・回樹(短編集)
・[作って学ぶ]OSのしくみⅠ──メモリ管理、マルチタスク、ハードウェア制御 WEB+DB PRESS plus(技術書)
・火星の女王(長編)
買った本のうち未読
・フェルマーの最終定理(ノンフィクション)
買った本のうち積読
・パンドラの函(中編?)
・メタ倫理学入門
・世界の終わりとハードボイルド・ワンダーランド(上)(長編)
・猫とあほんだら(エッセイ)
・こうしてあなたたちは時間戦争に負ける(長編)
再読
・戦闘妖精・雪風<改>(2019購入)
・ミニスカ宇宙海賊シリーズ(2019購入)
・超ミニスカ宇宙海賊(1,2)(2020/2023購入)
・天冥の標Ⅰ~Ⅹ(2024購入)
・消滅の光輪(上下)(2023購入)
・星のダンスを見においで(上下)(2023購入)
・「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック(2023購入)
・新しい世界を生きるための14のSF (2022購入)
・春琴抄(2019購入)
・日本のいちばん長い日(2019購入)
・閃光のハサウェイ(上中下)(2022購入?)
・私の個人主義(2020購入?)
・日本SFの臨界点-[恋愛編]死んだ恋人からの手紙-(2022購入?)
・ツインスター・サイクロン・ランナウェイ(1,2,3)(2023購入)
・サマーウォーズ(2020購入)
今年のベストを挙げるなら・・・
間違いなく宙の復讐者(著エミリー・テッシュ, 2025年8月, 早川書房, 単行本)。
(もう一回書くが)間違いなく。これが一番おもしろい。でぃすいずざべすと。
あらすじなりブックレビューなりはネットの海を探せばいくらでも出てくるので割愛するが、627ページの中で異なる3つの時間線、その中で繰り広げられる謀略、人間関係、そして主人公である人類と異種星人との時空を超えた恋愛、etc...ディストピアからのタイムトラベル、スペオペ、未来SF、LGBTQとあらゆるジャンルをすべてぶっ込んだかのような本。
ハードSFの括りではあるものの、多少省略されてはいる描写もあるが、それでもラスト50ページで終わるのか‥?と不安になるくらいの要素をまとめてきってみせた結末。
一言で言うなら、天冥の標 計10巻17冊(6000ページくらいか?)を627ページの単行本ひとつにまとめたようなボリュームと言えばわかりやすい。
次点はSFならいま集合的無意識を、表題作のいま集合的無意識を、。その他なら俺の文章修行。
感想
積んだ本は読もうね(来年の自分に向けて)
VSCodeVimで<C-w>hとかをやる
忘れそうなので。
Windowsなら(おそらく)~/AppData/の同じようなディレクトリに、Ubuntuで(さらにいうとaptで)あれば下記のデイレクトリに設定ファイルがある。
/$HOME/.config/Code/user/keybindings.json
なので、このファイルに対して適当な形で設定を書いてあげれば良い。
[ { "key": "ctrl+w j", "command": "workbench.action.terminal.focus", "when": "editorTextFocus && vim.mode == 'Normal'" }, { "key": "ctrl+w k", "command": "workbench.action.focusActiveEditorGroup", "when": "terminalFocus" }, { "key": "ctrl+w h", "command": "workbench.action.focusLeftGroup", "when": "editorTextFocus && vim.mode == 'Normal'" }, { "key": "ctrl+w l", "command": "workbench.action.focusRightGroup", "when": "editorTextFocus && vim.mode == 'Normal'" } ]
おわり
メモ的な採掘的な
displacement missile
トリガー押しっぱなしにして、左下の深度?マップが現れたらバーが青いところに合うのを見計らって離す
プロスペクターリンペットで小惑星の分析するのが必須。
- かつ、その上で地中に埋まっている鉱脈をターゲットしている必要がある
mining laser
- 通常通りレーザーを打って鉱石の破片を抽出する
seismic charge missile
- fissure(亀裂)に対して打ち込む。制限時間あり。
abandon blaster
- surface depositに対して打ち込む用
mining laser以外はプロスペクターリンペット必須。ただしダブルホットスポット採掘をするならmining laserだけ持っていけばいい(?のかわからないが、ちょっとこれは試してみたい。ただ場所探しが面倒くさそう)
E:D POWERPLAY ASSIGNMENTS(PP2.0)の最初の週タスク
4週間目でようやく意味がわかってクリアできたので初投稿です(意味不明)
疲れたので要点だけ書くことに。
- sell rere goods in reinforcement:
→inaraの次のページで、勢力のsystemを入力 https://inara.cz/elite/commodities-rare/
そこで、適当なソート順でLOCATIONのステーションをgalmapに入力し、そこで物品を仕入れる
その後、元通り目的の勢力のsystemに移動してその物品を売却
→メリット獲得、という流れ
バウンティはそのまま、reinforcementsystemで
WANTEDの賞金稼ぎをするだけscanships and WAKES IN REINFORCEMENT SYSTEMS →これもreinforcementsystemでWAKE UP WAVE(?)のスキャンをする。確かwake scanner必須のはず。
TRANCEPORT POWER COMMODITIES TO UNDERMINING
→これが多分最大の難関。galmapの(控えめに言って)クソ仕様に騙されて理解するまで4週間ほど掛かった。
まずreinforcementsystemの自勢力のpower contactでcommoditiesを収集する。
その後、galmapで今いるsystemをダブルクリックし、右側に表示されているsystem詳細の下側、地球儀のアイコンをクリックして影響範囲を表示させる。
その中の、適当な他勢力のsystemを選択するが、このときそのsystemがreinforcement system(wikiでいうところの弱体化星系、US)であることを確認したうえで、そこの適当な勢力のstationに飛ぶ
その後、powercontact→HAND IN→でcommoditiesを売却する。
※もし収集しているunderminingが規定数に足りない場合、別のsystemに飛んで同じことを繰り返す
- RESCUE ESCAPE PODS IN REINFORCING
→自勢力のReinforcement systemで適当なpower wreckage signatureを探すなり、適当にバウンティするなりして脱出ポッドを回収
その後power contactでそれを提出するが、面倒なので同じsystemのstationでいい