Vim使い方完全ガイド:初心者から上級者まで徹底解説【2025年版】

はじめに

プログラマーやシステム管理者にとって、テキストエディタは最も重要なツールの一つです。その中でもVim(ヴィム)は、40年以上の歴史を持つ高機能なテキストエディタとして、世界中の開発者に愛用されています。

本記事では、Vimの基本的な使い方から応用テクニックまで、実践的な内容を交えながら詳しく解説します。Linux、macOS、Windowsすべての環境で使えるVimを習得して、あなたの開発効率を劇的に向上させましょう。

Vimとは?その特徴と魅力

Vimの基本概念

Vim(Vi IMproved)は、1991年にBram Moolenaarによって開発されたテキストエディタです。Unixの標準エディタ「vi」を拡張・改良したもので、現在も活発に開発が続けられています。

Vimの主な特徴

  1. モード指向エディタ:異なるモードでの操作が特徴
  2. 軽量で高速:リソース消費が少なく、大きなファイルでも快適
  3. 高いカスタマイズ性:プラグインや設定で機能を無限に拡張
  4. キーボード中心:マウスを使わずに全ての操作が可能
  5. クロスプラットフォーム: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

  1. Vim公式サイトからダウンロード
  2. インストーラーを実行
  3. 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)

  • 機能:テキストの入力・編集
  • 移行方法:ノーマルモードからiaoなどで移行
  • 特徴:一般的なエディタと同じ感覚で文字入力

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          " 前のヘルプに戻る

トラブルシューティング

よくある問題と解決方法

  1. 文字化け問題
:set encoding=utf-8
:set fileencoding=utf-8

  1. 改行コードの問題
:set fileformat=unix    " Unix形式
:set fileformat=dos     " Windows形式

  1. プラグインが動かない
:PluginInstall     " Vundleの場合
:PlugInstall       " vim-plugの場合

まとめ:Vimマスターへの道

学習のステップ

  1. 基礎段階(1-2週間)
    • モードの理解と基本操作
    • カーソル移動とテキスト編集
    • ファイル操作の習得
  2. 中級段階(1-2ヶ月)
    • 検索・置換の活用
    • マクロとビジュアルモード
    • プラグインの導入
  3. 上級段階(3ヶ月以上)
    • .vimrcの高度なカスタマイズ
    • 独自のキーマッピング作成
    • ワークフロー最適化

継続的な学習のコツ

  1. 毎日使う:少しずつでも毎日Vimを使用
  2. 新しいコマンドを覚える:週に1-2個の新しいコマンドを習得
  3. コミュニティに参加:Vim関連の情報を積極的に収集
  4. 設定を見直す:定期的に.vimrcを改善

Vimの将来性

Vimは40年以上の歴史を持ちながら、今でも進化を続けています。近年では:

  • Neovim:Vimの現代的な実装
  • **LSP(Language Server Protocol)**対応:IDE並みの機能
  • 非同期処理:大型ファイルの快適な編集

これらの発展により、Vimは単なるテキストエディタから、現代的な開発環境へと進化しています。

最後に

Vimの習得は時間がかかりますが、一度身につければ一生使えるスキルです。最初は操作に戸惑うかもしれませんが、継続的な練習により、必ず効率的なテキスト編集ができるようになります。

本記事で紹介した内容を参考に、ぜひVimの世界に足を踏み入れてみてください。あなたの開発効率が劇的に向上することをお約束します。

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です