Vimはモード切替によって高速かつ直感的なテキスト操作を実現するモーダルエディタです。
- 基本モードと構造
- モード切替
- カーソル移動
- テキスト編集(複製・削除・戻す)
- 検索・置換
- ファイル操作・終了
- 効率化テクニック
- 1. 初心者向け .vimrc 設定例
- 2. プラグイン管理方法
- 3. 初心者におすすめの定番プラグイン3選
- 画面分割(ウィンドウ)の操作
- タブページの操作
- .vimrc での操作効率化設定
- 1. 「バッファ」「ウィンドウ」「タブ」の概念の違い
- 2. 効率的なバッファ管理コマンド
- 3. バッファ管理を加速させる .vimrc 設定
- 4. プラグインを活用した現代的なバッファ管理
- 1. 事前準備と導入手順
- 2. 主な機能と基本コマンド
- 3. おすすめの .vimrc 設定例
- 4. fzf ポップアップ表示時の共通操作
- 💡 運用のコツ
基本モードと構造
Vimは主に以下の4つのモードを切り替えて操作します。
- ノーマルモード (
Esc): 移動・削除・コピーなどのコマンドを実行する基本モード。 - インサートモード (
i,aなど): テキストを入力するモード。 - ビジュアルモード (
v,V,Ctrl+v): 範囲を選択して操作するモード。 - コマンドラインモード (
:,/): ファイル保存・終了・検索・設定変更を行うモード。
モード切替
| コマンド | 移行後の動作 |
i / I | カーソル位置 / 行頭から挿入(インサート) |
a / A | カーソル直後 / 行末から挿入(インサート) |
o / O | カーソルの下 / 上に新行を追加して挿入 |
v / V | 文字単位選択 / 行単位選択(ビジュアル) |
Ctrl + v | 矩形(ブロック)選択(ビジュアル) |
Esc | ノーマルモードに戻る |
カーソル移動
| コマンド | 移動範囲 |
h / j / k / l | 左 / 下 / 上 / 右 |
w / b | 次の単語の先頭 / 前の単語の先頭 |
e | 単語の末尾 |
0 / ^ / $ | 行頭 / 行頭(空白除く) / 行末 |
gg / G | ファイルの先頭 / ファイルの末尾 |
:[行番号] または [行番号]G | 指定した行番号へ移動 |
Ctrl + f / Ctrl + b | 1画面分下にスクロール / 1画面分上にスクロール |
テキスト編集(複製・削除・戻す)
| コマンド | 操作内容 |
x | 1文字削除 |
dd / dw | 1行削除 / 1単語削除 |
yy / yw | 1行コピー(ヤンク) / 1単語コピー |
p / P | カーソルの後(下)に貼り付け / カーソルの前(上)に貼り付け |
u / Ctrl + r | 元に戻す(Undo) / やり直す(Redo) |
c + [移動コマンド] | 指定範囲を削除してインサートモードへ(例: cw で1単語変更) |
検索・置換
| コマンド | 操作内容 |
/文字列 | 下方向へ検索 |
?文字列 | 上方向へ検索 |
n / N | 次の検索結果へ移動 / 前の検索結果へ移動 |
* / # | カーソル位置の単語を順方向 / 逆方向に検索 |
:%s/旧/新/g | ファイル全体の 旧 を 新 に置換 |
:%s/旧/新/gc | 確認しながらファイル全体を置換 |
ファイル操作・終了
| コマンド | 操作内容 |
:w | 上書き保存 |
:q / :q! | 終了 / 変更を破棄して強制終了 |
:wq または ZZ | 保存して終了 |
:e [ファイル名] | 別のファイルを開く |
効率化テクニック
- 繰り返し (
.): 直前の編集操作(挿入・削除・置換など)をリピート実行。 - 数値指定 (
[数値] + [コマンド]): 操作を複数回繰り返す(例:3ddで3行削除、5wで5単語進む)。 - 対応括弧への移動 (
%): カーソル位置の括弧(),{},[]に対応するペアへジャンプ。
Vimの操作性を向上させるための初心者向け.vimrcの基本設定例と、現代の標準的なプラグイン管理方法をご紹介します。
1. 初心者向け .vimrc 設定例
ホームディレクトリに .vimrc というファイルを作成(vim ~/.vimrc)し、以下の内容を記述します。
Vim Script
" ==============================================================================
" 基本設定
" ==============================================================================
set encoding=utf-8 " エンコーディングをUTF-8に設定
set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis " 開くファイルの文字コード自動判別
set nobackup " バックアップファイルを作成しない
set noswapfile " スワップファイルを作成しない
set autoread " 他で変更されたら自動で再読み込み
set hidden " 保存されていないファイルがある場合でも別バッファを開く
set clipboard+=unnamed " クリップボードと連携 (OSのコピー&ペーストと共有)
" ==============================================================================
" 表示・UI設定
" ==============================================================================
set number " 行番号を表示
set title " 編集中のファイル名をタイトルに表示
set cursorline " カーソル行をハイライト
set visualbell " 警告音をビジュアル表示に変換
set showmatch " 括弧入力時に対応する括弧を強調表示
set matchtime=1 " 括弧強調表示の時間を1文字分に設定
" ==============================================================================
" インデント・タブ設定
" ==============================================================================
set expandtab " タブ入力を複数の空白入力に置き換える
set tabstop=4 " 画面上で1つのタブ文字が占める幅
set shiftwidth=4 " 自動インデント時に挿入される空白の数
set softtabstop=4 " キーボードでTabを押した際に挿入される空白の数
set autoindent " 新しい行のインデントを現在行と同じにする
set smartindent " 新しい行のインデントを自動で調整する
" ==============================================================================
" 検索設定
" ==============================================================================
set ignorecase " 大文字・小文字を区別しない
set smartcase " 検索パターンに大文字が含まれている場合は区別する
set incsearch " インクリメンタルサーチ(入力中に順次検索)
set hlsearch " 検索結果をハイライト表示
" <Esc>2回押しで検索ハイライトを消去
nnoremap <Esc><Esc> :nohlsearch<CR>
2. プラグイン管理方法
現在、Vimのプラグインマネージャーとしては vim-plug または Vim 8以降の標準機能(packpath) を利用するのが最も簡潔でおすすめです。ここでは導入が容易で高機能な vim-plug の使い方を説明します。
インストール手順 (Unix/macOS/Linux)
ターミナルで以下のコマンドを実行して vim-plug をダウンロードします。
Bash
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
.vimrc への設定記述
.vimrc の先頭または末尾に、プラグインのロード処理を追加します。
Vim Script
" プラグインの読み込み開始
call plug#begin('~/.vim/plugged')
" おすすめのプラグイン群
Plug 'tpope/vim-surround' " 括弧やクォートの囲みを簡単に変更・削除
Plug 'preservim/nerdtree' " ディレクトリ構造をサイドバー表示(ファイルツリー)
Plug 'vim-airline/vim-airline' " ステータスラインを綺麗に表示
call plug#end()
" プラグインの読み込み終了
プラグインのインストール実行
- Vimを起動します(
vim)。 - コマンドラインモードで以下を実行します:
Vim Script:PlugInstall - 自動的にプラグインのダウンロードとセットアップが行われます。
3. 初心者におすすめの定番プラグイン3選
| プラグイン名 | 役割・特徴 |
| vim-surround | cs"' で "hello" を 'hello' に変更するなど、ペア記号の編集を劇的に短縮します。 |
| NERDTree | :NERDTreeToggle コマンドで左側にファイルツリーを表示。ファイル操作が視覚的に行えます。 |
| vim-airline | 画面下部のステータスバーが見易くなり、現在のモードやエンコーディング情報が綺麗にレイアウトされます。 |
画面分割(ウィンドウ)は同一画面内でのコード比較や参照に使い、タブページはプロジェクトや作業コンテキスト全体の切り替えに使い分けるのが効率的です。
画面分割(ウィンドウ)の操作
画面を上下または左右に分割し、複数ファイルを同時に表示・編集します。
分割と終了
| コマンド | キー操作 | 動作 |
:split (:sp) | Ctrl + w → s | 画面を**水平(上下)**に分割 |
:vsplit (:vsp) | Ctrl + w → v | 画面を**垂直(左右)**に分割 |
:close | Ctrl + w → c | 現在のウィンドウを閉じる |
:only | Ctrl + w → o | カレントウィンドウ以外をすべて閉じる |
ウィンドウ間の移動
Ctrl + w+h/j/k/l: 左 / 下 / 上 / 右のウィンドウへ移動Ctrl + w+w: 次のウィンドウへ順番に移動Ctrl + w+r: ウィンドウの位置を入れ替える
サイズ変更
| キー操作 | 動作 |
Ctrl + w → = | すべてのウィンドウの高さを均等にする |
Ctrl + w → + / - | 現在のウィンドウの高さを拡大 / 縮小 |
Ctrl + w → > / < | 現在のウィンドウの幅を拡大 / 縮小 |
:[数値]resize | 高さを指定行数に変更(例: :20resize) |
:vertical resize [数値] | 幅を指定列数に変更(例: :vnew や :vert res 40) |
タブページの操作
タブは複数のウィンドウレイアウトを保持する「作業スペース」として機能します。
タブの作成と終了
| コマンド | 動作 |
:tabnew [ファイル名] (略: :tabe) | 新しいタブでファイルを開く(ファイル名省略で空タブ) |
:tabclose (略: :tabc) | 現在のタブを閉じる |
:tabonly (略: :tabo) | 現在のタブ以外をすべて閉じる |
:tab find [ファイル名] | path 内のファイルを新しいタブで探して開く |
タブ間の移動
gt: 次(右)のタブへ移動gT: 前(左)のタブへ移動[数値]gt: 指定した番号のタブへジャンプ(例:1gtで一番左のタブへ):tabmove [位置]: タブの位置を移動(例::tabmove 0で一番左へ移動)
.vimrc での操作効率化設定
ウィンドウとタブの操作はデフォルトのキー入力数が多いため、以下のようにショートカットを登録すると劇的に快適になります。
Vim Script
" ==============================================================================
" ウィンドウ操作の効率化
" ==============================================================================
" Ctrl + 方向キー(h, j, k, l)だけでウィンドウ間を移動
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
" Leaderキーを使った画面分割
nnoremap <Leader>sp :split<CR>
nnoremap <Leader>vs :vsplit<CR>
" ==============================================================================
" タブ操作の効率化
" ==============================================================================
" Leader + t で新規タブ作成
nnoremap <Leader>tn :tabnew<CR>
" Tabキー / Shift + Tabキー でタブ間を素早く切替
nnoremap <Tab> gt
nnoremap <S-Tab> gT
Vimをマスターする上で最も重要な概念の一つが、「バッファ」「ウィンドウ」「タブページ」の役割分担を理解することです。他のモダンなエディタ(VS Codeなど)のタブ感覚でVimのタブを使うと混乱しやすいため、正しい概念の切り分けが大切です。
1. 「バッファ」「ウィンドウ」「タブ」の概念の違い
Vimでは、これらは階層構造(バッファ ⊂ ウィンドウ ⊂ タブ)になっています。
Plaintext
[ タブページ 1 ] --------------------------------------------------
| [ ウィンドウ A ] (バッファ #1 を表示) | [ ウィンドウ B ] (バッファ #2 を表示) |
------------------------------------------------------------------
* メモリ内(バックグラウンド)に読み込まれているバッファ:
#1: main.py / #2: utils.py / #3: README.md / #4: config.json
| 概念 | 実体 | 他エディタでの例え | 役割 |
| バッファ (Buffer) | ファイルの内容 | 開いているファイル(タブ) | メモリ上にロードされたテキストデータそのもの。画面に表示されていなくても裏で開きっぱなしにできる。 |
| ウィンドウ (Window) | バッファを見る「窓」 | エディタの分割画面 | バッファを表示するための視覚的な領域。1つのバッファを複数のウィンドウで同時に開くことも可能。 |
| タブページ (Tab) | ウィンドウの「配置状態」 | ワークスペース / 仮想デスクトップ | ウィンドウの分割レイアウト(ビュー)をグループ化したもの。作業文脈ごとに切り替える。 |
💡 決定的な違い
VS Codeなどの「タブ」はファイル(バッファ)そのものを表しますが、Vimのタブは「画面レイアウトの保存場所」です。そのため、Vimでは「ファイルはすべてバッファで開き、画面分割(ウィンドウ)で見比べ、大枠の作業グループをタブで分ける」のが本来の効率的なスタイルです。
2. 効率的なバッファ管理コマンド
バッファを中心に作業すると、タブを大量に開かずにスマートにファイルを切り替えられます。
基本コマンド
| コマンド | 動作 |
:ls または :buffers | 現在開いているバッファの一覧を表示 |
:bnext (:bn) | 次のバッファへ切り替え |
:bprevious (:bp) | 前のバッファへ切り替え |
:buffer [番号/名前] (:b) | 指定した番号またはファイル名の一部でバッファを開く |
:bdelete (:bd) | バッファを閉じる(※ウィンドウは閉じない) |
:bdelete! (:bd!) | 変更を破棄して強制的にバッファを閉じる |
💡
:b [検索名]のテクニック
:b mainや:b utのように、ファイル名の一部を入力してTabキーを押すと補完され、一瞬で目的のファイルに移動できます。
3. バッファ管理を加速させる .vimrc 設定
バッファ管理を快適にするためには、未保存のバッファを裏に保持できるようにする set hidden が必須です。
Vim Script
" ==============================================================================
" バッファ管理の必須・推奨設定
" ==============================================================================
" 保存していないバッファがあっても、保存せずに別のバッファへ切り替え可能にする
set hidden
" [Leader] + b + n/p で前後のバッファへ移動
nnoremap <Leader>bn :bnext<CR>
nnoremap <Leader>bp :bprevious<CR>
" [Leader] + b + l でバッファ一覧を表示し、移動コマンド待ち状態にする
nnoremap <Leader>bl :ls<CR>:b<Space>
" [Leader] + bd で現在のバッファを閉じる
nnoremap <Leader>bd :bdelete<CR>
4. プラグインを活用した現代的なバッファ管理
標準機能の :ls よりも視覚的にファイルを行き来したい場合は、以下のプラグインの導入が定番です。
vim-airline+ tabline エクステンション- 画面最上部に「VS Codeのようなファイルタブ一覧」としてバッファリストを常時表示できます。
- 設定例:
Vim Scriptlet g:airline#extensions#tabline#enabled = 1
fzf.vimやtelescope.nvim(あいまい検索プラグイン)<Leader>bなどで検索窓を立ち上げ、インクリメンタル検索(あいまい検索)で素早くバッファを切り替えられます。
fzf.vim は、強力なコマンドライン・あいまい検索ツール fzf を Vim 内から利用できるようにした超定番プラグインです。
プロジェクト内の全ファイル検索、開いているバッファの検索、ファイル内の文字列全体検索(Grep)などを瞬時に行えるようになります。
1. 事前準備と導入手順
fzf.vim を動かすには、バイナリとしての fzf と Vim プラグインとしての fzf.vim の両方が必要です。
プラグインマネージャー(vim-plug)での導入
.vimrc のプラグイン記述エリアに以下を追加します。
Vim Script
call plug#begin('~/.vim/plugged')
" fzf本体(バイナリの自動ダウンロード設定含む)
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
" Vimからfzfを使うためのインターフェースプラグイン
Plug 'junegunn/fzf.vim'
call plug#end()
追記後、Vimを起動して :PlugInstall を実行します。
💡 ripgrep (
rg) のインストール推奨コード内の高速な全文検索(
:Rgコマンド)を行うため、OSのパッケージマネージャーでripgrepもインストールしておくことを強力にお勧めします。
- macOS:
brew install ripgrep- Ubuntu/Debian:
sudo apt install ripgrep
2. 主な機能と基本コマンド
Vimのコマンドラインモードから直接実行できる代表的な機能です。
| コマンド | 機能 |
:Files | カレントディレクトリ以下のファイルをあいまい検索(ファイル名で絞り込み) |
:GFiles | Git管理下のファイルのみを検索(node_modules などが除外されるため高速) |
:Buffers | 現在開いているバッファ(ファイル)から検索 |
:Rg [キーワード] | 全ファイル内のテキストコンテンツを全文検索(ripgrep を使用) |
:BLines | 現在開いているファイル内の行をあいまい検索 |
:History | 最近開いたファイルの履歴から検索 |
:Commands | Vimのコマンドラインコマンドをあいまい検索 |
:Marks | 設定されているマーク(ma など)の一覧・検索 |
3. おすすめの .vimrc 設定例
ショートカットキーの登録や、ウインドウ表示を綺麗に調整するための設定例です。
Vim Script
" ==============================================================================
" fzf.vim 設定
" ==============================================================================
" fzfのポップアップウィンドウ表示(画面中央に浮かび上がるスタイル)
let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'highlight': 'Comment' } }
" プレビューウィンドウのスタイル設定(右側に表示、Ctrl-/ で開閉)
let g:fzf_preview_window = ['right:50%:hidden', 'ctrl-/']
" ------------------------------------------------------------------------------
" キーバインド(Leaderキーを活用)
" ------------------------------------------------------------------------------
" <Leader>f でファイル検索
nnoremap <Leader>f :Files<CR>
" <Leader>g でGit管理ファイル検索
nnoremap <Leader>g :GFiles<CR>
" <Leader>b でバッファ検索(開いているファイルの一覧)
nnoremap <Leader>b :Buffers<CR>
" <Leader>r で全文検索(ripgrep)
nnoremap <Leader>r :Rg<CR>
" <Leader>l で現在行・現在バッファ内の文字列検索
nnoremap <Leader>l :BLines<CR>
" <Leader>h でファイル閲覧履歴から検索
nnoremap <Leader>h :History<CR>
4. fzf ポップアップ表示時の共通操作
fzfの検索窓が開いている間は、以下のキーで候補の決定や表示モードを切り替えられます。
| キー操作 | 動作 |
Enter | 選択したファイルを現在のウィンドウで開く |
Ctrl + v | 選択したファイルを**垂直分割(左右)**で開く |
Ctrl + x | 選択したファイルを**水平分割(上下)**で開く |
Ctrl + t | 選択したファイルを新しいタブで開く |
Tab / Shift + Tab | 候補を上下に移動 |
Ctrl + c / Esc | fzf 検索をキャンセルして閉じる |
💡 運用のコツ
- 基本は
<Leader>f(ファイル検索)と<Leader>b(バッファ検索)
作業中はバッファを閉じずに蓄積させ、<Leader>bであいまい検索を行って切り替えるスタイルが最も高速です。 - コードの場所を探すときは
<Leader>r(Grep検索)
「関数名getUserDataがどこで定義/使用されているか」を探す時は、<Leader>rを押してそのままキーワードを入力すれば、プレビューで該当コードを確認しながらジャンプできます。

コメント