Vim / Neovim 入門〜実務

— Vim ポータル

概要

Vim は軽量・高速・キーボード中心のテキストエディタ。基本操作は モード を切り替えて行います(Normal / Insert / Visual など)。Neovim は Vim 互換を保ちつつ LSP / Tree-sitter / Lua 拡張などモダン機能を強化した派生です。

  • 端末でも GUI でも同じ操作感
  • 設定は ~/.vimrc または ~/.config/nvim/init.lua
  • プラグインで検索・補完・整形・Git 連携まで強化可能

学習の最短ルート: 移動・編集・検索分割・バッファプラグイン管理LSP/フォーマッタ

基本

  • モード: Normal (コマンド), Insert (入力), Visual (選択)
  • カウント: 5j のように数字で回数指定
  • テキストオブジェクト: ci( / di" などで囲みを操作
  • レジスタ: コピー先/貼り付け元 "{name}
  • マクロ: q で記録、@ で再生

環境設定

  1. Vim (gVim) 公式インストーラを利用。Chocolatey なら `choco install vim`。
  2. Neovim を使う場合は `choco install neovim`。
  3. 環境変数 PATH にインストール先を追加(必要なら)。
  4. 端末は Windows Terminal / PowerShell 推奨。Git for Windows 付属の `vim` でもOK。

フォント/表示

等幅フォント(例: FiraCode / JetBrains Mono)を使うと可読性が上がります。

基礎

  • 移動: w, b, 0, $, gg, G
  • 編集: i, a, o, dd, yy, p
  • 検索: /?、繰り返し n/N
  • モード切替: Esc で Normal

おすすめ設定スニペット

" --- Minimal .vimrc ---
set nocompatible
syntax on
set number
set clipboard=unnamedplus
set ignorecase smartcase
set tabstop=2 shiftwidth=2 expandtab
set splitbelow splitright
set hidden

" マップ例
nnoremap <Space> <Nop>
let mapleader = " "
nnoremap <Leader>ff :Files<CR>

導入

まずは標準機能に慣れてからプラグインを追加しましょう。プラグイン管理は vim-plug / dein.vim / lazy.nvim など。

" ~/.vim/autoload/plug.vim を設置後:
call plug#begin('~/.vim/plugged')
  Plug 'tpope/vim-surround'
  Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
  Plug 'junegunn/fzf.vim'
  Plug 'itchyny/lightline.vim'
call plug#end()

Neovim 最小設定 (Lua)

-- ~/.config/nvim/init.lua
vim.opt.number = true
vim.opt.clipboard = 'unnamedplus'
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.keymap.set('n', '<leader>ff', '<cmd>Telescope find_files<CR>')

開発現場

  • LSP とフォーマッタ: Neovim なら nvim-lspconfig + conform.nvim
  • Git 連携: gitsigns.nvim / vim-fugitive
  • 検索・ジャンプ: fzf.vim / telescope.nvim
  • UI: lightline.vim / lualine.nvim

チームで共有するなら .vimrc テンプレや init.lua をリポジトリ管理。

コマンド一覧

カテゴリ キー/コマンド 説明 補足
ファイル :w 保存 ファイルを保存
ファイル :q 終了 Vimを終了
ファイル :wq 保存して終了 保存して終了
ファイル :q! 保存せず終了 強制終了
ファイル :e {file} ファイルを開く 別ファイルを開く
検索 /pattern 前方検索 正規表現可
検索 ?pattern 後方検索 正規表現可
検索 n / N 次/前の一致へ 繰り返し
置換 :%s/old/new/g 全置換 ファイル全体
置換 :%s/old/new/gc 確認付き置換 1件ずつ確認
移動 h j k l ← ↓ ↑ → 基本移動
移動 w / b 単語の先/前へ 単語単位
移動 0 / $ 行頭 / 行末 行移動
移動 gg / G 先頭 / 末尾 ファイル移動
編集 i / a 挿入(手前/後) Insert モードへ
編集 o / O 下/上に行追加 Insert モードへ
編集 x 1文字削除 Delete char
編集 dd 行削除 Delete line
編集 yy 行コピー Yank line
編集 p / P 貼り付け(後/前) Paste
編集 u / Ctrl+r 元に戻す/やり直し Undo/Redo
可視選択 v / V / Ctrl+v 文字/行/矩形選択 Visual モード
ウィンドウ :split / :vsplit 水平/垂直分割 分割ウィンドウ
ウィンドウ Ctrl+w w 分割の移動 次のウィンドウへ
ウィンドウ Ctrl+w = サイズ均等化 レイアウト整形
バッファ :ls バッファ一覧 開いているファイル
バッファ :bnext / :bprev 次/前のバッファ バッファ移動
タブ :tabnew 新規タブ 空タブを開く
タブ gt / gT 次/前のタブ タブ移動
マクロ q{reg} ... q マクロ記録 レジスタ {reg} に記録
マクロ @{reg} マクロ再生 記録を再生

最新情報

外部フィードを使う場合は、JSON を読み込んでここにレンダリングする実装に変更可能。

応用

  • テキストオブジェクト徹底活用: ci(, da" など
  • クイックフィックス/ロケーションリストでエラー巡回
  • マクロで繰り返し編集を自動化

検索・置換 Tips

# 行頭の空白をタブに置換(ファイル全体)
:%s/^\s\+/	/g

# 選択範囲だけ置換(ビジュアル選択後)
:'<,'>s/foo/bar/g

発展

  • Lua による Neovim 拡張(プラグイン開発)
  • Treesitter による構文ハイライト・フォールド
  • Remote UI / Terminal Multiplexer (tmux) 連携

同じようなツールと比較

ツール強み留意点
Vim 軽量・端末で高速・豊富なプラグイン LSP/最新体験はNeovimが先行することも
Neovim LSP/Tree-sitter/拡張が強力・Lua 従来Vimスクリプトとの差分学習が必要
Emacs 拡張性無限・Elisp 学習コストが高い・キーバインド独特
Helix モダンUI・デフォルトで多機能 設定/拡張の情報量が少なめ
VS Code + Vim拡張 GUIで手軽・Vim流儀を取り入れ可能 Vim本体ほど軽くはない

最小構成の .vimrc

" --- Minimal .vimrc ---
set nocompatible
syntax on
set number
set clipboard=unnamedplus
set ignorecase smartcase
set tabstop=2 shiftwidth=2 expandtab
set splitbelow splitright
set hidden

" マップ例
nnoremap <Space> <Nop>
let mapleader = " "
nnoremap <Leader>ff :Files<CR>

vim-plug でプラグイン管理

" ~/.vim/autoload/plug.vim を設置後:
call plug#begin('~/.vim/plugged')
  Plug 'tpope/vim-surround'
  Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
  Plug 'junegunn/fzf.vim'
  Plug 'itchyny/lightline.vim'
call plug#end()

Neovim (init.lua) 最小例

-- ~/.config/nvim/init.lua
vim.opt.number = true
vim.opt.clipboard = 'unnamedplus'
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.keymap.set('n', '<leader>ff', '<cmd>Telescope find_files<CR>')

検索・置換のコツ

# 行頭の空白をタブに置換(ファイル全体)
:%s/^\s\+/	/g

# 選択範囲だけ置換(ビジュアル選択後)
:'<,'>s/foo/bar/g

プラグインマネージャ

  • vim-plug — 軽量・直感的。Plug 宣言で管理。
  • dein.vim — 高速・柔軟。キャッシュで起動高速化。
  • lazy.nvim (NeoVim) — 遅延読み込みなど最適化が容易。

基本プラグイン

  • tpope/vim-surround — 括弧やクォートの囲み編集を快適に
  • tpope/vim-commentary — コメントのトグル (gc)
  • junegunn/fzf.vim — 曖昧検索 (fzf) 連携
  • preservim/nerdtree — ファイルツリー
  • nvim-telescope/telescope.nvim — Neovim 向けファジー検索 UI
  • nvim-treesitter/nvim-treesitter — 構文解析を強化 (Neovim)
  • itchyny/lightline.vim — 軽量ステータスライン
  • lewis6991/gitsigns.nvim — Git 差分・ブレイム (Neovim)
  • neovim/nvim-lspconfig — LSP クライアント設定 (Neovim)
  • windwp/nvim-autopairs — 自動ペア挿入 (Neovim)

より具体的に

サイト全体のパスを使ったリンク例:

<a href="https://sunstripe.main.jp/" target="_blank">🏠 HOME</a>
<a href="https://sunstripe.main.jp/programming/" target="_blank">プログラミングTOP</a>
<a href="https://sunstripe.main.jp/programming/WebDevelopment/" target="_blank">Web開発</a>
<a href="https://sunstripe.main.jp/programming/DesignPatterns/" target="_blank">デザインパターン</a>

このページのテンプレはそのままコピーして他技術(Git, SVN, Firebase など)のポータルにも流用できます。

表示例

🏠 HOME プログラミングTOP Web開発 デザインパターン