NeoVimのおすすめプラグイン ― Recommended plug-ins for NeoVim

World Administrator
2023年7月28日
9 分で読めます
Photo by Lee Campbell / Unsplash

NeoVimは、Vimの進化版として、高度なカスタマイズ性と拡張性を提供するテキストエディタです。Vimユーザーにとってはおなじみのコマンドラインベースのエディタ環境をベースにしつつ、新たな機能やプラグイン開発の手段を導入することで、より効率的な開発作業が可能となります。特に、NeoVimはVimScriptだけでなく、Luaというスクリプト言語を使用して拡張やカスタマイズを行うことができるため、多くの魅力的なプラグインが提供されています。

Luaを使ったカスタマイズの可能性

NeoVimは、Vimの進化版としてLuaというスクリプト言語を採用しており、その強力なカスタマイズ性によって、ユーザーは自分好みのエディタ環境を構築できます。Luaはシンプルな構文と高速な実行速度を持ち、VimScriptよりも簡潔で読みやすいコードを書くことができます。この章では、Luaを使ったNeoVimのカスタマイズの可能性について探求してみましょう。

Luaの基本

Luaは、ブラジルのPUC-Rio(リオデジャネイロ大学)で開発されたスクリプト言語で、組み込みスクリプト言語として広く使用されています。シンプルな構文と高い拡張性を持ち、C言語に近い構造を持つことから、多くのアプリケーションやゲームエンジンなどで利用されています。また、Luaは軽量でありながら高速な実行速度を持ち、リソースを効率的に活用できる特長があります。

NeoVimでのLuaの利用

NeoVimはLuaを使用してカスタマイズやプラグインの開発を行うことができます。従来のVimScriptよりも簡潔な文法を持つLuaは、NeoVimの機能を効果的に拡張するための優れたツールです。例えば、VimScriptでのプラグイン開発は学習コストが高く、書きづらいことがある一方、Luaは読みやすく記述しやすいため、新しいプラグインの作成や既存のプラグインのカスタマイズにおいて大きな利点となります。

NeoVimでのLuaスクリプトの例

以下に、NeoVimでのLuaスクリプトの例を示します。これは、カーソル下の単語をGoogleで検索するための簡単なプラグインです。

-- Google検索プラグイン
vim.api.nvim_set_keymap('n', '<leader>g', ':lua GoogleSearch()<CR>', { noremap = true, silent = true })

function GoogleSearch()
    local word = vim.fn.expand('<cword>')
    local search_url = 'https://www.google.com/search?q=' .. vim.fn.escape(word, ' ')
    vim.fn.jobstart({'open', search_url})
end

このスクリプトは、NeoVimのノーマルモードで <leader>g のショートカットを使って、カーソル下の単語をGoogleで検索するプラグインを定義しています。vim.api.nvim_set_keymap でキーマッピングを設定し、GoogleSearch 関数で検索を実行しています。このように、簡単なLuaスクリプトを使用して、NeoVimの機能を拡張することが可能です。

NeoVimのカスタマイズの幅広さ

Luaを使用することで、NeoVimのカスタマイズの幅が大きく広がります。UIのカスタム化、新しいコマンドの追加、プラグインの開発など、さまざまな領域でLuaの力を活用することができます。Luaは、学習コストが比較的低いため、VimScriptに慣れていないユーザーでも比較的スムーズに活用できるでしょう。

Luaを使用したNeoVimのカスタマイズは、高度な自由度と効率的なコーディングを提供します。シンプルな構文と高速な実行速度は、エディタ環境のカスタマイズや新しい機能の追加において大いに役立ちます。NeoVimのカスタマイズにおいては、Luaを使ったカスタムスクリプトの活用を検討して、自分に最適なエディタ環境を構築しましょう。

既存のVim設定を移行する際の助け

NeoVimへの移行を検討しているVimユーザーにとって、VimScriptで書かれた設定ファイルをNeoVim向けに変換するのは一定の手間がかかることがあります。しかし、その手間を軽減する方法も存在します。例えば、Bing AIを活用して設定ファイルの変換を行うことで、既存の設定をそのままNeoVimで活用することができます。これにより、既に構築したVimのカスタム環境を失うことなく、新たなエディタへのスムーズな移行が可能です。

おすすめプラグイン

coc.nvim

GitHub - neoclide/coc.nvim: Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers.
Nodejs extension host for vim &amp; neovim, load extensions like VSCode and host language servers. - GitHub - neoclide/coc.nvim: Nodejs extension host for vim &amp; neovim, load extensions like VSC…
Make your Vim/Neovim as smart as VS Code

LSPをNeoVimで使うための多機能プラグインです。つまり、補完ができます。

このパッケージを入れるだけでNeoVimがモダンなエディタになります。

coc-emmet

GitHub - neoclide/coc-emmet: Emmet extension for coc.nvim
Emmet extension for coc.nvim. Contribute to neoclide/coc-emmet development by creating an account on GitHub.
Emmet completion support for coc.nvim

cocの拡張プラグインです。

emmetを使えるようになります。

Fern

GitHub - lambdalisue/fern-git-status.vim: 🌿 Add Git status badge integration on file:// scheme on fern.vim
🌿 Add Git status badge integration on file:// scheme on fern.vim - GitHub - lambdalisue/fern-git-status.vim: 🌿 Add Git status badge integration on file:// scheme on fern.vim
Fern (furn) is a general purpose asynchronous tree viewer written in pure Vim script.

ファイラーです。

https://github.com/lambdalisue/fern.vim

fern-git-status.vim

GitHub - lambdalisue/fern.vim: 🌿 General purpose asynchronous tree viewer written in Pure Vim script
🌿 General purpose asynchronous tree viewer written in Pure Vim script - GitHub - lambdalisue/fern.vim: 🌿 General purpose asynchronous tree viewer written in Pure Vim script
fern-git-status is a fern.vim plugin to add git status on node's badge asynchronously like:
https://user-images.githubusercontent.com/546312/89777703-2483cd80-db47-11ea-84dc-7690d2996d89.png

Fernの拡張プラグインです。

gitのステータスがfernに表示されるようになります。

nerdfont.vim

GitHub - lambdalisue/nerdfont.vim: 👓 Fundemental plugin to handle Nerd Fonts in Vim
👓 Fundemental plugin to handle Nerd Fonts in Vim. Contribute to lambdalisue/nerdfont.vim development by creating an account on GitHub.
A simplified version of vim-devicons which does NOT provide any 3rd party integrations in itself. In otherwords, it is a fundemental plugin to handle Nerd Fonts from Vim.

VimのアイコンにNerd Fontsを使うためのプラグインです。

Fernの拡張プラグインではありませんが、同じ作者さんのプラグインであり、相性がとてもいいです。

glyph-palette

GitHub - lambdalisue/glyph-palette.vim: 🎨 An universal palette for Nerd Fonts
🎨 An universal palette for Nerd Fonts. Contribute to lambdalisue/glyph-palette.vim development by creating an account on GitHub.
glyph-palette (Glyph palette) is a plugin to universally apply colors on Nerd Fonts.

Nerd Fontsのアイコンに色をつけるプラグインです。

Fernの拡張プラグインではありませんが、同じ作者さんのプラグインであり、相性がとてもいいです。

fern-renderer-nerdfont.vim

GitHub - lambdalisue/fern-renderer-nerdfont.vim: 🌿 fern.vim plugin which add file type icon through nerdfont.vim
🌿 fern.vim plugin which add file type icon through nerdfont.vim - GitHub - lambdalisue/fern-renderer-nerdfont.vim: 🌿 fern.vim plugin which add file type icon through nerdfont.vim
fern.vim plugin which add file type icons through lambdalisue/nerdfont.vim.

Fernの拡張プラグインです。

FernにNerd Fontsを使ったアイコンを表示します。

前述のnerdfont.vimが必要です。アイコンに色をつけるにも前述のglyph-paletteが必要です。

GitHub Copilot

GitHub - github/copilot.vim: Neovim plugin for GitHub Copilot
Neovim plugin for GitHub Copilot. Contribute to github/copilot.vim development by creating an account on GitHub.
GitHub Copilot uses OpenAI Codex to suggest code and entire functions in real-time right from your editor. Trained on billions of lines of public code, GitHub Copilot turns natural language prompts including comments and method names into coding suggestions across dozens of languages.Copilot.vim is a Vim/Neovim plugin for GitHub Copilot.To learn more, visit https://github.com/features/copilot.

流行りのAIとペアコーディングができます。

goyo.vim

GitHub - junegunn/goyo.vim: :tulip: Distraction-free writing in Vim
:tulip: Distraction-free writing in Vim. Contribute to junegunn/goyo.vim development by creating an account on GitHub.
Distraction-free writing in Vim.

執筆など、集中したいときに余白を調整し見た目を変更してくれるプラグインです。

limelight.vimと相性がよいです。

limelight.vim

GitHub - junegunn/limelight.vim: :flashlight: All the world’s indeed a stage and we are merely players
:flashlight: All the world’s indeed a stage and we are merely players - GitHub - junegunn/limelight.vim: :flashlight: All the world’s indeed a stage and we are merely players
Hyperfocus-writing in Vim.

執筆など、集中したいときに文字色を調整し見た目を変更してくれるプラグインです。

goyo.vimと相性がよいです。

Jetpack.vim

GitHub - tani/vim-jetpack: The lightning-fast plugin manager, alternative to vim-plug
The lightning-fast plugin manager, alternative to vim-plug - GitHub - tani/vim-jetpack: The lightning-fast plugin manager, alternative to vim-plug
Jetpack.vim is a plugin manager for Vim, Neovim, and iVim.The lightning-fast minimalist plugin manager for Vim/ Neovim. vim-jetpack is a jetpack for the most of vimmers. Unbelievably, it is faster than vimrc uses the built-in plugin manager only.

初心者でも簡単に使えて、何もしなくて爆速でNeoVimを起動することができるプラグインマネージャーです。

nvim-treesitter

GitHub - nvim-treesitter/nvim-treesitter: Nvim Treesitter configurations and abstraction layer
Nvim Treesitter configurations and abstraction layer - GitHub - nvim-treesitter/nvim-treesitter: Nvim Treesitter configurations and abstraction layer
The goal of nvim-treesitter is both to provide a simple and easy way to use the interface for tree-sitter in Neovim and to provide some basic functionality such as highlighting based on it:

構文解析を行いシンタックスハイライトを行ってくれるプラグインです。

シンタックスハイライトを正確に反映するには対応したテーマを使用する必要があります。

Tokyonight.nvim

GitHub - folke/tokyonight.nvim: 🏙 A clean, dark Neovim theme written in Lua, with support for lsp, treesitter and lots of plugins. Includes additional themes for Kitty, Alacritty, iTerm and Fish.
🏙 A clean, dark Neovim theme written in Lua, with support for lsp, treesitter and lots of plugins. Includes additional themes for Kitty, Alacritty, iTerm and Fish. - GitHub - folke/tokyonight.nvim…
A dark and light Neovim theme written in Lua ported from the Visual Studio Code TokyoNight theme. Includes extra themes for Kitty, Alacritty, iTerm and Fish.

Tree-sitterに対応した私好みのテーマです。

私はMoonを使っています。

AlacrittyやTmux、WezTermなど様々なツールで使えますのでお試しください。

vim-easymotion

GitHub - easymotion/vim-easymotion: Vim motions on speed!
Vim motions on speed! Contribute to easymotion/vim-easymotion development by creating an account on GitHub.
Vim motion on speed!

カーソル移動を爆速にしてくれます。

telescope.nvim

GitHub - nvim-telescope/telescope.nvim: Find, Filter, Preview, Pick. All lua, all the time.
Find, Filter, Preview, Pick. All lua, all the time. - GitHub - nvim-telescope/telescope.nvim: Find, Filter, Preview, Pick. All lua, all the time.
telescope.nvim is a highly extendable fuzzy finder over lists. Built on the latest awesome features from neovim core. Telescope is centered around modularity, allowing for easy customization.

Luaで実装された最新のファジーファインダーです。

plenary.nvim

GitHub - nvim-lua/plenary.nvim: plenary: full; complete; entire; absolute; unqualified. All the lua functions I don’t want to write twice.
plenary: full; complete; entire; absolute; unqualified. All the lua functions I don&#39;t want to write twice. - GitHub - nvim-lua/plenary.nvim: plenary: full; complete; entire; absolute; unqualifi…

telescope.nvimの依存プラグインです

ripgrep

GitHub - BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern while respecting your gitignore
ripgrep recursively searches directories for a regex pattern while respecting your gitignore - GitHub - BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern while respec…

telescope.nvimの依存プラグインです

番外編

NeoVimの設定ではないのですが、NeoVimを快適に使う上でNerdFontの導入は事実上必須です。

NerdFont

Nerd Fonts - Iconic font aggregator, glyphs/icons collection, & fonts patcher
Iconic font aggregator, collection, & patcher: 9,000+ glyph/icons, 50+ patched fonts: Hack, Source Code Pro, more. Popular glyph collections: Font Awesome, Octicons, Material Design Icons, and more

アイコンなどプログラミングをするのに使う猫の手のような超便利ウルトラ全部のせフォントです。