aptpod Tech Blog

株式会社アプトポッドのテクノロジーブログです

2024年末のおすすめNeovimプラグイン紹介

aptpod Advent Calendar 2024 12月24日の記事を担当します、 intdashグループの宮内です。

先日、筆者のグループ内で「開発環境の紹介」というテーマで意見交換を行いました。 グループ内ではソフト/ハードともに他人の開発環境に興味がある人が多いようで、 とても盛り上がりました。

ただ、その際に、筆者はNeovimを紹介したのですが、時間の都合上全然紹介しきれませんでした。 今回はこの場を借りて、その時の不完全燃焼感を払拭すべく、閑話休題的な形で、 筆者のNeovimについて紹介していきたいと思います。 ちなみに、グループ内はVSCode使いが多いです。

対象読者

  • これからNeovimを触ってみようと思っている人
  • Neovimのおすすめのプラグインを知りたい人
  • Neovimって一体どんなことができるのか知りたい人

筆者の開発環境について

Neovimは様々なことができるので他のツールとの棲み分けはとても重要です。 ですから、まずNeovimを語る前に、筆者の開発環境について簡単に紹介します。

筆者はintdashミドルウェア開発のサーバーサイドを担当しています。 業務内では下記の言語やファイルを扱うことが多いです。

  • Golangのソースコード
  • Pythonのソースコード
  • (簡単な)シェルスクリプト
  • yamlファイル(openapi.yaml、ci設定など)
  • Docker関連(Dockerfile、compose.yamlなど)
  • マークダウン

また、エディタを含め次のような環境で開発を行っています。

  • Wezterm(端末エミュレータ。Rust製で実行環境を選ばないのが気に入っている。)
  • tmux(ターミナルマルチプレクサ。ターミナル内で複数のセッションを管理できる。)
  • Neovim
  • zsh

さらに、普段はMacから UbuntuへSSH接続し、開発業務は基本的にUbuntu上で行っています。 WeztermはMacにインストールし、あとはさっさとsshでUbuntuの中に入って引きこもり作業している形です。

  • Weztermを開く
  • sshでUbuntuへ入る
  • tmuxでセッションを開く(過去のものがあれば作業中のセッションに入る)
  • tmuxペインを設定しNeovimで作業

本当はNeovim以外にも語りたいことはあるのですが今回はNeovimに絞って紹介します。

設定のベース

Neovimの大きな魅力の一つは、そのカスタマイズ性の高さにあります。しかしその反面、初期状態では機能が少なく、効率的に使い始めるには設定が必要です。 その課題を解決するために、スターターキットとして使えるテンプレートが多数公開されています。例えば、以下のようなものがあります。

それぞれ特徴があるので、自分の好みに合わせて選ぶと良いと思います。

カスタマイズはどのテンプレートでも可能ですが、筆者は「設定がほどよく薄く、自由度が高い」という理由でkickstart.nvimを選んでいます。

kickstart.nvimの運用については、公式のREADME.mdに記載がありますが、筆者は以下の手順で管理しています:

  1. リポジトリのフォーク 自分のGitHubリポジトリにフォークし、カスタマイズや運用を行いやすくしています。

  2. dotfilesでの管理 フォークしたkickstart.nvimをdotfilesリポジトリ内でsubmoduleとして管理しています。

  3. 定期的な同期 フォーク元のリポジトリから最新の変更を定期的にマージし、テンプレートをメンテナンスしています。

以下は具体的な手順です。GitHub CLIを使用した手順です。:

# 最初にkickstart.nvimをフォーク
gh repo fork nvim-lua/kickstart.nvim

# dotfilesリポジトリにsubmoduleとして追加
cd /path/to/dotfiles
git submodule add git@github.com:<ユーザー名>/kickstart.nvim.git ./.config/nvim

# フォーク元のリポジトリと定期的に同期
gh repo sync <ユーザー名>/kickstart.nvim

プラグイン紹介

筆者はNeovimのプラグインを現在 101 個使用しています。 流石にすべてを紹介することはできないので、ここではメインに使用しているプラグインとその設定についてと、一部おもしろいプラグインを紹介します。

それぞれカテゴリごとに紹介します。

プラグイン管理

lazy.nvim

プラグイン管理ツールです。現在、Neovimでのプラグイン管理のデファクトスタンダードとなっている感があります。 例えば、プラグインの読み込みを必要なタイミングに最適化することで、起動速度を速く保つことが可能です。設定も簡単で、多くのユーザーに支持されています。 kickstart.nvimにも組み込まれているのでそのまま使用しています。

mason.nvim & mason-lspconfig

LSP(Language Server Protocol)、DAP(デバッグ)、Formatter、Linterのツールを簡単に管理するためのプラグインです。 MasonInstallコマンドを使用すると、ツールが~/.local/share/nvim/mason/bin/にインストールされ、Neovim内で使用可能になります。 以下のプラグインと連携すると、さらに便利に使えます。 README.md にある内容です。:

  • LSP: lspconfig & mason-lspconfig.nvim
  • DAP: nvim-dap & nvim-dap-ui
  • Linters: null-ls.nvim or nvim-lint
  • Formatters: null-ls.nvim or formatter.nvim

筆者の設定例では、Formatterとしてconform.nvimを使用し、Linterにはnone-ls.nvimnull-ls.nvimのフォーク)を採用しています。

mason-tool-installer.nvim

このプラグインを使用すると、新しい環境でも再現性を持って同じツールセットをインストールできます。 kickstart.nvimにも雛形設定が含まれているため、簡単に導入できます。

以下はMasonでインストールしているツール一覧と、その設定コードです:

require('mason').setup()

-- Masonでインストールするツールを指定
local ensure_installed = {
  'stylua', -- Luaのフォーマッタ
  'gopls', -- Golangの言語サーバー
  'prettier', -- JS/TSのフォーマッタ
  'pyright', -- Pythonの言語サーバー
  -- 省略 ...
}
require('mason-tool-installer').setup { ensure_installed = ensure_installed }

コーディング

nvim-cmp

nvim-cmpは、Neovimでのコード補完を提供するプラグインです。コード補完系のプラグインはいくつかありますが、nvim-cmpはその拡張性と安定性から多くのユーザーに支持されています。 筆者はkickstart.nvimの設定に含まれていたこともあり、そのままnvim-cmpを使用しています。

以下は、筆者が使用しているnvim-cmpの補完ソース一覧です。特に珍しいものはありませんが、必要な補完を網羅しています:

  • L3MON4D3/LuaSnip
  • saadparwaiz1/cmp_luasnip
  • hrsh7th/cmp-nvim-lsp
  • hrsh7th/cmp-path
  • hrsh7th/cmp-nvim-lsp
  • hrsh7th/cmp-nvim-lsp-signature-help
  • hrsh7th/cmp-buffer
  • hrsh7th/cmp-path
  • hrsh7th/cmp-cmdline
  • hrsh7th/cmp-calc
  • hrsh7th/cmp-emoji
  • onsails/lspkind.nvim
  • petertriho/cmp-git

他にも nvim-cmp のソースはたくさんあるので探してみると面白いでしょう。

conform

フォーマッタです。kickstart.nvim に組み込まれているものをそのまま使用しています。 デフォルト設定では保存時に自動フォーマットが有効になっていますが、無効化する場合は設定を変更する必要があります。 Recipe command-to-toggle-format-on-save で紹介されている内容を基本に kickstart用には下記のように読み替えて設定します:

-- オプション
opts = {
  format_on_save = function(bufnr)
    -- Disable with a global or buffer-local variable
    if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
      return
    end
    - 省略
  end,
},


-- config関数
config = function(_, opts)
  vim.api.nvim_create_user_command('FormatDisable', function(args)
    if args.bang then
      -- FormatDisable! will disable formatting just for this buffer
      vim.b.disable_autoformat = true
    else
      vim.g.disable_autoformat = true
    end
  end, {
    desc = 'Disable autoformat-on-save',
    bang = true,
  })
  vim.api.nvim_create_user_command('FormatEnable', function()
    vim.b.disable_autoformat = false
    vim.g.disable_autoformat = false
  end, {
    desc = 'Re-enable autoformat-on-save',
  })
  require('conform').setup(opts)
end
none-ls

none-ls.nvimnull-ls.nvimのフォークで、 diagnostic, codeaction, formatting, completion, hover の設定が可能です。 ですが、Lspの設定やフォーマッタの設定と重複するものがあるので、筆者はdiagnosticとcodeactionのみを使用しています。 また、インストールについてはMasonと統合するプラグインがあるので、あまり活用できていませんが合わせて使用しています。

config = function()
  local null_ls = require 'null-ls'
  null_ls.setup {
    sources = {
      null_ls.builtins.diagnostics.golangci_lint,
      null_ls.builtins.diagnostics.hadolint,
      null_ls.builtins.diagnostics.rstcheck,
      null_ls.builtins.diagnostics.markdownlint.with {
        args = { '--stdin', '-c', vim.fn.expand '$HOME/.markdownlintrc' },
      },
      null_ls.builtins.diagnostics.sqlfluff.with {
        extra_args = { '--dialect', 'postgres' }, -- change to your dialect
      },
      require 'none-ls.diagnostics.ruff',
      null_ls.builtins.code_actions.refactoring,
      null_ls.builtins.code_actions.gomodifytags,
    },
  }
  require('mason-null-ls').setup {}
end

リファレンスとしては「BUILTINS」を良く参照するので紹介しておきます。

ThePrimeagen/refactoring.nvim

refactoring.nvimは、様々なリファクタリング操作をサポートするNeovim用プラグインです。関数抽出や変数リネームといった一般的なリファクタリングに加え、デバッグプリント機能が非常に便利です。 筆者は、特にデバッグプリントの挿入と削除をよく利用しています。下記の設定例では、次の操作を簡単に行えます:

  • <leader>rp:現在行の上にデバッグプリントを挿入。
  • <leader>rd:選択した変数のデバッグプリントを挿入。
  • <leader>rc:挿入済みの全てのデバッグプリントを削除。

以下は設定例です:

vim.keymap.set('n', '<leader>rp', function()
  require('refactoring').debug.printf { below = false }
end)
vim.keymap.set({ 'x', 'n' }, '<leader>rd', function()
  require('refactoring').debug.print_var()
end)
vim.keymap.set('n', '<leader>rc', function()
  require('refactoring').debug.cleanup {}
end)

例えば、以下のようなコードに対して a をデバッグプリントしてみます。:

func add(a int, b int) int {
    return a + b
}

aを選択肢 <leader>rd を押すと、次のようなデバッグプリントが挿入されます:

func add(a int, b int) int {
    // __AUTO_GENERATED_PRINT_VAR_START__
    fmt.Println(fmt.Sprintf("add a: %v", a)) // __AUTO_GENERATED_PRINT_VAR_END__
    return a + b
}

<leader>rpを使うと、次のようなデバッグプリントが挿入されます。

func add(a int, b int) int {
    // __AUTO_GENERATED_PRINTF_START__
    fmt.Println("add 1") // __AUTO_GENERATED_PRINTF_END__
    return a + b
}

Git

gitsign

gitsignは、NeovimでGitの変更内容を視覚的に表示し、操作を補助するプラグインです。 このプラグインはkickstart.nvimに含まれているため、特別な設定は不要です。

kickstart.nvim では ]c[c で変更箇所の行き来が可能で、 <Leader>h に hunk を操作するキーバインドが設定されています。 筆者はgitの操作自体は後述する lazygit で行うことが多いので、メインで使っているのは、変更箇所の移動です。

git-blame.nvim

git-blame.nvimは、特定の行が誰によって、いつ変更されたのかを表示するプラグインです。 このプラグインを有効にすると、現在編集中の行に変更履歴が表示され、コードレビューや変更理由の確認に役立ちます。 有効にすると、下記のようにBlameがコード上に表示されます。

git-blameを表示中

公式リポジトリのスクリーンショットが分かりやすいため、興味のある方はこちらをご覧ください: 公式リポジトリ

diffview.nvim

ソースコード編集中にそのファイルの履歴とか、mainブランチとの差分とか見たいときありますよね。 そんなときに活躍するのがこのプラグインです。 マージツールとしても使用できます。

筆者は特に特殊な設定をしておらずデフォルトで使用しています。

あとはマージツールとして使うこと多いのと、下記のコマンドは良く実行します。:

  • :DiffviewOpen <比較先ブランチなど>
  • :DiffviewOpen <比較先ブランチなど> -- %
  • :DiffviewFileHistory:現在のファイルの変更履歴を表示。
lazygit.nvim

lazygit.nvimは、Neovim内でlazygitを使用できるプラグインです。このプラグインを導入することで、ターミナルに切り替えることなくGit操作を行うことができます。

筆者は以前、vim-fugitiveNeoGitなども使用していたのですがが、シェル上での操作と統合が出来ず、 シェル上ではlazygitを使うため、このプラグインを選びました。操作を統一できる点が非常に便利です。 後述しますが toggleterm を使用して開くこともできるようです。どちらでもさほど大きな差はないと思います。

lazygitからファイルを編集したり、コミットメッセージをNeovimで書くには、以下の設定を.bashrcに追加します:

#### NVIM REMOTE
if [ -n "$NVIM" ]; then
    alias nvim=nvr -cc split --remote-wait +'set bufhidden=wipe'
fi
if [ -n "$NVIM" ]; then
    export VISUAL="nvr -cc split --remote-wait +'set bufhidden=wipe'"
    export EDITOR="nvr -cc split --remote-wait +'set bufhidden=wipe'"
else
    export VISUAL="nvim"
    export EDITOR="nvim"
fi

この設定により、Neovim内でlazygitを使用してもファイル編集やコミットメッセージ作成がシームレスに行えます。

lazygitの設定では、以下を追記します:

os:
    editPreset: "nvim-remote"

こちらの設定をすれば、プラグインのREADMEのファイル編集設定を変更する必要はない(はず)です。

ただし、筆者の環境だと下記の不具合の現象に遭遇しています。四角い領域が出現し、削除ができなくなります。

現象は「Blank window overriding code after opening lazygit.nvim on start screen #134」 に近いです。 コメントにある内容も読んだのですがうまく解消されず、時間があるときに調整してみようと思っています。

検索置換

telescope.nvim

telescope.nvimは、Neovimで効率的にファイル、テキスト、バッファ、Git履歴などを検索するためのファジーファインダープラグインです。 筆者は以前fzfのプラグインを使用していましたが、telescope.nvimは仕組み上拡張機能が作りやすく、他のプラグインとの連携も豊富なため、こちらに切り替えました。

以下は筆者が使っているtelescope.nvimの拡張機能です:

名前 説明
telescope-all-recent.nvim find_filesgit_filesなど通常の選択フィルターに対してスコアリングされた順序で選択できるようになります。
telescope-fzf-native.nvim fzfの表現を統合。fzfユーザーには特に便利です。
telescope-live-grep-args.nvim live_grepに対して、ripgrepのオプションを指定できるようになります。
telescope-recent-files 最近開いたファイル順のフィルターです。

特に telescope-all-recent.nvim はシームレスに統合でき、無意識に恩恵を受けることができるので個人的な感想ですが筋が良いように思います。 ドキュメントにも書いてありますが、次のようにTelescopeのキーバインドを関数で指定する必要があるのでその点は注意しましょう。

vim.keymap.set('n', '<leader>sf', function() require('telescope.builtin').find_files() end, { desc = '[S]earch [F]iles' })
grug-far.nvim

検索置換のプラグインです。一括置換で重宝します。 似た操作感で nvim-spectre というプラグインもあります。 好みで選ぶと良いと思いますが、筆者はnvim-spectreの検索ペインの操作感にどうしてもなれることができず、grug-far.nvimを使用しています。

以前はQuickfixと「quickfix-reflector.vim」を利用して置換を行っていましたが、手数が多いことが少し気になり、 このプラグインに落ち着きました。

デフォルト設定で快適に使用できます。おすすめです。

text-case.nvim

text-case.nvimは、テキストをCamelCase、SnakeCaseなどに変換しつつ、またそれらの賢い置換も可能にするプラグインです。 例:Subs /abc def/ghi jkl/とコマンドを実行すると、AbcDefといった文字列もGhiJkLに変換します。

類似プラグインとしてtpope/vim-abolishもありますが、筆者は現在両方を試しています:

vim-abolish では複数形の置換など特有のルールも持っているため、置換機能としては vim-abolish のほうが高度な印象です。 筆者は状況に応じてどちらを使うか選定中です。

その他

overseer.nvim

overseer.nvimは多機能なタスクランナーで、ビルド、テストなどの開発内のタスクをNeovim内で管理できます。 筆者は以前、vim-dispatchquickrunを利用していましたが、Neovim環境に最適なタスクランナーを探している中でこのプラグインを見つけました。

いくつかタスクを登録してはいますが、もう少しカジュアルに使用できるように時間があるときに拡張したいと思っています。

公式ドキュメントも充実しており、チュートリアルやレシピが提供されています:

筆者は vim-dispatch:Make はよく使っていたので、そのレシピがあったのはとても助かりました。:

:Make similar to vim-dispatch

toggleterm.nvim

toggleterm.nvimは、Neovim内でターミナルウィンドウを簡単に開き、切り替えたり、閉じたりできるプラグインです。 筆者は普段tmuxを使っていますが、「tmuxを開くほどではないちょっとした操作」にはこのプラグインを利用しています。

以下は筆者の設定例です。ターミナルの表示・非表示を<C-z>で切り替え、<leader>ldlazydockerを起動します:

config = function()
  require('toggleterm').setup {
    open_mapping = [[<C-z>]],
    direction = 'horizontal',
    size = 20,
  }

  local lazydocker = require('toggleterm.terminal').Terminal:new {
    cmd = 'lazydocker',
    hidden = true,
    direction = 'float',
  }
  function LazydockerToggle()
    lazydocker:toggle()
  end
  ... 他の設定

  vim.api.nvim_set_keymap('n', '<leader>ld', '<cmd>lua LazydockerToggle()<CR>', { noremap = true, silent = true })
end

tmux との棲み分けについて、筆者は以下のように使い分けています:

  • toggleterm.nvim:同一プロジェクト内でシェル操作をする際に使用。
  • tmux:別プロジェクトの操作や、長時間のターミナルセッションを管理する場合に使用。

普段はdockerを使った開発をしているので、いつでもさっとコンテナの状態を見れる、操作できるというのは体験としてとても心地よいです。

dashboard-nvim

Neovim起動時に表示されるダッシュボードをカスタマイズできるプラグインです。筆者は、曜日ごとに変わるバナーを設定しています。

筆者のダッシュボード

以下は筆者が登録しているショートカットの設定例です: ダッシュボード上で初期の操作のショートカットが簡単にできるため、特に「最初にやることが決まっている人」におすすめです。 筆者はだいたい決まっているので下記を登録しています。

config = function()
  require('dashboard').setup {
    theme = 'hyper',
    config = {
      week_header = {
        enable = true,
      },
      project = {
        enable = false,
      },
      shortcut = {
        { desc = 'Update', group = '@property', action = 'Lazy update', key = 'u' },
        {
          icon = '',
          icon_hl = '@variable',
          desc = 'Files',
          group = 'Label',
          action = 'Telescope git_files',
          key = 'f',
        },
        {
          desc = 'Memo',
          action = 'Telekasten',
          key = 'm',
        },
        {
          desc = 'dotfiles',
          action = 'e ~/dotfiles/README.md',
          key = 'd',
        },
      },
    },
  }
end
rest.nvim

rest.nvimは、Neovim内でHTTPリクエストを実行できるプラグインです。 筆者は以前vim-rest-consoleを使用していましたが、出力が整形されない問題があったため、こちらに移行しました。

特徴としては次のようなものが上げられます:

  • 環境変数を簡単に切り替え可能(Telescope連携)。
  • JetBrainsのHTTP Syntaxをサポート。
  • 安定した整形が可能(jq を使用)

コマンドはいくつか種類がありますが、筆者は下記の用にシンプルに「<C-o>で実行する」「環境変数の変更はTelescopeで実施」の 2つだけショートカット設定をしています。基本的にこの2つの機能しか使っていませんが十分満足しています。 整形のオプションだけ、公式から少し追いづらかったのでそちらも合わせて例として記載しています:

config = function()
  vim.api.nvim_create_autocmd('FileType', {
    pattern = 'json',
    callback = function()
      vim.bo.formatexpr = ''
      vim.bo.formatprg = 'jq'
    end,
  })
  vim.api.nvim_create_autocmd('FileType', {
    pattern = 'http',
    callback = function()
      vim.api.nvim_set_keymap('n', '<Leader><C-o>', ':Rest run<CR>', { noremap = true, silent = true })
      -- first load extension
      require('telescope').load_extension 'rest'
      -- then use it, you can also use the `:Telescope rest select_env` command
      vim.api.nvim_set_keymap('n', '<leader>se', ':Telescope rest select_env<CR>', { noremap = true, silent = true, desc = '[S]earch select [E]nv' })
    end,
  })
end
venn.nvim

エンジニアの皆さんは図を書くことが多いと思いますが、こちらのプラグインはASCIIアートで簡単に図を作成できるプラグインです。 下記のように簡易的なデータフローを表現する際に役立ちます。

  ┌─────┐               ┌───┐
  │start│──────────────►│end│
  └─────┘               └───┘

基本的な操作の流れは次のとおりです:

  1. :set ve=all とする
  2. 文字を書く
  3. visual矩形選択などで選択し :VBox<CR>

公式のREADME.mdに設定は書いてあり、それをそのまま使うことが出来ます。 筆者は若干変えてはいますが次のようにしています。<CR> でボックスができるようにしてある点が気に入っています。:

config = function()
  -- venn.nvim: enable or disable keymappings
  function _G.Toggle_venn()
    local venn_enabled = vim.inspect(vim.b.venn_enabled)
    if venn_enabled == 'nil' then
      vim.b.venn_enabled = true
      vim.cmd [[setlocal ve=all]]
      -- draw a line on HJKL keystokes
      vim.api.nvim_buf_set_keymap(0, 'n', 'J', '<C-v>j:VBox<CR>', { noremap = true })
      vim.api.nvim_buf_set_keymap(0, 'n', 'K', '<C-v>k:VBox<CR>', { noremap = true })
      vim.api.nvim_buf_set_keymap(0, 'n', 'L', '<C-v>l:VBox<CR>', { noremap = true })
      vim.api.nvim_buf_set_keymap(0, 'n', 'H', '<C-v>h:VBox<CR>', { noremap = true })
      -- draw a box by pressing "f" with visual selection
      vim.api.nvim_buf_set_keymap(0, 'v', '<CR>', ':VBox<CR>', { noremap = true })
      print 'venn on'
    else
      vim.cmd [[setlocal ve=]]
      vim.api.nvim_buf_del_keymap(0, 'n', 'J')
      vim.api.nvim_buf_del_keymap(0, 'n', 'K')
      vim.api.nvim_buf_del_keymap(0, 'n', 'L')
      vim.api.nvim_buf_del_keymap(0, 'n', 'H')
      vim.api.nvim_buf_del_keymap(0, 'v', '<CR>')
      vim.b.venn_enabled = nil
      print 'venn off'
    end
  end
  vim.api.nvim_set_keymap('n', '<leader>tv', ':lua Toggle_venn()<CR>', { noremap = true })
end
vim-table-mode

Markdownを書いているとき、どうしても辛いのが表を書くときです。 このプラグインを使用することでマークダウンで辛くなりがちなテーブル編集を楽にすることが出来ます。 いくつか機能はありますが、フォーマット機能だけで筆者は十分で、その他は使用していません。


| Column1 | Column2 | Column3 |
| --------------- | --------------- | --------------- |
| Item1.1 | Item2.1 | Item3.1 |
| Item1.2 | Item2.2 | Item3.2 |
| Item1.3 | Item2.3 | Item3.3 |
| Item1.4 | Item2.4 | Item3.4 |


:TableModeRealineを実行すると下記のようになる。


| Column1         | Column2         | Column3         |
| --------------- | --------------- | --------------- |
| Item1.1         | Item2.1         | Item3.1         |
| Item1.2         | Item2.2         | Item3.2         |
| Item1.3         | Item2.3         | Item3.3         |
| Item1.4         | Item2.4         | Item3.4         |

フォーマットを自動で適宜行ったり、その他テーブル編集に特化した、テーブル編集モードの切り替えもあるのですが、 筆者は :TableModeRealine コマンドを適宜実行して使用することが多いです。

render-markdown.nvim

render-markdown.nvimは、Neovim内でMarkdownファイルを見やすくレンダリングするプラグインです。 筆者はmarkdown-preview.nvimも併用していますが、「Neovim内で完結させたい場面」ではこちらを主に使用しています。

最後に紹介する render-markdown.nvimは、Neovim内でMarkdownファイルを見やすくレンダリングするプラグインです。 良く紹介されているのは markdown-preview.nvim かと思うのですが、 筆者はNeovim引きこもり気味なので、外部ブラウザを使わずにプレビューできないかと、探していたところ発見したのがこちらのプラグインになります。

CopilotChatのプラグインの表示でも適用可能なのも気に入っています。

もちろん、ブラウザで確認したいときもあるので markdown-preview.nvim もたまに使っています。

まとめ

環境をカスタマイズすることで、生産性を飛躍的に向上させることができます。 しかし、本当に大事なのは、「効率化して何を成し遂げたいのか」ということだと筆者は思います。

例えば、以下のような目標があるかもしれません:

  • 家族や趣味の時間を増やしたい。
  • クリエイティブな作業にもっと集中したい。
  • より多くの成果を短時間で出したい。

どのような目標であれ、開発環境を洗練させることで、日々の無駄な時間を削減し、本当に集中すべきことに時間を使う手助けとなります。

この記事を参考に、ぜひ一つでも便利なツールや設定を取り入れてみてください。 筆者は年末年始に環境の棚卸しをするのですが、ちょうど今が良いタイミングではないでしょうか? そして、より充実したエンジニアライフを送れるように頑張りましょう!

私たちのチームでは、Neovim好きなエンジニアを募集中です。興味のある方、私たちと一緒に働きませんか? ぜひご連絡をお待ちしています! 採用ページ

明日はアドベントカレンダー最終日です。毎年恒例のCTO梶田さんの記事をお楽しみに!