Vim
Vimは、すべてのUNIXシステムにインストールされているユニバーサルテキストエディタです。Neovimが革新を続ける一方で、Vimは後方互換性と安定性に重点を置いています。
使用すべき場面
- ユニバーサルサーバー & システム編集: 外部ソフトウェアをインストールすることなく、あらゆるUnix/Linuxサーバー上でシステム設定、スクリプト、コードを編集できます。
- モーダルテキスト操作: オペレータ-モーションの文法(
dap、ci"、gUiw)を使用したテキスト変換を構成します。 - ヘッドレスマクロ自動化: 数百行にわたる反復的な編集操作を記録し、再生します(
qa、@a)。 - Gitコミット & マージ編集: コミットメッセージ、インタラクティブリベース、差分コンフリクト解決のための高速インタラクティブ編集です。
クイックスタート
1. 最小限の ~/.vimrc
syntax on
set number
set relativenumber
set tabstop=2
set shiftwidth=2
set expandtab
set hlsearch
set incsearch
set clipboard=unnamed
let mapleader = " "
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
2. コア編集コマンド
i/a: 挿入モード(カーソルの前 / 後)ci": 引用符内を変更da{: 中括弧周辺を削除:%s/foo/bar/g: ファイル内のすべてのfooをbarに置換.: 最後の変更を繰り返す
コアコンセプト
モダンなプロダクションVimrc(~/.vimrc)
適切なデフォルト、プラグインマネージャー、コードナビゲーションの設定:
" ~/.vimrc
set nocompatible
filetype plugin indent on
syntax on
" 一般設定
set number
set relativenumber
set expandtab
set shiftwidth = 2
set tabstop = 2
set autoindent
set smartindent
set hlsearch
set incsearch
set ignorecase
set smartcase
set hidden
set backspace=indent,eol,start
set updatetime=300
set clipboard=unnamed
" リーダーキーマッピング
let mapleader = " "
" 高速分割ナビゲーション
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
" 検索ハイライトクリア
nnoremap <leader>h :nohlsearch<CR>
必須テキストオブジェクト & 文法
オペレータ(d、c、y、v)とテキストオブジェクトやモーションの組み合わせ:
ci" - ダブルクォーテーション内を変更 ("foo" -> "")
di( - 括弧内を削除
yap - 段落周辺をヤンク(コピー)
gUiw - 内側の単語を大文字に変換
dt, - カーソル位置からカンマまで削除
. - 最後の変更をすぐに繰り返す
マクロの記録と実行
反復的な表形式データ変換の自動化:
1. `qa` を押して、レジスタ 'a' へのマクロ記録を開始
2. テキスト編集手順を実行(例:`0iconst <Esc>A = true;<Esc>j`)
3. `q` を押して記録を終了
4. 現在の行でマクロを再生: `@a`
5. 50行にわたってマクロを再生: `50@a`
6. ビジュアル選択範囲でマクロを実行: `:'<,'>normal @a`
一般的なパターン
マクロ記録と一括実行
問題: 複数行にわたって反復的なマルチステップ編集を実行する。
解決策: キーストロークをレジスタ q に記録します。
- カーソルをターゲットの開始位置に置きます。
qqを押して、レジスタqへの記録を開始します。- 編集シーケンスを実行します(例:
I" <Esc> A",<Esc> j ^)。 qを押して記録を停止します。@qで再生するか、50行にわたって実行するには50@qを使用します。
vim-plugによるプラグイン管理
問題: 手動でパスを操作せずにVimプラグインをインストールして整理する。
解決策: vim-plug を使用します。
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-sensible'
Plug 'tpope/vim-fugitive'
Plug 'preservim/nerdtree'
call plug#end()
Vim内で :PlugInstall を実行してインストールします。
ベストプラクティス(2026)
- 推奨: モーダルナビゲーション(
h、j、k、l、w、b、e)をマスターし、矢印キーに手を伸ばさないようにします。 - 推奨: テキストオブジェクト(
ciw、da(、yi{)を活用して、最小限のキーストロークで構造化コードブロックを編集します。 - 推奨: ドットコマンド(
.)を使用して、同様の行にわたって最近のテキスト変換を繰り返します。 - 推奨:
set hiddenを有効にして、即座に保存を強制せずにバッファをバックグラウンドで開いたままにできるようにします。 - 非推奨: 何百もの重いレガシーVimScriptプラグインをインストールしないでください。リッチなIDEエクスペリエンスが必要な場合は、Neovim Luaに移行してください。
- 非推奨: スワップファイル(
.swp)を残したままにしないでください。set noswapfileを設定するか、専用のスワップディレクトリを設定してください。 - 非推奨: リモートマシンで顕著な起動遅延を引き起こす同期外部呼び出しを
~/.vimrcで使用しないでください。
トラブルシューティング
| エラー / 症状 | 原因 | 解決策 |
|---|---|---|
システムクリップボードへのコピー失敗("+y が無効) | Vimが +clipboard サポートなしでコンパイルされた | vim-gtk3(Ubuntu)または macvim / neovim をクリップボードサポート有効でインストールします。 |
矢印キーで A、B、C、D が挿入される | 厳密なVi互換モードで実行されている | ~/.vimrc の先頭に set nocompatible を追加します。 |
| 検索後の末尾空白のハイライトが残る | 検索ハイライトがアクティブのまま | :nohlsearch を押すか、<leader>h :nohlsearch<CR> をバインドします。 |