Vimは、強力なテキストエディタであり、その効率的な操作性から多くの開発者に愛用されています。ここでは、Vimの基本的な操作方法と、開発効率を向上させるためのおすすめプラグインを紹介します。
Vimの基本操作
Vimには複数のモードがあり、それぞれのモードで異なる操作が可能です。
モード切り替え
i: 挿入モード (Insert Mode)。テキストの入力ができます。Escキー: ノーマルモード (Normal Mode)。コマンドの実行やカーソル移動ができます。v: ビジュアルモード (Visual Mode)。テキストを選択して操作できます。:: コマンドラインモード (Command-line Mode)。コマンドを入力して実行できます。
ノーマルモードでの移動
h: 左へ移動j: 下へ移動k: 上へ移動l: 右へ移動w: 次の単語の先頭へ移動b: 前の単語の先頭へ移動{: 段落の先頭へ移動}: 段落の末尾へ移動gg: ファイルの先頭へ移動G: ファイルの末尾へ移動0: 行の先頭へ移動$: 行の末尾へ移動
ファイルの保存と終了
:w: 上書き保存:q: 編集終了(変更がない場合のみ):q!: 変更を破棄して強制終了:wq: 保存して終了:x: 保存して終了(:wqとほぼ同じ)
ノーマルモードでの操作
x: カーソル位置の1文字を削除dd: 現在の行を削除dw: カーソル位置から単語の終わりまでを削除2dd: 現在の行から2行を削除u: 直前の操作を取り消し (Undo)Ctrl + r: 取り消した操作をやり直し (Redo)yy: 現在の行をコピー (Yank)p: カーソル位置の下にペーストP: カーソル位置の上にペースト2yy: 現在の行から2行をコピー.: 直前の操作を繰り返す (Repeat)
検索と置換
/検索内容: 下方向へ検索?検索内容: 上方向へ検索n: 次の検索結果へ移動N: 前の検索結果へ移動:%s/置換前/置換後/g: ファイル全体で一括置換:%s/置換前/置換後/gc: ファイル全体で一括置換(確認あり)
その他の便利な操作
o: 現在の行の下に新しい行を挿入し、挿入モードへ移行O: 現在の行の上に新しい行を挿入し、挿入モードへ移行J: 現在の行と次の行を連結
Vimのプラグイン
Vimの機能を拡張するためには、プラグインマネージャーとプラグインの導入が不可欠です。
Vim Plug
- Vimの軽量プラグインマネージャーです。
- https://github.com/junegunn/vim-plug
おすすめプラグイン
- vim-horizon: Vimのカラースキームを変更するプラグイン。
- NERDTree: ディレクトリツリーをサイドバーに表示するプラグイン。
- fzf: 高速なファイル検索、バッファ検索、履歴検索などができるファジーファインダー。
- vim-fugitive: VimからGitコマンドを操作できるプラグイン。
- vim-gitgutter: Gitの変更差分(追加、変更、削除)を行番号の横に表示するプラグイン。
- vim-commentary:
gccコマンドで簡単にコメントアウト/アンコメントできるプラグイン。 - coc.nvim: コード補完、LSP(Language Server Protocol)サポート、スニペットなど、IDEのような機能を提供するプラグイン。
.vimrc 設定例
~/.vimrc ファイルに以下の設定を記述することで、Vimの動作やプラグインをカスタマイズできます。
" シェルをzshに設定 (お使いのシェルに合わせて変更)
set shell=/bin/zsh
" インデント設定
set shiftwidth=4 " 自動インデントの幅
set tabstop=4 " タブ文字の表示幅
set expandtab " タブをスペースに変換
set autoindent " 自動インデントを有効にする
" 検索設定
set hlsearch " 検索結果をハイライト表示
" クリップボード設定 (システムクリップボードと連携)
set clipboard=unnamed
" シンタックスハイライトを有効にする
syntax on
" Vim Plugの初期化
call plug#begin()
Plug 'ntk148v/vim-horizon'
Plug 'preservim/nerdtree'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'neoclide/coc.nvim', {'branch': 'release'}
call plug#end()
" カラースキームの設定
set termguicolors " ターミナルのTrue Colorを有効にする (カラースキームが正しく表示されるように)
colorscheme horizon " horizonカラースキームを適用
" lightline.vim の設定例 (ステータスラインをカスタマイズするプラグイン)
" lightline.vim を使用する場合は、Plug 'itchyny/lightline.vim' も追加
" let g:lightline = {}
" let g:lightline.colorscheme = 'horizon'
よくある質問(FAQ)
Q. Vimを終了できないときはどうすればいい?
ファイルを変更した状態で:qを実行すると、変更が保存されていないためエラーになり終了できない。この場合は:wq(保存して終了)または:xで変更を保存してから終了するか、変更を破棄してよいのであれば:q!で強制終了する。ノーマルモードに戻れていない(挿入モードのままになっている)場合は、先にEscキーを押してからコマンドを入力する。
Q. コピーした行がうまく貼り付けられないときは?
Vimではyyで現在行をコピー(ヤンク)し、pでカーソル位置の下に、Pでカーソル位置の上に貼り付ける。2yyのように数字を前に付ければ複数行をまとめてコピーできる。貼り付け位置が期待と違う場合は、pとPのどちらを使ったかを確認するとよい。
Q. 操作の途中でモードが分からなくなったときは?
Vimは挿入モード・ノーマルモード・ビジュアルモード・コマンドラインモードなど複数のモードを切り替えながら操作する。どのモードにいるか分からなくなった場合は、Escキーを押せば必ずノーマルモードに戻れる。ノーマルモードを起点に、iで挿入モード、vでビジュアルモード、:でコマンドラインモードへと移動する、という流れを覚えておくと迷いにくい。