第3回まで無料

Neovim & fish & tmux 入門コース

インストールから、fish の設定・補完・関数・プロンプト、Neovim のモーション・Lua 設定・LSP・プラグイン、tmux のセッションとコピーモード、そして Lua という言語そのものまで。全40レッスンで「3 つを 1 つの作業環境としてつなぎ、dotfiles で持ち運び、足りないところは Lua で自分で書き足せる」ところまで進みます。コマンドとその出力は、すべて実際に実行したものを載せています。

カリキュラム

全40レッスンを7つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ 設定ファイルとキー操作はブラウザ内で実行できないため、手元のターミナルで fish・Neovim・tmux を入れて試しながら進めてください。第7章(第31〜40回)は、第30回までで組んだ設定を支えている Lua という言語そのものを扱う発展編です。

Chapter 1 — fish を使い始める(第1〜5回)

POSIX 非互換という懸念を実測で片付けてから、設定ファイルの読み込み順・変数とスコープ・補完・履歴という土台を押さえます。最後は「打つ前に候補が出ている」状態まで進みます。

Chapter 2 — fish を自分の道具にする(第6〜11回)

abbr・関数・制御構文・プロンプト・プラグインと、毎日触る部分を自分の手で作ります。最後は fzf と zoxide で、ディレクトリ移動とファイル検索を一段速くします。

Chapter 3 — Neovim の操作(第12〜16回)

モーションとテキストオブジェクトという「文法」を覚え、レジスタ・マクロ・検索置換で編集を自動化します。プラグインを入れる前に、素の Neovim でどこまでできるかを body に入れる章です。

Chapter 4 — Neovim を開発環境にする(第17〜23回)

設定を Lua で書き、lazy.nvim・Treesitter・LSP・補完・ファジーファインダを積み上げます。最後は Git 連携とフォーマッタまで入れて、実務で使える構成にします。

17

options とキーマップ

vim.opt と vim.o の使い分け、効くオプション 4 つ、desc 付きのキーマップ、そして設定を lua/config/ に分割する。

🔒 ベーシック
18

設定の分割と lazy.nvim

ブートストラップから lua/plugins/ 構成まで。event / cmd / keys / ft の使い分けと、opts と config の違い、lazy-lock.json の意味。

🔒 ベーシック
19

Treesitter

コードを構文木として扱う。incremental selection と構文単位の折りたたみ、そして fish パーサで自分のシェル設定も正確にハイライトする。

🔒 ベーシック
20

LSP

0.11 でキーマップは定義済み、設定は vim.lsp.config / enable に。アタッチ確認の手順と、最も価値を感じる grn(リネーム)まで。

🔒 ベーシック
21

補完

まず内蔵補完でどこまでできるかを確認する。プラグインが要るのはあいまい検索と複数ソースが欲しいときで、そこで blink.cmp を入れる。

🔒 ベーシック
22

ファジーファインダ

シェルと同じ fzf バイナリを使う fzf-lua で、ファイル・全文検索・バッファ・ヘルプ・診断を同じ操作で探す。Ctrl-q から :cdo まで。

🔒 ベーシック
23

Git 連携とフォーマット

gitsigns でハンク単位のステージング、conform で保存時フォーマット。fish_indent を組み込んで、自分のシェル設定も自動整形する。

🔒 ベーシック

Chapter 5 — 点検と tmux の基本(第24〜27回)

fish を使うときにだけ起きる相性問題を潰し、:checkhealth と起動時間で構成を点検します。そのまま tmux に入り、セッション・ウィンドウ・ペインと .tmux.conf を扱います。

Chapter 6 — 3 つをつないで持ち運ぶ(第28〜30回)

コピーモードとクリップボードを整え、キー操作と配色を 3 つのツールで揃えます。最後は dotfiles にまとめて、新しいマシンで同じ環境を再現できるようにします。

Chapter 7 — Lua で設定を書く(第31〜40回)

第30回までレシピとして使ってきた Lua を、言語として読み直します。テーブル・クロージャ・モジュールから vim.api・autocmd・非同期まで押さえ、最後は小さなプラグインを自分で書いて、落ちない設定に仕上げます。

31

Neovim の中の Lua

Neovim に組み込まれた LuaJIT(Lua 5.1 系)を確かめる。:lua・:=・nvim -l の 3 つの入口と vim.print、0 が真になる罠と local の付け忘れ。

🔒 ベーシック
32

テーブルと vim.tbl_*

設定はすべて入れ子のテーブル。# の罠、代入とコピーの違い、vim.tbl_deep_extend の force / keep / error、vim.opt が返す Option オブジェクト。

🔒 ベーシック
33

関数・クロージャ・可変長引数

キーマップやコマンドに関数を渡すときの形。呼ぶか渡すかの違い、状態を閉じ込めるクロージャとループの罠、... と self の正体。

🔒 ベーシック
34

モジュールと runtimepath

require が lua/ を探す場所は runtimepath。モジュールは 1 回だけ実行されて共有されることと、package.loaded を消して読み直す方法。

🔒 ベーシック
35

vim.api / vim.fn / vim.opt の境界

エディタを触る 3 つの入口の違い。0 始まりと 1 始まり、vim.fn の戻り値の型変換と 0 の罠、vim.cmd に残る Vimscript、オプションのスコープ。

🔒 ベーシック
36

autocmd と augroup を Lua で

nvim_create_autocmd のコールバックが受け取る args を読む。clear = true で重複を防ぎ、once と buffer で寿命を決め、data で値を受け渡す。

🔒 ベーシック
37

キーマップとユーザーコマンド

vim.keymap.set の expr と buffer、nvim_create_user_command の nargs・complete・bang・range。コールバックが受け取るテーブルを実物で読む。

🔒 ベーシック
38

vim.uv と vim.system

外部コマンドを、画面を止めずに走らせる。vim.system の同期と非同期、コールバックで API が呼べない理由と vim.schedule、実例としてブランチ名の取得まで。

🔒 ベーシック
39

自作プラグインにする

設定の一部を tally.nvim という小さなプラグインに切り出す。setup(opts) の規約、plugin/ と lua/ の役割、:checkhealth に出す health.lua、lazy.nvim からの読み込みまで。

🔒 ベーシック
40

落とさない設定

1 つのエラーで設定の残りが読まれなくなるのを防ぐ。pcall と vim.notify、Lua の落とし穴のまとめ、自分の設定用の :checkhealth、コミット前の起動確認まで。

🔒 ベーシック

全40レッスンを終えたら、次はこの環境で毎日使う Git & GitHub や、サーバー側を扱う Linux へ。メンバーシップで全コースが解放されます。