TL;DR
- WezTerm へ移行。軽快でカスタムしやすい。
- Cmd+Shift+F は「メニューを残した最大化」、Ctrl+Shift+F はネイティブ全画面。
- Neovim を VSCode 風に整備(Dashboard/Dropbar/Context/Toggleterm/Copilot/Lazygit)。
- インフラ用途(Terraform/YAML/Docker)重視。保存時フォーマットと LSP/診断まで最小構成。
- 「VSCode ならどう押す?」の対応表を掲載。
今回の設定リポジトリ
- Neovim:
https://github.com/wan0ri/neovim - WezTerm:
https://github.com/wan0ri/wezterm
Neovim を使ってみたいと思った理由
元々Vimを使うことに抵抗感が合ったのですが、以下の理由で使ってみたくなりました。
- もともとターミナルが iTerm2 だったが、セッションが増えると動作が重く感じることがあった。
- GPU 描画で軽いという評判の WezTerm を試したかった。
- 公式: Wezterm:
https://wezfurlong.org/wezterm - 公式: GitHub:
https://github.com/wez/wezterm
- 公式: Wezterm:
- ターミナルと VSCode を行き来するコンテキストスイッチを減らしたい。
- CLI から “そのまま編集→コミット” まで完結させたい。
- 参考: WezTerm のカスタマイズ記事(配色・UI の考え方)
https://zenn.dev/mozumasu/articles/mozumasu-wezterm-customization
備考: 端末エミュレータの性能はフォント・レンダリング設定・プラグイン状況で大きく変わるため、厳密なベンチは環境依存です。本記事では体感差と設定の工夫に主眼を置いています。
私自身がインフラクラウド領域の人間なので、VimであったりCLIだったりは、この先この領域を主戦場とするためには避けて通れないものであると思います。 ですので、今回はそれらのツールを使ってみて、あわよくば使いこなせたらいいかなと思い触れてみることにしました。
WezTerm の設定
今回のポイントは「VSCode/iTerm2 の癖を残しつつ、端末として軽快に」するために設定しました。 主要な調整点は次の通りです。
- フォント/フォールバック
MesloLGS NF → Monaco → "Courier New" → Menlo、CJK/絵文字にHiragino Sans / Apple Color Emojiを追加- フォントサイズ: 14pt、IME 有効化:
use_ime = true
- 透明度/背景
window_background_opacity = 0.65、macos_window_background_blur = 10
- タブ/見た目
- タイトルバー簡素化(
window_decorations = "RESIZE") - アクティブタブをシアン
#00BCD4に統一(format-tab-titleで色付け) - カーソル色もシアン(
cursor_bg/cursor_border/compose_cursor = "#00BCD4")
- タイトルバー簡素化(
- 改行とウィンドウ最大化
Option+Enterは「送信せず改行」:SendString("\n")- ウィンドウ最大化(メニューバーは表示のまま):
Cmd+Shift+F- 独自イベント
toggle-maximizeでwindow:maximize()/restore()をトグル
- 独自イベント
- ネイティブ全画面(別スペース・メニュー非表示):
Ctrl+Shift+F
- そのほか
- コピー/貼り付け:
Cmd+c / Cmd+v、タブ操作(Cmd+t / Cmd+w / Ctrl+Tab)、リーダーキーはCtrl+q - 端末の分割/操作:
LEADER+d(縦)/LEADER+r(横)/LEADER+h/j/k/l(移動)/LEADER+s→h/j/k/l(サイズ調整)/LEADER+z(ズーム)
- コピー/貼り付け:
設定例(keybinds の一部)
-- 改行(送信せず改行)
{ key = "Enter", mods = "ALT", action = act.SendString("\n") },
-- ウィンドウ最大化(メニューは残す)/ ネイティブ全画面
local __max_state = {}
wezterm.on("toggle-maximize", function(window, pane)
local id = window:window_id()
local dims = window:get_dimensions()
if dims.is_full_screen then window:toggle_fullscreen() end
if __max_state[id] then
window:restore(); __max_state[id] = false
else
window:maximize(); __max_state[id] = true
end
end)
{ key = "f", mods = "SUPER|SHIFT", action = act.EmitEvent("toggle-maximize") },
{ key = "f", mods = "CTRL|SHIFT", action = act.ToggleFullScreen },
私用の配色やキーはそのまま変更可能。詳細はリポジトリの
wezterm.lua/keybinds.luaを参照。
Neovim
Neovim の設定(インフラ特化・VSCode 風)
パッケージ管理は lazy.nvim。VSCode 風の操作感に必要な最小セットのみ。which-key で日本語の説明も表示されるようにしている。
- 見た目/操作
- テーマ:
vscode.nvim - 検索/コマンド:
telescope.nvim(Ctrl-p= ファイル、<Space> sp= コマンド) - エクスプローラ:
neo-tree.nvim(Ctrl-bトグル、隠し/無視ファイルも可視) - ステータス:
lualine.nvim - インデントガイド:
indent-blankline.nvim
- テーマ:
- Git
- インライン差分:
gitsigns.nvim - UI:
neogit+diffview.nvim(必要に応じてvim-fugitive)
- インライン差分:
- LSP/補完/整形
mason.nvim+mason-lspconfig.nvim+nvim-lspconfig- LSP: terraformls / yamlls(+SchemaStore) / jsonls / dockerls / bashls / lua_ls / helm_ls / marksman
- 補完:
nvim-cmp(Enter 自動確定オフ) - 整形:
conform.nvim(保存時フォーマット有効) - Lint:
nvim-lint(markdownlint / yamllint はインストール時のみ自動実行)
- Markdown
- テーブル編集:
vim-table-mode、プレビュー:glow.nvim
- テーブル編集:
主要プラグインと役割(一覧)
- UI/見た目:
cobalt2.nvim(既定テーマ)/vscode.nvim(予備)/lualine.nvim/indent-blankline.nvim/hlchunk.nvim/dropbar.nvim/dashboard-nvim/nvim-web-devicons - 構文/解析:
nvim-treesitter/nvim-treesitter-context - ファイル/検索:
telescope.nvim+telescope-fzf-native/neo-tree.nvim - Git:
gitsigns.nvim/neogit/diffview.nvim/vim-fugitive/lazygit(toggleterm 統合) - LSP/補完/整形/診断:
mason.nvim/mason-lspconfig/nvim-lspconfig/nvim-cmp+cmp-*/LuaSnip+friendly-snippets/SchemaStore.nvim/conform.nvim/nvim-lint - インフラ:
vim-terraform(保存時terraform fmt有効)/vim-helm - Markdown:
vim-table-mode/glow.nvim - ターミナル:
toggleterm.nvim(下/右/フロート)+lazygit連携(<leader>gg) - 移動:
accelerated-jk.nvim - AI:
copilot.vim/CopilotChat.nvim
LSP/Formatter 既定
- Terraform:
terraformls/terraform_fmt - YAML:
yamlls+ SchemaStore /yamlfmt(なければ Prettier) - JSON/JSONC: Prettier + SchemaStore
- Lua:
lua_ls/stylua - Shell:
bashls/shfmt - Markdown: marksman / Prettier、Lint は markdownlint
保存時フォーマットは conform.nvim で有効。<leader>f で手動フォーマット。
Lazygit 連携(toggleterm)
- 使い方:
<leader>ggでフロート起動/終了(Git ルートで開く)。 - 事前準備:
brew install lazygitなどで本体をインストール。
テーマを Cobalt2 に変更(VSCode Cobalt2 に近づける)
- 追加プラグイン:
lalitmee/cobalt2.nvim(依存:rktjmp/lush.nvim,tjdevries/colorbuddy.nvim) - 適用:
:Lazy sync後に自動適用(または:colorscheme cobalt2) - 透過を活かす:
Normal/NormalFloatの背景をnoneに上書き可能
色のメリハリを強化(Treesitter 上書き)
- 割り当て例(Cobalt2 寄り)
- 文字列=緑、数値/boolean=オレンジ、定数=ピンク、関数/型=シアン、キーワード=青(イタリック)、プロパティ/フィールド=黄
- Terraform/HCL は
vim-terraformの正規表現ハイライトも併用(additional_vim_regex_highlighting)
検索ハイライトの扱い
- 普段は点灯、
Escで一発消灯(<Esc>に:nohlsearchを割当)
キーマップ(抜粋)
- Quick Open:
Ctrl-p - コマンドパレット:
<Space> sp - エクスプローラ:
Ctrl-b - 検索:
<Space> fg、バッファ一覧:<Space> fb - 保存時フォーマット(手動は
<Space> f) - LSP:
gd(定義)/gr(参照)/K(Hover)/<Space> rn(Rename)/<Space> ca(CodeAction)
VSCode のあれを Neovim/WezTerm でどうやる?(要点)
よく使う操作の対応。which-key を押せば日本語の説明が出るので暗記は最小限でOK。
- Quick Open: VSCode「Cmd+P」→ Neovim
Ctrl-p(Telescope) - コマンドパレット: VSCode「Cmd+Shift+P」→ Neovim
<leader>sp - エクスプローラ: VSCode「Cmd+B」→ Neovim
Ctrl-b(Neo-tree) - 整形(Format Document): VSCode「Shift+Option+F」→ Neovim
<leader>f(保存時自動も有効) - コメントトグル: VSCode「Cmd+/」→ Neovim
gcc(行)/gc(範囲) - リネーム: VSCode「F2」→ Neovim
<leader>rn - 定義/参照: VSCode「F12/Shift+F12」→ Neovim
gd/gr - 画面分割(エディタ): VSCode(横/縦分割)→ Neovim
Ctrl-w s(横)/Ctrl-w v(縦)、移動はCtrl-w h/j/k/l、サイズ変更はCtrl-w+-<>、等幅Ctrl-w = - 統合ターミナル: VSCode「Ctrl+
」→ Neovimtt (下)/tv (右)/tf (フロート)。複数は:ToggleTerm 2など ID で増設、並べるときはCtrl-w v/s` - Git パネル: VSCode(SCM)→ Neovim
:Neogit/:DiffviewOpen、または<leader>gg(Lazygit) - パンくず: VSCode(上部パンくず)→ Neovim は
dropbarが winbar に表示、<leader>dbで選択 - 現在の関数/ブロック見出し: VSCode 類似 →
nvim-treesitter-context(上部に固定)/<leader>ctでトグル - Docker → dockerls(LSP)
- HashiCorp Terraform → terraformls + vim-terraform(fmt は Conform 経由)
- YAML → yamlls + SchemaStore、yamllint(任意)
- Markdown All in One / markdownlint / Markdown Table → marksman + glow.nvim + vim-table-mode + nvim-lint(markdownlint)
- Git Graph / Pull Requests → neogit + diffview.nvim(PR 操作は Octo.nvim 等で拡張可能)
- Material Icon Theme → nvim-web-devicons
Neovim の基本操作(最初の 5 分)
- プロジェクトを開く: 端末で
nvim . - エクスプローラ:
Ctrl-b→ 目的のファイルで Enter - 検索:
Ctrl-p(ファイル)、<Space> fg(全文検索) - 編集/保存:
iで挿入 →Esc→:w - LSP 補助:
gd / gr / K / <Space> rn / <Space> ca
GitHub へのコミット/プッシュ(Neogit or Lazygit)
- 保存:
:wa - Neogit を開く:
:Neogit - 変更をステージ:
s(選択)/S(全て) - コミット:
c→c(メッセージを 1 行目に書き、Ctrl-c Ctrl-cで確定) - プッシュ:
P→p(注意: 小文字pは Pull、Pが Push のポップアップ) - 差分の確認:
:DiffviewOpen(閉じる:DiffviewClose) - もしくは
<leader>ggで Lazygit を開いて、ステージ/コミット/プッシュまで一気に操作
LSP(Terraform など)の導入手順とコツ
:Masonを開く →terraform-lsを選択してi(Install)- PATH を通す(任意・安心運用):
echo 'export PATH="$HOME/.local/share/nvim/mason/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc - Terraform ファイルを開く →
:LspInfoでterraformlsが Attached になっているか確認
備考
- Mason UI: 移動
j/k、詳細Enter、インストールi、更新u/U、削除X、フィルタ1..5or<C-f>、ヘルプg? - 互換対応:
setup_handlersが未定義な環境でも、インストール済みサーバを検出して個別起動するフォールバックを構成 - 0.11 の非推奨通知:
require('lspconfig')は段階的にvim.lsp.configへ移行予定(当面は動作に影響なし)
トラブルシュート(今回ハマった所)
- Option+Enter が改行にならない →
SendString("\n")を割り当て(送信=CR ではなく LF を直挿入) - IME 合成中の緑カーソル →
compose_cursorをシアンに変更 - 隠し/無視ファイルが見えない(tfvars など)→ Neo-tree の
hide_gitignored=false,hide_dotfiles=false、Telescope は<Space> faで hidden+no_ignore 検索 - 保存時に markdownlint エラー(ENOENT)→
nvim-lintを「コマンドが見つかった時だけ実行」に変更。導入時はbrew install markdownlint-cli yamllintなど - Neogit で Push したつもりが反映されない → 小文字
pは Pull。Push はP→p - Cobalt2 適用時に
colorbuddy未導入で失敗 → 依存tjdevries/colorbuddy.nvimを追加、失敗時はvscodeへフォールバック Comment.nvimのInvalid commentstring→ マッピングを遅延実行へ修正(ファイルタイプ確定後に動作)mason-lspconfigのsetup_handlersが未定義 → フォールバック実装で解消
参考リンク(性能・比較・背景)
- WezTerm のレンダリングと GPU アクセラレーション(公式ドキュメント)
https://wezterm.org/config/lua/config/front_end.html - WezTerm 概要(公式サイト)
https://wezterm.org - ベンチ結果の一例(2024-12、個人検証・比較。Ghostty/WezTerm/Kitty/iTerm2 など)
https://caluga.de/v/2024/12/27/ghostty - GitHub Discussions: フレームレート/出力スループットの比較議論(コミュニティ投稿)
https://github.com/wez/wezterm/discussions/3664 - Warp 公式ドキュメントのベンチページ(比較のサンプル。測定条件やバージョン差に注意)
https://docs.warp.dev/how-does-warp-compare/performance
注意: 上記のベンチや所感は測定条件・端末サイズ・GPU/OS/バージョンで大きく変動します。厳密な比較は自環境での再計測が必要です(例:
termbench,vtebenchなど)。
最後に
WezTerm × Neovim の組み合わせで、CLI に居ながら編集〜コミットまでが高速に回るようになりました。 VSCode 完全互換ではないものの、今回の最小セットで “迷わず手が動く” ところまではカバーできています。設定はリポジトリに置いてあるので、フォントやキーは各自の好みに合わせて調整してください。
参考リンク
- WezTerm 公式:
https://wezfurlong.org/wezterm - WezTerm GitHub:
https://github.com/wez/wezterm - Neovim:
https://neovim.io - 記事: WezTerm カスタマイズ(Zenn):
https://zenn.dev/mozumasu/articles/mozumasu-wezterm-customization