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)。