概要
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 で記録、@ で再生
環境設定
- Vim (gVim) 公式インストーラを利用。Chocolatey なら `choco install vim`。
- Neovim を使う場合は `choco install neovim`。
- 環境変数 PATH にインストール先を追加(必要なら)。
- 端末は Windows Terminal / PowerShell 推奨。Git for Windows 付属の `vim` でもOK。
フォント/表示
等幅フォント(例: FiraCode / JetBrains Mono)を使うと可読性が上がります。
- Homebrew を利用: `brew install vim` または `brew install neovim`。
- macOS 標準の vim は古いことが多いので Homebrew 版推奨。
- iTerm2 + zsh の組み合わせが快適。
フォント/表示
等幅フォント(例: FiraCode / JetBrains Mono)を使うと可読性が上がります。
- Linux: ディストリ標準パッケージを使用 (例: Debian/Ubuntu `sudo apt install vim` / `neovim`)。
- WSL2 上でも同様。フォントや日本語ロケールの設定を整えると快適。
フォント/表示
等幅フォント(例: 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 向けファジー検索 UInvim-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 など)のポータルにも流用できます。