SJ blog
tools
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

Vim/Neovim入門:なぜ今もVimが愛されるのか

Vimモードの基本からNeovimのモダンな設定まで解説。ターミナル作業・SSH環境・高速テキスト編集でVimが今も選ばれる理由と、最初に覚えるべき操作を紹介します。

一言結論

Vimの最大の投資対効果はモード操作とhjkl移動の習得にあり、この基礎さえ固めればSSH先・コンテナ内・あらゆる環境でGUI不要の高速テキスト編集が可能になり、Neovim+LSPに発展させればモダンIDEと同等の開発体験を得られる。

なぜ2026年にVimか

  • SSH先やコンテナ内でも使える — GUIなし環境でもGitでpullして即使える
  • ホームポジションを崩さない — マウスもカーソルキーも不要
  • どの環境にも存在するvi はPOSIX標準、Dockerイメージにも標準搭載
  • Neovim + LSP でモダンIDEと同等の機能に

Vimの「モード」を理解する

Vimが難しく感じる最大の理由はモードの概念。

Normal モード   → デフォルト。移動・操作
Insert モード   → i/a/o で入力。Esc で Normal に戻る
Visual モード   → v で文字選択、V で行選択
Command モード  → : でコマンド入力(保存・検索・置換など)
# モードの切り替え
i  → Normal → Insert(カーソル前に挿入)
a  → Normal → Insert(カーソル後に挿入)
o  → Normal → Insert(下に新しい行を開く)
Esc or Ctrl+[ → Insert → Normal に戻る

# 保存・終了
:w    → 保存
:q    → 終了
:wq   → 保存して終了
:q!   → 保存せず強制終了

まず覚える移動コマンド

h j k l   → 左 下 上 右(カーソルキーは使わない)

# 単語単位
w   → 次の単語の先頭へ
b   → 前の単語の先頭へ
e   → 次の単語の末尾へ

# 行
0   → 行頭
^   → 行頭(空白を除く)
$   → 行末

# ファイル全体
gg  → ファイル先頭
G   → ファイル末尾
:50 → 50行目へジャンプ

# スクロール
Ctrl+d → 半ページ下
Ctrl+u → 半ページ上

テキスト操作(Operator + Motion)

Vimの真髄は「操作 + 動作範囲」の組み合わせ。

d  → 削除(delete)
y  → コピー(yank)
c  → 変更(change)= 削除してInsertモードへ

# 組み合わせ例
dw  → 1単語削除
d3w → 3単語削除
dd  → 1行削除
yy  → 1行コピー
cc  → 1行変更
gg  → ファイル先頭
dG  → カーソルからファイル末尾まで削除

# テキストオブジェクト(強力)
di"  → "..." の中を削除(ダブルクォートの中身)
ci(  → (...) の中を変更
da{  → {...} ごと削除({} 自体も含む)
vip  → 現在の段落を選択

検索と置換

/pattern   → 前方検索(n: 次へ, N: 前へ)
?pattern   → 後方検索
*          → カーソル下の単語を検索

# 置換(コマンドモード)
:%s/old/new/g     → ファイル全体で置換
:%s/old/new/gc    → 確認しながら置換
:10,20s/old/new/  → 10〜20行目だけ置換

Neovim + モダンな設定

Neovim は Vim から派生し、Lua で設定を書けるモダンな実装。

-- ~/.config/nvim/init.lua
vim.opt.number = true          -- 行番号表示
vim.opt.relativenumber = true  -- 相対行番号
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
vim.opt.ignorecase = true
vim.opt.smartcase = true

-- リーダーキーをスペースに設定
vim.g.mapleader = " "

-- よく使うキーマップ
vim.keymap.set("n", "<leader>w", ":w<CR>")         -- Space+w で保存
vim.keymap.set("n", "<leader>q", ":q<CR>")         -- Space+q で終了
vim.keymap.set("n", "<C-h>", "<C-w>h")             -- ウィンドウ移動
vim.keymap.set("n", "<C-l>", "<C-w>l")

プラグインマネージャー(lazy.nvim)

-- ~/.config/nvim/lua/plugins.lua
return {
  -- LSP(言語サーバー)
  { "neovim/nvim-lspconfig" },
  { "williamboman/mason.nvim" },   -- LSPのインストール管理

  -- 補完
  { "hrsh7th/nvim-cmp" },

  -- ファジーファインダー
  { "nvim-telescope/telescope.nvim" },

  -- ファイルツリー
  { "nvim-tree/nvim-tree.lua" },

  -- シンタックスハイライト
  { "nvim-treesitter/nvim-treesitter" },
}

VSCode でVimモードを使う

Vimに完全移行しなくても、VSCode拡張「Vim」でVimキーバインドだけ使える。

// settings.json
{
  "vim.enable": true,
  "vim.useSystemClipboard": true,
  "vim.leader": "<Space>",
  "vim.normalModeKeyBindingsNonRecursive": [
    { "before": ["<Leader>", "w"], "commands": ["workbench.action.files.save"] }
  ]
}

学習ロードマップ

Week 1: hjkl, i/Esc, :wq/:q!  → "Vimから脱出できる"レベル
Week 2: w/b/e, 0/$, dw/dd/yy/p → 基本的な編集
Week 3: /検索, :%s 置換, テキストオブジェクト
Month 2: マクロ(q), ウィンドウ分割(:sp/:vs), バッファ管理

vimtutor コマンドでインタラクティブなチュートリアルが起動します(日本語版: vimtutor ja)。


参考: Neovim 公式 / Vim公式 / Learn Vim