
「Vimを毎日使っているのに、設定が思い通りに反映されない」「もっと快適に操作できるはずなのに、細かいところでストレスを感じる」──そんな経験はありませんか。
Vimには起動時に自動で読み込まれる設定ファイル「.vimrc」があり、ここを工夫することで操作性や見やすさを大きく変えることができます。
行番号の表示やインデントの統一、よく使うコマンドのショートカット化など、環境に合わせて自由にカスタマイズできるのがVimの魅力です。
しかし、設定が複雑になるほど思わぬエラーや反映漏れに悩む人も少なくありません。
本記事では、.vimrcの基本構造から実践的な設定例、さらには応用テクニックやトラブル解決法までを段階的に解説し、誰もが自分に合った快適なVim環境を手に入れられるように整理します。
Vimの基礎知識
🟢 Vimの基礎知識
📌 Linuxで必ず触れるテキストエディタの入門から応用までを体系化
└─【Vimの基礎知識】入門から応用までを体系化した学習ロードマップ
├─ 入門編(初心者向け)
| ├─ 【Vimの基礎知識】ゼロから始めるVim入門とモード終了、コマンド基本操作
| ├─ 【Vimの基礎知識】テキスト編集の基本操作(挿入・削除・移動)
| ├─ 【Vimの基礎知識】viとvimの違い|現場で覚えるべきポイント
| ├─ 【Vimの基礎知識】VimとEmacsの違い|Linux現場で使われるエディタの選び方
| └─ 【Vimの基礎知識】主要コマンド一覧|移動・編集・検索・コピーモード切替の早見表
├─ 活用編(中級者向け)
| ├─ 【Vimの基礎知識】検索・置換・コピー・ペーストの操作まとめ
| └─ 【Vimの基礎知識】マウス不要!カーソルを乗せたら勝ち確定|ビジュアルモード
├─ 実践編(実務で役立つ)
| ├─ 【Vimの基礎知識】Vimで複数ファイルを同時編集する方法とウィンドウ分割の基本
| └─ 【Vimの基礎知識】外部コマンド&シェル連携でVimを超実用ツールへ進化
├─ 応用編(上級者向け)
| ├─ 【Vimの基礎知識】マクロを活用した自動編集テクニック
| └─ 【Vimの基礎知識】正規表現を使った高度なテキスト編集
└─ 設定編(カスタマイズ)
├─ 【Vimの基礎知識】Vimを使いこなす基礎:.vimrcで快適な開発環境を構築する方法
└─ 【Vimの基礎知識】VSCodeでVimを使う方法|GUIで再現するVim操作
.vimrc の基本理解

Vimを使いこなすためには、まず起動時に読み込まれる設定ファイル「.vimrc」の仕組みを理解することが欠かせません。
.vimrcを正しく設定すれば、表示の見やすさや編集の効率が大きく変わり、作業環境を自分好みに整えることができます。
ここでは読み込みの流れや基本的な書き方を整理し、後の応用へつなげていきます。
Vimの設定ファイル「.vimrc」は最初から存在しているわけではありません。ユーザーが自分で作成して初めて反映される仕組みになっているため、必要な場合はホームディレクトリに新規作成する必要があります。
.vimrc ファイルの有無と新規作成
Vimの設定ファイル「.vimrc」は最初から存在しているわけではありません。つまり、初めてVimを利用する環境ではホームディレクトリにこのファイルがなく、確認しても何も表示されません。
これは異常ではなく、単にユーザーがまだ自分専用の設定ファイルを作成していないだけの状態です。
ls -a ~ | grep vimrc
【出力例:】
(何も表示されない)
このように出力が空であれば、まだ「.vimrc」は存在していません。その場合は新しくファイルを作成する必要があります。
vi ~/.vimrc
ここで新規ファイルが開きます。
内容が空のままでも保存して終了すれば、ホームディレクトリに「.vimrc」が配置されます。
:wq
【出力例:】
"~/.vimrc" [New] 0L, 0B written
これで初めて「.vimrc」が存在する状態となり、Vim起動時に自動で読み込まれる対象になります。
ここからが本当のスタートです。 重要なのは、この「.vimrc」こそが今後Vimに関するすべての設定を記述していく場所になるという点です。
例えば、行番号を常に表示する設定、インデントやタブ幅の統一、検索や置換の挙動変更、ショートカットキーのマッピング、さらにはプラグイン管理や自動化の仕組みまで、Vimの動作を制御するすべての要素はこのファイルに記述していきます。
つまり「.vimrc」がない状態ではVimは単なる素のエディタですが、「.vimrc」を作成した瞬間から、それは「自分専用に進化できるエディタ」へと変わります。
以後、Vimの快適さや効率性を左右する根幹の役割を担うのがこのファイルです。
読者はここに一行ずつ設定を追加していくことで、自分の作業スタイルに合った環境を着実に構築していくことができます。
.vimrc 読み込みの仕組み
Vimは起動時に複数の場所を順番に参照し、最初に見つかった設定ファイルを読み込みます。
この仕組みを理解することで、設定が反映されない原因や、複数ファイルが存在する場合の優先順位を把握できるようになります。
ユーザー vimrc とシステム vimrc の違い
Vimには大きく分けて2種類の設定ファイルがあります。
システム全体に影響する「システム vimrc」と、ユーザーごとの環境を定義する「ユーザー vimrc」です。
一般的にカスタマイズするのはユーザー vimrcであり、Linuxではホームディレクトリに配置します。
ls -a ~ | grep vimrc
【出力例:】
.vimrc
システム全体に反映されるファイルは、通常 /etc/vimrc に置かれており、管理者が共通設定を適用するときに利用されます。
読み込み順序と優先順位
Vimはシステム vimrcを読み込んだ後にユーザー vimrcを参照します。
そのため、ユーザー vimrcに同じオプションを記述すると、システム側の設定を上書きできます。
この仕組みを理解しておくと、意図しない設定の衝突を避けられます。
vim --version | grep vimrc
【出力例:】
システム vimrc: "/etc/vimrc"
ユーザー vimrc: "$HOME/.vimrc"
第2ユーザー vimrc: "~/.vim/vimrc"
3種類のvimrc
- システム vimrc
場所: /etc/vimrc
OS全体に影響する設定ファイルで、すべてのユーザーに適用されます。 - ユーザー vimrc
場所: ~/.vimrc
そのユーザー専用の設定。最もよく使われる場所で、通常「vimrc」といえばこれを指します。 - 第2ユーザー vimrc
場所: ~/.vim/vimrc
ホームディレクトリ直下ではなく、~/.vim/ ディレクトリの中に置かれる設定ファイルです。
これは「.vimrc が見つからなかった場合の代替ファイル」として Vim が探しにいく候補のひとつです。
Vimは起動時に 複数のパスを順番に探す 仕様になっています。
- ~/.vimrc を探す
- ~/.vimrcがなければ ~/.vim/vimrc を探す
つまり「第2ユーザー vimrc」とは ~/.vimrc の代わりに参照される候補ファイルであり、通常は使わない。現代的な環境では ~/.vimrcが使用されます。
vim オプションとコマンド設定の書き方
.vimrcには表示や動作を制御するオプション設定や、キー操作を効率化するマッピングを記述できます。
適切に整理すれば、作業効率が飛躍的に向上します。
set コマンドによるオプション指定
Vimの基本的なカスタマイズはsetコマンドで行います。例えば行番号を表示したり、タブをスペースに変換したりといった設定が可能です。
set number
set expandtab
set shiftwidth=2
設定値内訳
- set number 意味:
行番号を常に表示する 効果:エディタ左端に行番号が表示されるようになります。コードや設定ファイルを扱う際に位置を特定しやすくなり、エラー出力や検索結果と照らし合わせるときに便利です。 - set expandtab 意味:
タブ入力をスペースに変換する 効果:キーボードの Tab キーを押しても実際にはスペースが入力されます。チーム開発や異なる環境間での表示ずれを防げるため、統一したインデントスタイルを保ちやすくなります。 - set shiftwidth=4 意味:
インデント操作の幅をスペース2つに設定する 効果:>> や << などのインデント調整コマンドを実行した際に、2スペース単位で字下げや戻しが行われます。expandtab と組み合わせることで「タブ入力もインデント操作もスペース4文字」に統一できます。
【出力例:】
行番号が常に表示され、タブ入力がスペース4文字に変換されます。
augroup / autocmd / map / function の基本構文
.vimrcでは自動化や効率化のためにイベント処理や関数を定義することもできます。
augroup filetypedetect
autocmd BufRead,BufNewFile *.md set filetype=markdown
augroup END
.vimrc における augroup の中の autocmd が字下げされているのは、動作上の必須条件ではなく「可読性を高めるため」です。
実際にはインデントがなくても正しく動作しますが、全てを左寄せにするとどの autocmd が augroup 内に属しているのかが一目で分かりにくくなります。
そのため、慣例的に autocmd を半角スペースでずらして記述し、視覚的にグループ構造を示すようにしています。
つまり、ずらしている理由は処理上の必要ではなく、あくまで人間が読みやすく管理しやすくするための工夫なのです。
見やすさ向上のためのインデント
- .vimrc では インデントに構文上の意味はない ので、書かなくても動作はします。
- しかし、augroup の中に複数の autocmd を並べることが多く、全部左寄せにすると読みにくくなります。
- そこで「この autocmd は augroup の内部ですよ」ということを視覚的にわかりやすくするために字下げして書くのが慣例です。
【出力例:】(行番号が表示されている)
1 Linux is a powerful operating system.
2 Many engineers use Linux for development.
3 It is widely adopted in servers and cloud systems.
4 The community provides extensive documentation.
5 Learning Linux improves problem-solving skills.
拡張子が.mdのファイルを開いた際、自動的にMarkdownモードで編集できます。
F5で保存して終了するマッピングの作成
Vimでは保存と終了を行う際、通常は「:wq」と入力してEnterを押す必要があります。
毎回手で入力すると操作回数が増え、特にファイルを頻繁に開閉する作業ではリズムが途切れやすくなります。
そこで、これらの動作を1つのキーに割り当てることで効率化するのが「マッピング」です。
nnoremap <F5> :wq<CR>
この設定を追加すると、F5を押すだけで保存と終了が実行されます。
nnoremap は「ノーマルモード専用で、再帰的に展開しないマッピング」を作成するコマンドです。これを使ってF5キーに:wqを割り当てれば、F5を押すだけで保存と終了がまとめて実行されます。
コマンドの内訳
- nnoremap:ノーマルモードでのマッピングを定義(再帰しない)
- <F5>:物理的なF5キーを指定 :
- wq:保存して終了のコマンド
- <CR>:Enterキーを押してコマンドを実行する
最後に付けている<CR>は Enter キーを表しており、入力したコマンドを実際に確定させるために必要な記述です。
F5キーで保存と終了を実現する手順
Vimで保存と終了を毎回「:wq」と入力するのは手間がかかります。
頻繁に繰り返す操作をキー1つにまとめることで、作業効率を大幅に高められます。
そのための具体例が、F5キーを使ったマッピングです。 まず.vimrcに以下の設定を追記します。
set number
set expandtab
set shiftwidth=2
nnoremap <F5> :wq<CR>
設定の内訳は次の通りです。
設定値の内訳
- set number:行番号を表示する
- set expandtab:Tab入力をスペースに変換する
- set shiftwidth=2:インデント操作をスペース2個で行う
- nnoremap :wq:ノーマルモードでF5を押すと「:wq」とEnterが自動実行され、保存と終了が完了する
この設定を書いただけでは完了ではありません。必ず動作確認を行う必要があります。
.vimrcが読み込まれているか確認 任意にファイル(例:sample.txt)を開いた状態で次のコマンドを実行します。
:scriptnames
【出力例:】
1: /etc/vimrc
2: /usr/share/vim/vim82/syntax/syntax.vim
3: /usr/share/vim/vim82/syntax/synload.vim
(省略)
8: /usr/share/vim/vim82/ftplugin.vim
9: ~/.vimrc
10: /usr/share/vim/vim82/plugin/getscriptPlugin.vim
11: /usr/share/vim/vim82/plugin/gzip.vim
(省略)
22: /usr/share/vim/vim82/ftplugin/text.vim
出力に ~/.vimrc が表示されていれば設定が読み込まれています。 F5の割り当てが有効か確認 続いてF5が正しくマッピングされているかを確認します。
:verbose nmap <F5>
【出力例:】
n * :wq
最後にセットしたスクリプト: ~/.vimrc 行 4
続けるにはENTERを押すかコマンドを入力してください
このように :wq<CR> が表示され、最後にセットしたスクリプトが ~/.vimrc になっていれば、F5キーが正常に保存と終了に割り当てられていることが確認できます。 実際に動作を確認 設定が効いているかを確かめるため、ファイルを編集し、F5キーを押してみます。
【操作例】(F5を押下)
【出力例:】
F5を押して実行すると、保存と同時にVimが終了します。
そのため、通常「"sample.txt" 120L, 2400B written」と表示される保存メッセージは確認できません。
保存メッセージを確認したい場合は、:wq ではなく一旦保存だけを割り当てると動作がわかりやすくなります。
nnoremap <F5> :w<CR>
この場合はF5で保存だけを行うため、下記のようにメッセージが表示されます。
【出力例:】
"sample.txt" 120L, 2400B written
保存メッセージを確認したいときは保存専用のマッピング、作業をすぐ終わらせたいときは :wq<CR> を使い分けると便利です。
完全に外したい、素のF5を使いたい、あるいは再割り当て前に一度きれいにしたい場合には、以下のコマンドで設定を解除します。
:nunmap <F5>
【出力例:】
(メッセージなし:解除成功)
F5の割り当てが解除されたか確認 続いてF5が正しくマッピングされているかを確認します。
:verbose nmap <F5>
【出力例(解除済み):】
No mapping found
もし再度何かが割り当てていれば、どのスクリプトが最後に設定したかが表示され、プラグインやftpluginによる再設定を特定できます。
[ バッファローカルで上書きされるケースへの対処 ]
ファイルタイププラグインがバッファごとにF5を再割り当てしている場合、グローバルで設定した nnoremap よりもそのローカル設定が優先されてしまいます。必要に応じてバッファローカルを外します。
:nunmap <buffer> <F5>
【出力例:】
(メッセージなし:解除成功)
注意点 一部のターミナルや端末環境では、Fキーがシステムやターミナル側で別の機能に割り当てられていることがあります。例えば、MacではF1〜F12が音量や画面の明るさ調整に使われるため、そのままではVimに届きません。また、tmuxやSSH経由ではキーコードが変換され、VimがF5を受け取れない場合もあります。こうした状況では、まず :verbose nmap で割り当てを確認してください。それでも反応がない場合は、F5ではなくqや他のキーへ再割り当てする方が確実です。
実践的な設定例

Vimをより快適に使いこなすには、.vimrcに自分に合った設定を追加していくことが重要です。
ここでは、画面の見やすさやインデントの整え方、さらにマッピングによる効率化やプラグイン管理まで、実務で役立つ設定例を紹介します。
見やすさ・操作性向上の設定
まずは作業環境を整える基本的な設定です。
行番号やカーソル行のハイライト、折り返しの調整などは、日常の編集作業をスムーズにし、ミスを防ぐ効果があります。
表示設定(行番号、カーソル行ハイライト、折り返し設定など)
対象ファイル:sample.txt 【内容】
これはサンプルのテキストです
次の行にカーソルを置いた場合
カーソル行がハイライトされて強調されます
.vimrc に以下の設定を記載します。
set number
set cursorline
set wrap
この設定によってsample.txt をVimで開く、と行番号が表示され、カーソル行が強調されます。さらに長文は自動的に折り返されるため、可読性が大幅に向上します。
【出力例:】
1 これはサンプルのテキストです
2 次の行にカーソルを置いた場合
3 → カーソル行がハイライトされて強調されます`
インデント/タブ設定(shiftwidth, tabstop, expandtab など)
インデントやタブの設定は、コードの読みやすさに直結します。
Vim では vimrc に設定を記載しておくことで、タブとスペースの混在を避け、インデント幅を統一できます。
ここではタブと半角スペースが混在したファイルを例に、設定と整形の流れを実行例と出力例で示します。
対象ファイルは sample.c とします。内容は次のとおりです。
int main() {
⇥printf("Hello\n"); // タブ1つ
printf("World\n"); // 半角スペース3つ
}
この sample.c を対象に下記の設定を vimrc に記載します。
set shiftwidth=4
set tabstop=4
set expandtab
次に、sample.c を対象に下記のコマンドを実行することで、vimrc の設定内容を反映します。
gg=G
このコマンドはファイル全体を対象にインデントを再整形し、タブをスペースに変換して shiftwidth=4 に揃えます。
【出力例:】
int main() {
printf("Hello\n"); // スペース4つ
printf("World\n"); // スペース4つ
}
操作を快適にするマッピング・ショートカット
マッピングを活用することで、よく使う操作をワンキーにまとめて効率を高められます。
誤入力を減らし、集中力を維持できるのが大きなメリットです。
ノーマルモード / ビジュアルモードのマッピング
Vimで作業していると、繰り返し行う操作をいかに短縮できるかが作業効率を大きく左右します。
例えば保存や終了といった操作は毎日のように使いますが、いちいち「:w」「:q」「:wq」と入力していては余分な手数が増え、集中力を削がれる原因となります。
この問題を解決するのが「マッピング(キー割り当て)」です。
Vimには、ノーマルモード・ビジュアルモード・挿入モードなど、複数のモードが存在しますが、それぞれに専用のマッピングを設定することで、キー1つで複雑な操作を呼び出せるようになります。
ここでは、ノーマルモードとビジュアルモードに対するマッピングの具体例を取り上げ、設定の方法から動作確認、解除の仕方、さらに実務でありがちなプラグインとの競合時の対処まで、段階的に整理して解説します。
対象ファイル: ~/.vimrc まずは設定ファイルである「.vimrc」に以下の設定を追記します。
set number
set expandtab
set shiftwidth=2
nnoremap <F2> :w<CR>
vnoremap <F3> y
ここで行っている内容は次の通りです。
設定値の内訳
- set number:行番号を表示してコードの位置を把握しやすくする
- set expandtab:Tab入力をスペースに変換して環境差異をなくす
- set shiftwidth=2:インデント幅を2に統一する
- nnoremap:w:ノーマルモードでF2を押すと保存
- vnoremap y:ビジュアルモードでF3を押すと選択範囲をコピー ノーマルモード用とビジュアルモード用を分けて設定している点がポイントです。 次に、設定が反映されているかどうかを確認します。 任意のファイル(例: sample.txt)をVimで開きます。 Vim起動後に以下のコマンドを実行し、.vimrcが読み込まれているか確認します。
:scriptnames
【出力例:】
1: /etc/vimrc
2: /usr/share/vim/vim82/syntax/syntax.vim
3: /usr/share/vim/vim82/syntax/synload.vim
4: /usr/share/vim/vim82/syntax/syncolor.vim
5: /usr/share/vim/vim82/filetype.vim
6: /usr/share/vim/vim82/ftplugin.vim
7: /usr/share/vim/vim82/indent.vim
8: /usr/share/vim/vim82/plugin/netrwPlugin.vim
9: ~/.vimrc
出力の中に「~/.vimrc」が含まれていれば、設定ファイルは読み込まれています。
次にマッピングが正しく設定されているかを確認します。
:verbose nmap <F2>
【出力例:】
n * :w
最後にセットしたスクリプト: ~/.vimrc 行 4
さらにビジュアルモード用のマッピングも確認します。
:verbose vmap <F3>
【出力例:】
v * y
最後にセットしたスクリプト: ~/.vimrc 行 5
このように、それぞれのモードに対応したマッピングが確認できれば設定は有効です。
ここで実際に動作確認を行います。
対象ファイル: sample.txt :
1行目のテキスト
2 行目のテキスト
3 行目のテキスト
まずノーマルモードで編集を行い、保存操作を試します。
【操作例】
F2を押下
【出力例:】
"sample.txt" 3L, 72B 書込み
このように保存が実行され、保存メッセージが表示されます。 次にビジュアルモードでコピー操作を試します。
カーソルを1行目に置き、Vキーで1行選択後、F3を押下します。
【出力例:】
(メッセージなし:コピー成功、選択範囲がヤンクバッファに格納される)
その後、pキーで貼り付ければ、コピーが成功していることが確認できます。
[ pキー実行例]
1 1 行目のテキスト
2 1 行目のテキスト 👈 ペーストされている
3 2 行目のテキスト
4 3 行目のテキスト
ここまでで「設定を追記する → 読み込まれているか確認 → 割り当てを確認 → 実際に動作を確認」の流れが完了します。
解除が必要な場合 マッピングを完全に外したい、あるいは再割り当て前にきれいに戻したい場合は、nunmapやvunmapを使います。
ノーマルモード用のF2を解除する場合は以下を実行します。
:nunmap <F2>
【出力例:】
(メッセージなし:解除成功)
ビジュアルモード用のF3を解除する場合は以下を実行します。
:vunmap <F3>
【出力例:】
(メッセージなし:解除成功)
解除後は再度 :verbose nmap や :verbose vmap を実行し、割り当てが存在しないことを確認します。
Vimで設定したマッピングは、セッション中に解除すると一時的には無効になりますが、.vimrcに記載が残っている限り、Vimを再起動すれば再び有効になります。恒久的に解除したい場合は、.vimrcに書かれているマッピング設定を削除するかコメントアウトし、再起動後に読み込まれない状態にする必要があります。
複数モード共通マッピングと条件付きマッピング
ノーマルモードとビジュアルモードの両方で同じ操作を割り当てたい場合、mapコマンドを使うと効率的に設定できます。
ここでは行番号の表示を切り替える例を示します。
【対象ファイル:sample.txt】
行番号表示の切り替えを確認するためのサンプルです
この行でF6を押すと行番号が非表示になります
もう一度押すと行番号が再び表示されます
以下のマッピングを .vimrc に記述し、Vim を再起動した後に sample.txt を開いて動作を確認します。
map <F6> :set number!<CR>
この設定により、ノーマルモードでもビジュアルモードでも F6 を押すたびに行番号の表示・非表示を切り替えられます。
【出力例:】 :set number 状態で F6 を押下した場合
1 行番号表示の切り替えを確認するためのサンプルです
2 この行でF6を押すと行番号が非表示になります
3 もう一度押すと行番号が再び表示されます
【出力例:】:set nonumber 状態で F6 を押下した場合
行番号表示の切り替えを確認するためのサンプルです
この行でF6を押すと行番号が非表示になります
もう一度押すと行番号が再び表示されます
プラグインやファイルタイプごとの競合に注意
実務ではプラグインやファイルタイプ設定がFキーに独自のマッピングを行っていることがあります。この場合、.vimrcで設定したnnoremapやvnoremapよりもプラグイン側の設定が優先される場合があります。
例えば、ファイルタイププラグインがバッファ単位でF3を再割り当てしていると、vnoremapによる設定が効かなくなります。
その際は以下のようにバッファ限定で解除します。
:vunmap <buffer> <F3>
【出力例:】
(メッセージなし:解除成功)
これにより、再割り当てされたマッピングを局所的に解除できます。
注意点 一部の端末環境ではFキーがシステムに奪われ、Vimに届かないことがあります。その場合はまず :verbose nmap や :verbose vmap で割り当ての有無を確認してください。反応しない場合は、F2やF3ではなく キーや別のキー(例えば ,s や ,q)に割り当てる方法を検討すると安定します。
マッピングを増やしすぎると逆に覚えきれなくなり、操作体系が複雑になります。業務で頻繁に使う操作に絞ることが大切です。
このようにノーマルモードとビジュアルモードにマッピングを設定することで、保存やコピーといった操作をワンタッチで呼び出せるようになり、作業効率が格段に向上します。
さらに、動作確認・解除・競合時の対応まで一連の流れを理解しておくことで、安心してカスタマイズ環境を構築できます。
プラグイン読み込み・管理設定
Vim の操作性は .vimrc の設定だけでも向上しますが、さらに機能を拡張したい場合にはプラグインの利用が欠かせません。
その際に便利なのが「プラグインマネージャ」です。プラグインマネージャは複数のプラグインをまとめて管理・更新できる仕組みで、代表的なものに vim-plug や Vundle があります。
Vimをさらに拡張するにはプラグイン管理が欠かせません。ここでは代表的な管理方法を紹介します。
プラグインマネージャ(例:vim-plug、Vundle)設定
ここまでで行番号表示やインデントなどの基本設定を行いましたが、Vimを本格的に活用するには機能拡張が欠かせません。
毎回スクリプトを手作業で追加していては管理が煩雑になります。そこで利用されるのが「プラグインマネージャ」です。
プラグインマネージャを導入すれば、複数のプラグインを一括で管理・更新でき、環境構築を効率的に行えます。
代表的なプラグインマネージャとして「vim-plug」や「Vundle」があります。
ここでは軽量で導入が容易な「vim-plug」を例に説明します。 まず、vim-plug を利用するために .vimrc に次の設定を追記します。
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
call plug#end()
上記はファイルツリーを表示するプラグイン「NERDTree」を導入する設定です。call plug#begin() から call plug#end() で囲むことで、その間に記載したプラグインをまとめて管理できます。
.vimrc を保存したら、Vim を起動して次のコマンドを実行します。
:PlugInstall
【出力例:】
Installing NERDTree NERDTree installed successfully
このように表示されれば、プラグインの導入は成功です。
以降は .vimrc の Plug 記述を変更するだけで、新しいプラグインの追加や削除、更新が簡単に行えるようになります。
autoload / on-demand 読み込みのテクニック
Vim ではすべての設定やプラグインを常時読み込むと起動が重くなり、不要な場面でも余計な処理が走ってしまいます。
そのため、必要なときにだけ機能を反映させる「遅延読み込み(on-demand 設定)」が有効です。
例えば、拡張子が .md のファイルを開いたときだけ Vim が Markdown 用の設定を自動で適用し、見出しや箇条書きの色分け、インデントルールなど Markdown に特化した編集環境になります。
一方で .txt や .c など他のファイルを開いたときには余計な処理は行われず、通常どおりの軽い動作が維持されます。
見出し
本文テキスト
以下の設定を.vimrcに記載します。
augroup filetypedetect
autocmd BufRead,BufNewFile *.md set filetype=markdown
augroup END
この設定は、Markdownファイルを開いたときにだけ自動でfiletypeをmarkdownに切り替えます。
設定を保存したあと、実際にsample.mdをVimで開き、現在のfiletypeを確認します。
:set filetype?
【出力例:】
filetype=markdown
このように、Markdownファイルを開いた場合のみfiletypeが自動的にmarkdownに設定されます。
C言語やテキストファイルを開いても影響を受けず、必要なときにだけ機能が有効化されるため、無駄な処理を抑えてVimの起動や動作を軽くできます。
応用と効率化テクニック

Vimの設定は基本的な快適化だけでなく、環境や用途に合わせた応用テクニックを取り入れることでさらに効率を高められます。
ここでは条件分岐や環境依存設定、起動を軽くするための工夫を紹介します。
条件分岐と環境依存設定
Vimの設定は、すべての環境で同じ内容を使う必要はありません。
例えば自宅のMacと職場のLinuxサーバーでは、利用できる機能や求められる動作が違います。また、プログラミング言語ごとに最適なインデントやタブ幅のルールも異なります。
こうした環境や用途の違いに柔軟に対応するために、.vimrc では条件分岐を使って「特定のOSでのみ有効にする設定」や「特定のファイルタイプを開いたときだけ適用する設定」を組み込むことができます。
vimrcによる設定は、条件分岐を取り入れることで毎回自分でコマンドを切り替える手間を省き、作業開始と同時に最適化された環境を自動的に整えることができます。
結果として、どの環境からでも快適に作業を始められる一貫性のある開発環境が実現します。
OS/ファイルタイプ別設定(if has(…) / autocmd FileType)
まずは、OSやファイルタイプに応じて設定を切り替える方法です。
ポイント
- MacとLinuxの両方に同じ .vimrc を置く場合
- ローカルのMacではクリップボード(⌘+C / ⌘+V)を連携させるために set clipboard=unnamed を使いたい。
- 一方でLinuxのVimはビルド環境によっては clipboard が無効なことがあり、そのまま書くとエラーにつながることがある。
- このようなとき if has("macunix") を使えば、同じ .vimrc をMacとLinuxに置いても「Macでは有効・Linuxでは無視」という切り替えを自動で行える。
- 会社PC(Mac)と自宅PC(Linux)を行き来する人
- .vimrc をGitなどで管理し、両方の環境に展開するケース。
- 条件分岐を入れておけば、MacとLinuxのどちらでも安心して同じ設定ファイルを利用できる。
- クロスプラットフォーム開発で環境を切り替える場合
- Docker・WSL・リモートサーバーなど、さまざまな環境で同じ .vimrc を利用できる。
- 「Macではクリップボード連携をON」「Linuxでは別の設定をON」といった環境ごとの自動切り替えが可能になる。
Vimでは `if has(...)` を使ってOSごとの条件を分け、`autocmd FileType` を使ってファイルの種類に応じた設定を記述できます。
この仕組みを使えば「Macではクリップボードを自動連携したい」「Pythonファイルを開いたときだけインデント幅を調整したい」といったルールを簡単に実現できます。
毎回の切り替え操作が不要になるため、作業効率の向上に直結します。
if has("macunix")
set clipboard=unnamed
endif
この例は「現在の環境がMacであれば、Vimのコピー・ペーストをシステムのクリップボードと自動連携する」という設定です。
LinuxやWindowsではこの条件は無視されるため、環境に応じて適切な動作を切り替えることが可能です。
これにより、異なる環境間で同じ .vimrc を使っても矛盾なく動かせるようになります。
autocmd FileType python setlocal tabstop=4 shiftwidth=4 expandtab
こちらは「Pythonファイルを開いたときに限って、インデントを4スペースに統一する」設定です。PythonはPEP8でインデント幅が厳格に定められているため、この設定を入れておけば常に正しいスタイルを自動で適用できます。
実際の .vimrc は、基本設定 → キーマッピング → ファイルタイプや条件付き設定、という流れでまとめれば整理しやすいです。
[ .vimrc 設定イメージ]
" ---- 基本設定 ----
set number " 行番号表示
set expandtab " タブをスペースに展開
set shiftwidth=2 " 自動インデント幅を2に
" ---- キーマッピング ----
nnoremap <F2> :w<CR> " F2で保存
vnoremap <F3> y " F3でコピー
map <F6> :set number!<CR> " F6で行番号のON/OFF切替
" ---- ファイルタイプ検出 ----
augroup filetypedetect
autocmd BufRead,BufNewFile *.md set filetype=markdown
augroup END
" ---- OSごとの条件付き設定 ---- 👈
if has("macunix")
set clipboard=unnamed
endif
" ---- ファイルタイプごとの条件付き設定 ---- 👈
autocmd FileType python setlocal tabstop=4 shiftwidth=4 expandtab
掻い摘んでいうとMac 用と Linux 用の.vimrc設定を条件分岐で書いておけば、そのファイルを両方の環境に置くだけで自動的に切り替わります。Mac では Mac 用の設定だけが有効になり、Linux では Linux 用の設定が適用されるため、1本の .vimrc を配布して共通利用できます。
毎回手動で :set tabstop=4 などを入力する必要がなくなり、チーム開発でもスタイルが崩れません。このように、環境依存の条件分岐とファイルタイプごとの設定を活用することで、Vimを状況に合わせて柔軟に最適化することができます。
結果として、無駄な手間を省きつつ、どの端末からでも統一した操作感を維持できるのが大きなメリットです。
別ファイルをソースする戦略(分割 vimrc / modular 設定)
.vimrc に設定をすべて書き込んでいくと、内容が増えるにつれて可読性が下がり、目的の設定を探すのに時間がかかるようになります。
そこで、用途ごとに設定を分割し、必要なときに外部ファイルを読み込む(source)戦略が有効です。
例えば、プラグイン関連の設定は ~/.vimrc.plugins に、キーマッピングの設定は ~/.vimrc.keymaps に分けて管理し、メインの .vimrc からそれらを読み込むようにします。
source ~/.vimrc.plugins
source ~/.vimrc.keymaps
こうしてモジュール化しておけば、不要な部分を一時的に外したり、新しい設定を試すときに差し替えたりするのが簡単になります。
また、管理対象がファイルごとに整理されるため、バージョン管理ツール(Gitなど)で差分を確認するときにも理解しやすくなります。
[ .vimrc 設定イメージ]
" ---- 基本設定 ----
set number " 行番号表示
set expandtab " タブをスペースに展開
set shiftwidth=2 " 自動インデント幅を2に
" ---- キーマッピング ----
nnoremap <F2> :w<CR> " F2で保存
vnoremap <F3> y " F3でコピー
map <F6> :set number!<CR> " F6で行番号のON/OFF切替
" ---- ファイルタイプ検出 ----
augroup filetypedetect
autocmd BufRead,BufNewFile *.md set filetype=markdown
augroup END
" ---- OSごとの条件付き設定 ----
if has("macunix")
set clipboard=unnamed
endif
" ---- 分割ファイルを読み込み ---- 👈
source ~/.vimrc.plugins
source ~/.vimrc.keymaps
" ---- ファイルタイプごとの条件付き設定 ----
autocmd FileType python setlocal tabstop=4 shiftwidth=4 expandtab
最終的に、環境依存設定とファイルタイプ別設定に加えて、モジュール化戦略を取り入れることで「OSごと・言語ごとに自動で最適化され、しかも肥大化しても見通しよく管理できる」という理想的な .vimrc を構築できます。
高速化・起動最適化
Vimの起動や動作を軽くする工夫を取り入れると、無駄な待ち時間を減らせます。
重い処理を遅延ロード・遅延ソース化(前述)
すべての機能を最初から読み込むのではなく、必要になったときにだけロードする設定です。
autocmd FileType markdown source ~/.vim/markdown_settings.vim
不要設定の無効化/条件付き読み込み(前述)
使わない機能を最初から切っておくことで、メモリや処理負荷を減らせます。
if !has("gui_running")
set guioptions=
endif
トラブルと対処方法

Vimの設定を変更しても思った通りに動かないことは少なくありません。
特に.vimrcを編集した直後は、反映されていないのか、エラーなのか、原因を切り分けるのに苦労することがあります。
ここでは、よくあるトラブルとその解決方法を整理し、安心して設定を進められるように解説します。
設定が反映されないケース
設定が効いていないときは、まず基本的な確認から始めることが重要です。
ファイルの場所や記述ミス、他の設定に上書きされていないかを見直すことで、多くの場合解決できます。
ファイル名・場所が誤っている
.vimrcという名前や配置場所が間違っていると、Vimは設定ファイルを読み込みません。
特にLinuxやMacではホームディレクトリ直下に配置する必要があります。
ls -a ~ | grep vimrc
【出力例:】
.vimrc
このように表示されれば正しく配置されています。
存在しない場合はファイルを作成する必要があります。
競合設定/上書きされている設定
同じオプションを複数回設定していると、最後の記述で上書きされます。
設定が反映されない場合は、ファイルの下の方を確認してください。
set number
set nonumber
【出力例:】
行番号は非表示になる
このように、後から記述された方が優先されます。
エラー発生時のデバッグ手法
設定を追加するとエラーメッセージが表示されることがあります。
そんなときは、Vimの持つデバッグ機能を活用すると原因の特定が容易になります。
:messages / :scriptnames / :verbose で原因を突き止める
Vimは内部でエラーメッセージや読み込んだスクリプトの履歴を保持しています。
これを確認することで、どの設定が問題を起こしているか追跡できます。
:messages
【出力例:】
Error detected while processing /home/user/.vimrc: line 5: E492: Not an editor command: set numbr
このように表示されれば、スペルミスが原因だと分かります。
タイトル
- :messages
これは Vimがこれまでに出したエラーメッセージや警告の履歴 を確認するコマンドです。
シェルの history というより、エラーや情報ログの「バッファ」を見るイメージです。
見逃したエラーメッセージを後から確認できるので便利です。 - :scriptnames
これは Vimが起動してから読み込んだすべての設定ファイルやスクリプトの一覧 を表示するコマンドです。
読み込み順とファイルのパスが分かるので、「どの.vimrcやプラグインがいつ読み込まれたのか」を追跡できます。
例えば、同じオプションが上書きされるときに「どのファイルが原因か」を特定できます。 - :verbose
verbose は どの設定が、どのファイルで、何行目で有効になったのか を表示する仕組みです。
たとえば「行番号が効かない…」というときに以下のように調べられます。
:verbose set number?
【出力例:】
number
これで「最後に行番号表示をONにしたのは .vimrc の12行目」と分かります。
Last set from ~/.vimrc line 12
最小設定で切り分ける手順
複雑なエラーが発生した場合は、不要な要素を取り除いて「最小構成」で動作確認するのが有効です。
そのために一時的に.vimrcを別名に退避させ、最小限の設定だけを残した状態でVimを起動します。
これにより、問題が.vimrc内のどの設定に起因しているかを段階的に切り分けることができます。
mv ~/.vimrc ~/.vimrc.backup
printf "set number\n" > ~/.vimrc
vim ~/.vimrc
上記では、既存の.vimrcをバックアップとして退避させ、新しい.vimrcに「set number」だけを書き込みます。
最後にvimで.vimrcを開き、行番号表示が有効になっているか確認します。
これにより、最小限の設定でエラーが再現するかどうかを判断できます。
:set number?
【出力例:】
number
設定が効いていれば「number」と表示されます。
さらに詳細を追う場合は次のコマンドを実行します。
:verbose set number?
【出力例:】
number
Last set from ~/.vimrc line 1
これにより「どのファイルの何行目で設定が反映されたか」まで確認できます。
もしこの状態でエラーが発生しなければ、元の.vimrcから設定を少しずつ戻しながら原因箇所を特定していきます。
検証が終わったら、退避しておいた設定ファイルを元に戻します。
mv -f ~/.vimrc.backup ~/.vimrc
この方法を使うことで、余計な設定がエラー原因に干渉していないかを明確に切り分けられるため、効率的にトラブルシューティングが可能になります。
ポイント
- 起動時にVimがエラーで止まる場合
例: .vimrc にプラグイン設定やマッピングの書き間違いがあり、起動直後に「E492: Not an editor command」と出て止まる。
→ .vimrc を退避して最小設定にすることで、まず Vim 本体が動くか確認できます。
mv ~/.vimrc ~/.vimrc.backup
【出力例:】行番号が表示されるだけの状態でVimが起動
printf "set number\n" > ~/.vimrc
vim - どの設定が悪さをしているか分からない場合
例: 特定のキー操作で固まる、保存が遅い、特定のファイルタイプだけ異常が出る。
→ 最小構成にしてから、バックアップした .vimrc から1行ずつ戻せば「この設定を入れると再現する」と切り分けられます。 - 環境をまたいだときのトラブル
例: Macでは動くのにLinuxサーバーで同じ .vimrc を使うとエラーになる。
→ 最小設定でまず起動確認し、そこから if has("macunix") などの条件分岐を追加する判断ができます。
つまり、「Vimがまともに立ち上がらない」「何が原因か全く分からない」時の最後の逃げ道が『最小設定で切り分け』です。
誤操作防止の工夫
設定ファイルは一度書き換えると動作全体に影響するため、誤って壊してしまうと作業が止まってしまいます。
バックアップや整理の工夫を取り入れて、安全に管理しましょう。
バックアップ・バージョン管理(例:Git で管理)
定期的に.vimrcをバックアップしておくことで、誤って編集してもすぐに元に戻せます。
Gitで管理するのも効果的です。
git init ~/.vimconfig
cp ~/.vimrc ~/.vimconfig/
cd ~/.vimconfig
git add .vimrc
git commit -m "initial vimrc"
【出力例:】
[master (root-commit) abc1234] initial vimrc 1 file changed, 10 insertions(+) create mode 100644 .vimrc
このように履歴を残しておけば、過去の状態へ簡単に戻すことができます。
通常はシェルやGitの設定などもまとめて「dotfiles」として管理しますが、.vimrc だけを対象にする人も実際にいます。
理由は次のような場合です。
.vimrcだけをGit管理するケース
- 複数PCを使うエンジニア
→ 会社PC(Mac)と自宅PC(Linux)で同じ設定を使いたい。
GitHubに置いて git clone すればすぐ同期できます。 - チームで共通設定を配布したい人
→ 開発チーム全員に同じ .vimrc を使わせる場合、Gitで配布すると更新が楽になります。 - 自分の設定を公開・共有する人
→ dotfiles(設定ファイル群)を GitHub で公開して「俺の環境構築セット」として配る文化があります。
検索すると「dotfiles vimrc」で山ほど出てきます。 - 履歴を残したい人
→ プラグイン導入やマッピングをいじると壊れることも多いので、Gitで履歴を残せば「前の動く状態」に戻せます。
つまり「.vimrc だけを Git 管理する」というのは珍しくはなく、特にVimに依存した開発者にとっては合理的な選択肢になります。
コメント整理・構造化 (可読性維持)
設定を増やしていくと、自分で書いた内容でも分からなくなることがあります。
適切にコメントを入れて構造化すれば、将来のメンテナンス性が高まります。
【記述例:】
" ---- 基本設定 ----
set number " 行番号表示
set expandtab " タブをスペースに展開
set shiftwidth=2 " 自動インデント幅を2に
" ---- キーマッピング ----
nnoremap <F2> :w<CR> " F2で保存
vnoremap <F3> y " F3でコピー
map <F6> :set number!<CR> " F6で行番号のON/OFF切替
" ---- ファイルタイプ検出 ----
augroup filetypedetect
autocmd BufRead,BufNewFile *.md set filetype=markdown
augroup END
" ---- OSごとの条件付き設定 ----
if has("macunix")
set clipboard=unnamed
endif
" ---- 分割ファイルを読み込み ---- 👈
source ~/.vimrc.plugins
source ~/.vimrc.keymaps
" ---- ファイルタイプごとの条件付き設定 ----
autocmd FileType python setlocal tabstop=4 shiftwidth=4 expandtab
このように整理することで、後から編集しても混乱せずに済みます。
まとめと次のステップ
ここまでの内容で、.vimrcを使って環境に応じた設定を切り替える方法や、分割管理、トラブル対処の考え方を学びました。
最後に重要なポイントを整理し、次に学ぶべき方向性を示します。
学んだ設定の振り返りと要点整理
.vimrcを使いこなすことで、日々の編集作業を効率化できます。
条件分岐を使えばOSごとに動作を変えられ、ファイルタイプに応じて自動でルールを適用できます。
さらに設定を分割して管理すれば見通しが良くなり、エラーの切り分けや環境移行が容易になります。
これらを組み合わせることで、自分の開発スタイルに合った快適な環境を維持できます。
関連記事誘導と次に学ぶべきテーマ
ここまでで基本的な設定は一通り理解できたはずです。
次のステップとしては、より高度な活用方法や他ツールとの連携を学ぶと実務での効果がさらに広がります。
プラグイン開発/Vim script 入門
プラグインの作り方やVim scriptの基礎を学ぶことで、自分専用の便利機能を追加できます。
これにより既存のプラグインをカスタマイズしたり、チームに特化したツールを提供したりすることが可能になります。
Neovim/VSCode との連携設定
Neovimでは非同期処理や拡張性が強化され、より快適な操作が可能です。
またVSCodeと連携すればGUI環境でもVimの操作感を活かせます。
普段の作業スタイルに合わせて選択することで、効率をさらに高められます。
実践環境を整える
ここまで学んだ知識を実際に試すには、Linuxを動かす環境が必要です。手軽に始めるならVPSを利用するのがおすすめです。
→ VPS徹底比較!ConoHa・さくら・Xserverの選び方
VPSを利用してLinux環境を準備したら、実際の設定は下記の記事が参考になります。
→ VPSに開発環境を自動構築する方法|Apache+Tomcat+PostgreSQL

