Vim使い方完全ガイド:初心者から上級者まで徹底解説【2025年版】
はじめに
プログラマーやシステム管理者にとって、テキストエディタは最も重要なツールの一つです。その中でもVim(ヴィム)は、40年以上の歴史を持つ高機能なテキストエディタとして、世界中の開発者に愛用されています。
本記事では、Vimの基本的な使い方から応用テクニックまで、実践的な内容を交えながら詳しく解説します。Linux、macOS、Windowsすべての環境で使えるVimを習得して、あなたの開発効率を劇的に向上させましょう。
Vimとは?その特徴と魅力
Vimの基本概念
Vim(Vi IMproved)は、1991年にBram Moolenaarによって開発されたテキストエディタです。Unixの標準エディタ「vi」を拡張・改良したもので、現在も活発に開発が続けられています。
Vimの主な特徴
- モード指向エディタ:異なるモードでの操作が特徴
- 軽量で高速:リソース消費が少なく、大きなファイルでも快適
- 高いカスタマイズ性:プラグインや設定で機能を無限に拡張
- キーボード中心:マウスを使わずに全ての操作が可能
- クロスプラットフォーム:Linux、macOS、Windows対応
なぜVimを学ぶべきか?
- 生産性の向上:慣れると他のエディタより圧倒的に速い
- 汎用性:ほぼ全てのUnix系システムに標準でインストール
- 学習投資の価値:一度覚えれば一生使えるスキル
- 開発現場での需要:多くの企業でVimスキルが評価される
Vimのインストールと初期設定
各OSでのインストール方法
Linux(Ubuntu/Debian)
sudo apt update
sudo apt install vim
macOS
# Homebrewを使用
brew install vim
# または最新版のMacVim
brew install macvim
Windows
- Vim公式サイトからダウンロード
- インストーラーを実行
- Windows Subsystem for Linux(WSL)でLinux版を使用も可能
初期設定の重要性
Vimを快適に使うためには、設定ファイル「.vimrc」のカスタマイズが重要です。
基本的な.vimrc設定例
" 基本設定
set number " 行番号表示
set relativenumber " 相対行番号表示
set tabstop=4 " タブ幅を4に設定
set shiftwidth=4 " インデント幅を4に設定
set expandtab " タブをスペースに展開
set autoindent " 自動インデント
set smartindent " スマートインデント
set hlsearch " 検索結果をハイライト
set incsearch " インクリメンタル検索
set ignorecase " 大文字小文字を区別しない検索
set smartcase " 大文字が含まれる場合は区別する
syntax on " シンタックスハイライト有効
Vimの基本操作:モードの理解
Vimの3つの基本モード
Vimの最大の特徴はモード指向であることです。主要な3つのモードを理解することが、Vim習得の第一歩です。
1. ノーマルモード(Normal Mode)
- デフォルトモード:Vim起動時の状態
- 機能:カーソル移動、テキスト編集、コマンド実行
- 移行方法:他のモードから
Esc
キーで戻る
2. インサートモード(Insert Mode)
- 機能:テキストの入力・編集
- 移行方法:ノーマルモードから
i
、a
、o
などで移行 - 特徴:一般的なエディタと同じ感覚で文字入力
3. ビジュアルモード(Visual Mode)
- 機能:テキストの選択と一括操作
- 移行方法:ノーマルモードから
v
で移行 - 種類:文字選択(v)、行選択(V)、矩形選択(Ctrl+v)
4. コマンドラインモード(Command-line Mode)
- 機能:Vimコマンドの実行、ファイル操作
- 移行方法:ノーマルモードから
:
で移行 - 用途:保存、検索置換、設定変更など
モード切り替えの実践
ノーマルモード
↓ i, a, o
インサートモード
↓ Esc
ノーマルモード
↓ v, V, Ctrl+v
ビジュアルモード
↓ Esc
ノーマルモード
↓ :, /, ?
コマンドラインモード
基本的なカーソル移動とナビゲーション
基本的なカーソル移動
Vimでは矢印キーも使えますが、ホームポジションでの操作が推奨されます。
基本移動キー
- h:左に移動
- j:下に移動
- k:上に移動
- l:右に移動
効率的な移動コマンド
単語単位の移動
- w:次の単語の先頭に移動
- b:前の単語の先頭に移動
- e:単語の末尾に移動
行内移動
- 0:行の先頭に移動
- $:行の末尾に移動
- ^:行の最初の非空白文字に移動
ページ単位移動
- Ctrl+f:1ページ下に移動
- Ctrl+b:1ページ上に移動
- Ctrl+d:半ページ下に移動
- Ctrl+u:半ページ上に移動
ファイル内移動
- gg:ファイルの先頭に移動
- G:ファイルの末尾に移動
- 数字+G:指定行に移動(例:10G で10行目)
ジャンプとマーク機能
ジャンプリスト
- Ctrl+o:前の位置に戻る
- Ctrl+i:次の位置に進む
マーク機能
ma " 現在位置をマーク'a'に設定
'a " マーク'a'の位置にジャンプ
:marks " 設定されているマークを一覧表示
テキスト編集の基本操作
文字・単語の削除
基本的な削除コマンド
- x:カーソル位置の1文字を削除
- dw:単語を削除
- dd:行を削除
- D:カーソル位置から行末まで削除
削除コマンドの組み合わせ
d0 " 行頭からカーソル位置まで削除
d$ " カーソル位置から行末まで削除
d3w " 3つの単語を削除
d5j " 現在行から下5行まで削除
コピー・ペースト操作
ヤンク(コピー)
- yy:現在行をコピー
- yw:単語をコピー
- y$:カーソル位置から行末までコピー
ペースト
- p:カーソル位置の後にペースト
- P:カーソル位置の前にペースト
レジスタを使った高度なコピー・ペースト
"ayy " 現在行をレジスタ'a'にコピー
"ap " レジスタ'a'の内容をペースト
:reg " レジスタの内容を一覧表示
アンドゥ・リドゥ
- u:直前の操作を取り消し(アンドゥ)
- Ctrl+r:取り消しを取り消し(リドゥ)
- U:現在行の全ての変更を取り消し
ファイル操作とバッファ管理
ファイルの開き方
コマンドラインからのファイルオープン
vim filename.txt # 単一ファイルを開く
vim file1 file2 # 複数ファイルを開く
vim -o file1 file2 # 水平分割で開く
vim -O file1 file2 # 垂直分割で開く
Vim内でのファイル操作
:e filename " ファイルを開く
:w " ファイルを保存
:w filename " 別名で保存
:q " 終了
:wq " 保存して終了
:q! " 強制終了(変更を破棄)
:x " 変更がある場合のみ保存して終了
バッファとウィンドウ管理
バッファ操作
:buffers " バッファ一覧表示(:lsも同じ)
:b 2 " バッファ番号2に切り替え
:b filename " ファイル名でバッファ切り替え
:bn " 次のバッファに移動
:bp " 前のバッファに移動
:bd " 現在のバッファを閉じる
ウィンドウ分割
:split " 水平分割
:vsplit " 垂直分割
Ctrl+w h " 左のウィンドウに移動
Ctrl+w j " 下のウィンドウに移動
Ctrl+w k " 上のウィンドウに移動
Ctrl+w l " 右のウィンドウに移動
Ctrl+w c " ウィンドウを閉じる
Ctrl+w o " 現在のウィンドウ以外を閉じる
タブ機能
:tabnew " 新しいタブを開く
:tabnext " 次のタブに移動(gtでも可)
:tabprev " 前のタブに移動(gTでも可)
:tabclose " タブを閉じる
検索と置換の活用法
基本的な検索
検索の実行
/pattern " 前方検索
?pattern " 後方検索
n " 次の検索結果に移動
N " 前の検索結果に移動
* " カーソル位置の単語を前方検索
# " カーソル位置の単語を後方検索
検索オプション
:set hlsearch " 検索結果をハイライト
:set incsearch " インクリメンタル検索
:set ignorecase " 大文字小文字を区別しない
:set smartcase " 検索パターンに大文字が含まれる場合は区別
:nohlsearch " ハイライトを一時的に無効化
高度な置換操作
基本的な置換
:s/old/new/ " 現在行の最初のoldをnewに置換
:s/old/new/g " 現在行のすべてのoldをnewに置換
:%s/old/new/g " ファイル全体のoldをnewに置換
:%s/old/new/gc " 確認しながら置換
正規表現を使った置換
:%s/\<word\>/replacement/g " 単語境界を指定した置換
:%s/^$/blank_line/g " 空行をblank_lineに置換
:%s/\d\+/NUMBER/g " 数字をNUMBERに置換
範囲を指定した置換
:1,10s/old/new/g " 1-10行で置換
:'<,'>s/old/new/g " ビジュアル選択範囲で置換
:.,$s/old/new/g " 現在行からファイル末尾まで
Vimの中級テクニック
マクロ機能の活用
マクロは繰り返し作業を自動化する強力な機能です。
マクロの記録と実行
qa " マクロの記録開始(レジスタ'a'に記録)
# 操作を実行
q " マクロの記録終了
@a " マクロを実行
@@ " 直前のマクロを再実行
10@a " マクロを10回実行
実践的なマクロ例
" 各行の先頭に番号を追加するマクロ
qa0i1. ^[jq
ビジュアルモードの応用
ビジュアルブロック(矩形選択)
Ctrl+v " ビジュアルブロックモード開始
# カーソル移動で範囲選択
I " 選択範囲の各行の先頭に挿入
A " 選択範囲の各行の末尾に挿入
ビジュアルモードでの一括操作
# 選択範囲での操作例
> " インデント追加
< " インデント削除
:s/old/new/ " 選択範囲での置換
:sort " 選択範囲のソート
テキストオブジェクト
Vimのテキストオブジェクトを理解すると、より効率的な編集が可能になります。
基本的なテキストオブジェクト
diw " 単語を削除(delete inner word)
daw " 単語とその前後の空白を削除(delete a word)
di" " ダブルクォート内を削除
da" " ダブルクォートも含めて削除
dip " 段落を削除(delete inner paragraph)
よく使うテキストオブジェクト
- w:word(単語)
- s:sentence(文)
- p:paragraph(段落)
- t:tag(HTMLタグ)
- (), [], {}:各種括弧
- "", '':クォート
プラグイン管理と拡張
プラグインマネージャーの選択
vim-plug(推奨)
" .vimrcに追加
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
Plug 'junegunn/fzf.vim'
Plug 'tpope/vim-fugitive'
call plug#end()
Vundle
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'preservim/nerdtree'
call vundle#end()
必須プラグインの紹介
ファイルエクスプローラー:NERDTree
Plug 'preservim/nerdtree'
" 設定例
nnoremap <C-n> :NERDTreeToggle<CR>
ファジーファインダー:fzf.vim
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
" 使用例
:Files " ファイル検索
:Buffers " バッファ検索
:Rg " テキスト検索(ripgrepが必要)
Git統合:vim-fugitive
Plug 'tpope/vim-fugitive'
" 使用例
:Gstatus " git status
:Gcommit " git commit
:Gdiff " git diff
ステータスライン:vim-airline
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
設定ファイル(.vimrc)のカスタマイズ
中級者向け.vimrc設定例
" ==============================================================================
" 基本設定
" ==============================================================================
set nocompatible " Vi互換モードを無効
set encoding=utf-8 " 文字エンコーディング
set fileencoding=utf-8 " ファイル保存時の文字エンコーディング
set number " 行番号表示
set relativenumber " 相対行番号表示
set cursorline " 現在行をハイライト
set showmatch " 対応する括弧をハイライト
set ruler " ルーラー表示
" ==============================================================================
" インデント設定
" ==============================================================================
set tabstop=4 " タブ幅
set shiftwidth=4 " 自動インデント幅
set expandtab " タブをスペースに展開
set autoindent " 自動インデント
set smartindent " スマートインデント
" ==============================================================================
" 検索設定
" ==============================================================================
set hlsearch " 検索結果をハイライト
set incsearch " インクリメンタル検索
set ignorecase " 大文字小文字を区別しない
set smartcase " 大文字が含まれる場合は区別する
" ==============================================================================
" 表示設定
" ==============================================================================
syntax on " シンタックスハイライト
set background=dark " 背景色
colorscheme desert " カラースキーム
set laststatus=2 " ステータスライン常に表示
" ==============================================================================
" キーマッピング
" ==============================================================================
" Escキーの代替
inoremap jj <Esc>
" 検索ハイライトを無効化
nnoremap <Esc><Esc> :nohlsearch<CR>
" ファイル保存
nnoremap <C-s> :w<CR>
プログラミング言語別設定
" Python用設定
autocmd FileType python setlocal tabstop=4 shiftwidth=4 expandtab
" JavaScript用設定
autocmd FileType javascript setlocal tabstop=2 shiftwidth=2 expandtab
" HTML用設定
autocmd FileType html setlocal tabstop=2 shiftwidth=2 expandtab
Vim実践テクニック
効率的なワークフロー
セッション管理
:mksession! mysession.vim " セッション保存
vim -S mysession.vim " セッション復元
クイックフィックス
:copen " クイックフィックスウィンドウを開く
:cnext " 次のエラーに移動
:cprev " 前のエラーに移動
:cclose " クイックフィックスウィンドウを閉じる
ヘルプシステムの活用
:help " ヘルプを開く
:help :command " 特定のコマンドのヘルプ
:help mapping " キーマッピングのヘルプ
Ctrl+] " リンクを辿る
Ctrl+o " 前のヘルプに戻る
トラブルシューティング
よくある問題と解決方法
- 文字化け問題
:set encoding=utf-8
:set fileencoding=utf-8
- 改行コードの問題
:set fileformat=unix " Unix形式
:set fileformat=dos " Windows形式
- プラグインが動かない
:PluginInstall " Vundleの場合
:PlugInstall " vim-plugの場合
まとめ:Vimマスターへの道
学習のステップ
- 基礎段階(1-2週間)
- モードの理解と基本操作
- カーソル移動とテキスト編集
- ファイル操作の習得
- 中級段階(1-2ヶ月)
- 検索・置換の活用
- マクロとビジュアルモード
- プラグインの導入
- 上級段階(3ヶ月以上)
- .vimrcの高度なカスタマイズ
- 独自のキーマッピング作成
- ワークフロー最適化
継続的な学習のコツ
- 毎日使う:少しずつでも毎日Vimを使用
- 新しいコマンドを覚える:週に1-2個の新しいコマンドを習得
- コミュニティに参加:Vim関連の情報を積極的に収集
- 設定を見直す:定期的に.vimrcを改善
Vimの将来性
Vimは40年以上の歴史を持ちながら、今でも進化を続けています。近年では:
- Neovim:Vimの現代的な実装
- **LSP(Language Server Protocol)**対応:IDE並みの機能
- 非同期処理:大型ファイルの快適な編集
これらの発展により、Vimは単なるテキストエディタから、現代的な開発環境へと進化しています。
最後に
Vimの習得は時間がかかりますが、一度身につければ一生使えるスキルです。最初は操作に戸惑うかもしれませんが、継続的な練習により、必ず効率的なテキスト編集ができるようになります。
本記事で紹介した内容を参考に、ぜひVimの世界に足を踏み入れてみてください。あなたの開発効率が劇的に向上することをお約束します。