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
Make your Vim/Neovim as smart as VS Code
LSPをNeoVimで使うための多機能プラグインです。つまり、補完ができます。
このパッケージを入れるだけでNeoVimがモダンなエディタになります。
coc-emmet
Emmet completion support for coc.nvim
cocの拡張プラグインです。
emmetを使えるようになります。
Fern
Fern (furn) is a general purpose asynchronous tree viewer written in pure Vim script.
ファイラーです。
https://github.com/lambdalisue/fern.vim
fern-git-status.vim
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
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
glyph-palette (Glyph palette) is a plugin to universally apply colors on Nerd Fonts.
Nerd Fontsのアイコンに色をつけるプラグインです。
Fernの拡張プラグインではありませんが、同じ作者さんのプラグインであり、相性がとてもいいです。
fern-renderer-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 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
Distraction-free writing in Vim.
執筆など、集中したいときに余白を調整し見た目を変更してくれるプラグインです。
limelight.vimと相性がよいです。
limelight.vim
Hyperfocus-writing in Vim.
執筆など、集中したいときに文字色を調整し見た目を変更してくれるプラグインです。
goyo.vimと相性がよいです。
Jetpack.vim
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
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
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
Vim motion on speed!
カーソル移動を爆速にしてくれます。
telescope.nvim
telescope.nvim
is a highly extendable fuzzy finder over lists. Built on the latest awesome features fromneovim
core. Telescope is centered around modularity, allowing for easy customization.
Luaで実装された最新のファジーファインダーです。
plenary.nvim
telescope.nvimの依存プラグインです
ripgrep
telescope.nvimの依存プラグインです
番外編
NeoVimの設定ではないのですが、NeoVimを快適に使う上でNerdFontの導入は事実上必須です。
NerdFont
アイコンなどプログラミングをするのに使う猫の手のような超便利ウルトラ全部のせフォントです。