(同じ利用者による、間の246版が非表示)
1行目: 1行目:
天才ビル・ジョイが作ったエディタ。
[[ファイル:vim.png|thumb|Vi IMproved|200px]]
天才ビル・ジョイが自身のプログラミングのために作ったエディタ。進化系はvim。港の管理運営のために必須。


__TOC__
__TOC__
==初期設定==
ChatGPTが真っ先に教えてくれた設定。
# vim .vimrc
" ========== 基本設定 ==========                                                                                                                                                                                                 
set number          " 行番号を表示
set showcmd        " 入力中のコマンドを表示
set wildmenu        " コマンド補完を強化
set ruler          " ステータスラインにカーソル位置を表示
set laststatus=2    " ステータスラインを常に表示
let mapleader = " "    " スペースキーをリーダーキーに設定
" ========== タブ・インデント ==========                                                                                                                                                                                         
set expandtab      " タブをスペースに変換
set tabstop=2      " タブ幅を4スペース
set shiftwidth=2    " 自動インデントも4スペース
set autoindent      " 自動インデントを有効化
" ========== 検設定 ==========
set hlsearch        " 検索結果をハイライト
set incsearch      " 入力と同時に検索
set ignorecase      " 検索時に大文字小文字を無視
set smartcase      " 大文字を含めたら区別
" ========== 表示設定 ==========
set nowrap          " テキストの折り返しを無効化
set background=dark " ダークテーマ用の配色
syntax on      " シンタックスハイライトを有効化
colorscheme desert  " カラースキームを desert に。default もある
" ========== プラグイン ==========
call plug#begin('~/.vim/plugged')
" ステータスライン
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
" ファイルエクスプローラー
Plug 'preservim/nerdtree'
" ファイル検索 / grep
Plug 'junegunn/fzf'
Plug 'junegunn/fzf.vim'
" JS開発
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'maxmellon/vim-jsx-pretty'
call plug#end()
" ========== 便利なキーマッピング ==========
inoremap jj <Esc>
inoremap <silent><expr> <CR> pumvisible() ? coc#pum#confirm() : "\<CR>"
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
nnoremap <leader>s :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>r :execute 'Rg ' . expand('<cword>')<CR>
nnoremap <C-g> :Rg<CR>
nnoremap <C-f> :Files<CR>
nnoremap <C-b> :Buffers<CR>
nnoremap <C-n> :NERDTreeToggle<CR>
* :source ~/.vimrc で設定を適用
==プラグイン==
vimプラグインを使えば「軽量なデフォルトvim」をベースに「自分好みのIDE」にできる。軽量なまま。軽めのプログラミング言語なら重量級のIDEに課金して90%の機能を無駄にするより、vim使ったほうがスマート。
# GPTおすすめのプラグイン
1. fzf.vim(超高速ファイル・単語検索)
2. vim-airline(軽量なステータスバー)
3. nerdtree(ファイルエクスプローラー)
4. vim-gitgutter(git 連携)
5. coc.nvim(VSCode 並みの補完・LSP。PHPも補完できる)
:PlugInstall    # .vimrc に設定を追記した後で


==環境とシェル==
==環境とシェル==


* :set option --- option をオン
{| class="wikitable" summary="環境とシェル"
* :set nooption --- option をオフ
!コマンド
* :sh, ^D --- シェルを起動、終了
!説明
* <nowiki>:!command</nowiki> --- コマンドを実行
|-
* :n,m! command --- n行目から m行目まで command でフィルタ処理
|<code>:set</code> || 現在セッションのオプションを表示
* :r !command --- コマンドを現在のファイルに読み込む
|-
|<code>:set shiftwidth=4</code> || インデントシフトの初期値
|-
|<code>:set autoindent </code> || 自動インデントモード
|-
|<code>:set hlsearch</code> || 検索時のハイライト表示をオン
|-
|<code>:set wrap</code> || 長文を折り返す
|-
|<code>:set showmatch</code> || ()や{}の対応表示をオン
|-
|<code>:set list</code> || タグや空白などの見えない文字が確認できる
|-
|<code>:set all</code> || 全てのオプションを表示
|-
|<code>:sh</code>, <code>^D</code> || シェルを起動、終了
|-
|<code>:!command</code> || コマンドを実行
|-
|<code>:n,m!command</code> || n行目から m行目まで command でフィルタ処理
|-
|<code>:r !date</code> || 日時情報がカレント行に書き込まれる
|}
 
==起動とファイル操作==
 
{| class="wikitable" summary="起動とファイル操作"
!コマンド
!説明
|-
|<code>vi file1 file2 file3</code> || file1とfile2をオープン
|-
|<code>:r file1</code> || 現在行直下にfile1を全てコピー
|-
|<code>:5r file1</code> || 5行目にfile1を全てコピー
|-
|<code>:w! newfile</code> || 書き込み権限がない場合の一時しのぎ
|}


==画面分割==
==画面分割==


* :sp filename --- filename を横分割で開く
{| class="wikitable" summary="画面分割"
* :vsp filename --- filename を縦分割で開く
|-
* [Ctrl] + [W] + [Ctrl] + [W] --- 次のウィンドウに移動
!コマンド
* [Ctrl] + [W] + j/k/l/h --- 下/上/右/左のウィンドウに移動
!説明
* [Ctrl] + [W] + [3+/3-] --- ウィンドウの横軸を3つ広げる/縮める
|-
* [Ctrl] + [W] + [3>/3<] --- ウィンドウの縦軸を3つ広げる/縮める
|<code>^w s</code>, <code>:sp file</code>
|(split) file を横分割で開く
|-
|<code>^w v</code>, <code>:vs file</code>
|(Verticle Split) file を縦分割で開く
|-
|<code>^w o</code>, <code>:on</code> || (only) 編集中ファイル以外を全て閉じる
|-
|<code>^w q</code>
|現在のウィンドウを閉じる
|-
|<code>^w + j/k/l/h</code>
|下/上/右/左のウィンドウに移動
|-
|<code>^w + [+/-]</code>
|ウィンドウの横軸を1行広げる/縮める
|-
|<code>^w + [3>/3<]</code>
|ウィンドウの縦軸を3つ広げる/縮める
|-
|<code>:ar</code> || 起動中のファイルをリスト表示
|-
|<code>:n</code> || (next) 次のファイルへ移動
|-
|<code>:rew</code> || 先頭のファイルへ移動
|-
|<code>:last</code> || 最後のファイルへ移動
|-
|<code>:e file2</code> || file2を編集する
|-
|<code>:e#</code>, <code>Ctrl + ^</code> || 直前のファイル編集へ戻る
|}


==テキスト移動==
==テキスト移動==


* h, j, k, l --- 左、下、上、右
{| class="wikitable" summary="テキスト移動"
* w, W, b, B --- 前/後の単語(大文字は大きいジャンプ)
|-
* e, E --- 単語の末尾(大文字は大きいジャンプ)
!コマンド
* ), ( --- 次/前の文章へ
!説明
* }, { --- 次/前の空行で区切られたブロックへ
|-
|<code>h</code>, <code>j</code>, <code>k</code>, <code>l</code>
|左、下、上、右
|-
|<code>w</code>, <code>W</code>, <code>b</code>, <code>B</code>
|前、後の単語(大文字は大きいジャンプ)
|-
|<code>e</code>, <code>E</code>
|単語の末尾(大文字は大きいジャンプ)
|-
|<code>)</code>, <code>(</code>
|次、前の文章へ
|-
|<code>}</code>, <code>{</code>
|次、前の空行で区切られたブロックへ
|-
|<code>%</code>
|括弧移動
|-
|}


==行移動==
==行移動==


* [Enter] --- 次の行
{| class="wikitable" summary="行移動"
* ^, $ --- カレント行の先頭/末尾
|-
* H --- Head. 画面の最上行
!コマンド
* M --- Middle. 画面の中央行
!説明
* L --- Last. 画面の最下行
|-
* nH, nL --- 上(下)から n 行目
|<code>[Enter]</code>
|次の行
|-
|<code>0</code>, <code>^</code>, <code>$</code>
|カレント行の先頭、文字先頭、末尾
|-
|<code>+</code>
|下の行の文字先頭
|-
|<code>-</code>
|上の行の文字先頭
|-
|<code>H</code>
|(Head) 画面の最上行
|-
|<code>M</code>
|(Middle) 画面の中央行
|-
|<code>L</code>
|(Lass) 画面の最下行
|-
|<code>nH</code>, <code>nL</code>
|上、下から n行目
|-
|<code>z[Enter]</code>
|カーソル位置を画面の一番上に
|-
|<code>z.</code>
|カーソル位置を画面中央に
|-
|<code>z-</code>
|カーソル位置を画面の一番下に
|-
|}


==スクロール==
==スクロール==


* [Ctrl] + [Y], [Ctrl] + [E] --- 1行ずつ上/下にスクロール
{| class="wikitable" summary="スクロール"
* [Ctrl] + [U], [Ctrl] + [D] --- 半画面ずつ上/下にスクロール
|-
* [Ctrl] + [B], [Ctrl] + [F] --- 1画面ずつ上/下にスクロール
!コマンド
* z[Enter] --- カーソルのある行を一番上に
!説明
* z. --- カーソルのある行を中央に
|-
* z- --- カーソルのある行を一番下に
|<code>Ctrl + y</code>, <code>Ctrl + e</code>
|1行ずつ上、下にスクロール
|-
|<code>Ctrl + u</code>, <code>Ctrl + d</code>
|半画面ずつ上、下にスクロール
|-
|<code>Ctrl + b</code>, <code>Ctrl + f</code>
|1画面ずつ上、下にスクロール
|-
|}


==検索と置換==
==検索==


* tx --- カレント行内でカーソルより後方にある x の直前にジャンプ
{| class="wikitable" summary="検索"
* Tx --- カレント行内でカーソルより前方にある x の直前にジャンプ
|-
* fx --- カレント行内でカーソルより後方にある x にジャンプ
!コマンド
* Fx --- カレント行内でカーソルより前方にある x にジャンプ
!説明
* [;], [,] --- カレント行の文字検索を前方/後方に繰り返す
|-
* /pattern --- 前方にパターンを検索
|<code>tx</code>
* ?pattern --- 後方にパターンを検索
|カレント行内でカーソルより後方にある x の直前にジャンプ
* n, N --- 直近の検索を前方/後方に繰り返す
|-
* :set hlsearch --- 検索結果をハイライト
|<code>Tx</code>
* :s/old/new/ --- カレント行の最初の old を new に置換
|カレント行内でカーソルより前方にある x の直前にジャンプ
* :s/old/new/g --- カレント行の全ての old を new に置換
|-
* :1,$s/old/new/g, :%s/old/new/g --- ファイル全ての old を new に置換
|<code>fx</code>
* <nowiki>:%s/old/new/gc</nowiki> --- ファイル全ての old を逐一確認しながら new に変換
|カレント行内でカーソルより後方にある x にジャンプ
|-
|<code>Fx</code>
|カレント行内でカーソルより前方にある x にジャンプ
|-
|<code>;</code>, <code>,</code>
|カレント行の文字検索を前方、後方に繰り返す
|-
|<code>/pattern</code>
|前方にパターンを検索
|-
|<code>?pattern</code>
|後方にパターンを検索
|-
|<code>*</code>
|カーソル上のテキストを検索
|-
|<code>n</code>, <code>N</code>
|直近の検索を前方、後方に繰り返す
|-
|}


==行番号とマークによるジャンプ==
==置換==


* [Ctrl] + [G] --- ファイル名、状態、カレント行番号の表示
{| class="wikitable" summary="置換"
* gg --- ファイル先頭にジャンプ
|-
* G --- ファイル末尾にジャンプ
!コマンド
* :n --- n行目にジャンプ
!説明
* mx --- 現在位置を x としてマーク
|-
* `x --- x にジャンプ
|<code>:s/old/new/</code>
|カレント行の最初の old を new に置換
|-
|<code>:s/old/new/g</code>
|カレント行の全ての old を new に置換
|-
|<code>:5s/old/new/g</code>
|5行目の全ての old を new に置換
|-
|<code>:23,44s/old/new/g</code>
|23~44行目内の全ての old を new に置換
|-
|<code>:%s/old/new/</code>, <code>:1,$s/old/new/</code>
|ファイル全ての old を new に置換
|-
|<code>:%s/old/new/c</code>
|ファイル全ての old を逐一確認しながら new に変換
|-
|<code>:%s/\(That\) or \(this\)/\2 or \1/</code>
|ホールドバッファ1,2によりthis or That と置換
|-
|<code>~</code>
|大文字/小文字に変換
|}
パターンマッチング(正規表現)による高度な置換は『vi入門83~107p』を確認
 
==ジャンプ==
 
{| class="wikitable" summary="行番号とマークによるジャンプ"
|-
!コマンド
!説明
|-
|<code>Ctrl + G</code>
|ファイル名、状態、カレント行番号の表示
|-
|<code>gg</code>
|ファイル先頭にジャンプ
|-
|<code>G</code>
|ファイル末尾にジャンプ
|-
|<code>23G</code>, <code>:23</code>
|23行目にジャンプ
|-
|<code>mx</code>
|現在位置を x でマーク
|-
|<code>'x</code>
|x がある行の先頭にジャンプ
|-
|<code>`x</code>
|x にジャンプ
|}


==挿入と変更==
==挿入と変更==


* i, a --- カーソルの前/後にテキストを挿入
{| class="wikitable" summary="挿入と変更"
* I, A --- 行の先頭/末尾にテキストを挿入
|-
* O, o --- カーソルの上/下にテキストを挿入
!コマンド
* r --- 一文字変更
!説明
* cw --- 単語変更
|-
* cc --- カレント行を変更
|<code>i</code>, <code>a</code> || カーソルの前、後にテキストを挿入
* c + [motion] --- モーションで指定した場所までを変更
|-
* C --- 行末まで変更
|<code>I</code>, <code>A</code> || 行の先頭、末尾にテキストを挿入
* R --- 重ね書き
|-
* s, S --- 1文字/カレント行をテキストに変更
|<code>O</code>, <code>o</code> || カーソルの上、下にテキストを挿入
* 3iFOO --- FOO が3回入力。Vim によるテキスト編集はプログラミング
|-
|<code>s</code>, <code>S</code> || 1文字、カレント行をテキストに変更
|-
|<code>r</code> || 一文字変更
|-
|<code>cw</code> || 単語変更
|-
|<code>cc</code> || カレント行を変更
|-
|<code>c + [motion]</code> || モーションで指定した場所までを変更
|-
|<code>c + nG</code> || カレント行からn行目までを変更
|-
|<code>C</code> || 行末まで変更
|-
|<code>R</code> || 重ね書き
|-
|<code>10i#-</code> || #- の組み合わせを10回入力。Vim によるテキスト編集はプログラミング
|-
|<code>Ctrl + t</code> || (挿入モード)右にインデント
|-
|<code>Ctrl + d</code> || (挿入モード)左にインデント
|-
|<code>>></code> || 右にインデント
|-
|<code>3<<</code> || 3行まとめて左にインデント
|-
|<code>:5,10 <<</code> || 5~10行まとめて右に2インデント
|}


==削除とヤンク==
==削除とヤンク==


* x, X --- 文字を前方・後方に削除
{| class="wikitable" summary="削除とヤンク"
* dw --- 単語を削除
|-
* dd --- カレント行を削除
!コマンド
* D --- 行末までを削除
!説明
* d + [motion] --- モーションで指定した場所までを削除
|-
* yw --- 単語のヤンク
|<code>^w</code>, <code>^u</code>
* yy, Y --- カレント行のヤンク
|入力中の単語を削除。入力中の行を削除
* y + [motion] --- モーションで指定した場所までをヤンク
|-
* P, p --- 削除/ヤンクしたテキストをカーソルの前/後にペースト
|<code>x</code>, <code>X</code>
* "ayy --- a という名前のバッファにカレント行をヤンク
|文字を前方、後方に削除
* "aP --- カーソルの前に、バッファa のテキストをペースト
|-
|<code>dw</code>
|単語を直後の空白とセットで削除
|-
|<code>de</code>
|単語のみを削除
|-
|<code>dd</code>
|カレント行を削除
|-
|<code>D</code>
|行末までを削除
|-
|<code>d + [motion]</code>
|モーションで指定した場所までを削除
|-
|<code>d + 7G</code>
|カレント行から7行目までを削除
|-
|<code>%d</code>
|全て削除
|-
|<code>yw</code>
|単語のヤンク
|-
|<code>yy</code>, <code>Y</code>
|カレント行のヤンク
|-
|<code>y + [motion]</code>
|モーションで指定した場所までをヤンク
|-
|<code>y + 7G</code>
|カレント行から7行目までをヤンク
|-
|<code>P</code>, <code>p</code>
|削除、ヤンクしたテキストをカーソルの前、後にペースト
|}
 
==レジスタの活用==
 
{| class="wikitable" summary="レジスタの活用"
|-
!コマンド
!説明
|-
|-
|<code>:reg</code>
|レジスタ一覧
|-
|<code>"a5Y</code>
|レジスタa にカレント行から5行を登録
|-
|<code>"AY</code>
|レジスタa にカレント行を追記
|-
|<code>"bp</code>
|レジスタb の内容をペースト
|-
|<code>^r + a</code>
|(挿入モードで)レジスタa をペースト
|-
|<code>^r +</code>
|(挿入モードで)クリップボードをペースト
|-
|}


==その他==
==Exモードの活用==


* . --- 直近の編集コマンドの繰り返し
{| class="wikitable" summary="exエディタの活用"
* v, V --- 文字/行の選択
|-
* u, U --- アンドゥ、カレント行の復元
!コマンド
* [Ctrl] + [R] --- リドゥ
!説明
* J --- 2行の連結
|-
|<code>%</code>, <code>1,$</code>
|ファイル内全ての行
|-
|<code>0</code>, <code>.</code>, <code>$</code>
|ファイルの先頭、カレント行、最終行
|-
|<code>x-n</code>
|xのn行前
|-
|<code>x+n</code>
|xのn行後
|-
|<code>Q</code>
|exエディタを起動
|-
|<code>:vi</code>
|viモードへ戻る
|-
|<code>:3,5d</code>
|3行目〜5行目を削除
|-
|<code>:.,$d</code>
|カレント行からファイル最終行までを削除
|-
|<code>:3,5m0</code>
|3行目〜5行目をファイル先頭に移動
|-
|<code>:3,5m10</code>
|3行目〜5行目を10行目に移動
|-
|<code>:13i</code> → <code>text</code> → <code>.</code> || 13行目に text を挿入
|-
|<code>:12c</code> → <code>text</code> → <code>.</code>
|(change) 12行目を text で置き換える
|}


==exアドレスと活用==
==その他==


* 1,$ (%) --- ファイル内全ての行
{| class="wikitable" summary="その他"
* x,y --- x行目から y行目まで
|-
* [0], [.], [$] --- ファイルの先頭/カレント行/最終行
!コマンド
* :3,5d --- 3行目〜5行目を削除
!説明
* <nowiki>:.,$d</nowiki> --- カレント行からファイル最終行までを削除
|-
* :3,5m0 --- 3行目〜5行目をファイル先頭に移動
|<code>.</code>
* :3,5m10 --- 3行目〜5行目を10行目に移動
|直近の編集コマンドの繰り返し
* :3,5co$ --- 3行目〜5行目をファイル最終行にコピー
|-
|<code>v</code>, <code>V</code>
|文字、行の選択
|-
|<code>ggVG</code>
|ファイル内全てを選択
|-
|<code>u</code>, <code>U</code>
|アンドゥ、カレント行の復元
|-
|<code>Ctrl + r</code>
|リドゥ
|-
|<code>J</code>
|2行の連結
|-
|<code>:ab</code>
|ab に登録されている略語の一覧
|-
|<code>:ab IBM International Business Machines</code>
|IBM を入力すると勝手に正式名称を展開してくれる
|-
|<code>:unab</code>
|ab に登録されている略語を解除
|}


==保存と終了==
==保存と終了==


* [ESC], [Ctrl] + [ --- 挿入モードへ
{| class="wikitable" summary="保存と終了"
* :e! --- 一番最初の状態へ戻す
|-
* :w, :w! --- 保存、強制的に保存
!コマンド
* :3,5w newfile --- 3〜5行目を newfile として保存
!説明
* :3,5w>>file --- 3〜5行目を file に追記
|-
* ZZ --- 保存して終了
|<code>ESC</code>, <code>Ctrl + [</code>
* :q, :q! --- 終了、変更を破棄して終了
|挿入モードへ
* Q --- viモードを終了して exモードに切り替える
|-
* :vi --- viモードに戻る
|<code>:e!</code>
|一番最初の状態へ戻す
|-
|<code>:w</code>, <code>:w!</code>, <code>:wa</code>
|保存、強制的に保存、オープンしているファイルを全て保存
|-
|<code>:3,5w newfile</code>
|3〜5行目を newfile として保存
|-
|<code>:3,5w>>file</code>
|3〜5行目を file に追記
|-
|<code>ZZ</code>
|保存して終了
|-
|<code>:q</code>, <code>:q!</code>
|終了、変更を破棄して終了
|}

2025年4月10日 (木) 22:14時点における最新版

Vi IMproved

天才ビル・ジョイが自身のプログラミングのために作ったエディタ。進化系はvim。港の管理運営のために必須。

初期設定

ChatGPTが真っ先に教えてくれた設定。

# vim .vimrc
" ========== 基本設定 ==========                                                                                                                                                                                                  
set number          " 行番号を表示
set showcmd         " 入力中のコマンドを表示
set wildmenu        " コマンド補完を強化
set ruler           " ステータスラインにカーソル位置を表示
set laststatus=2    " ステータスラインを常に表示
let mapleader = " "     " スペースキーをリーダーキーに設定

" ========== タブ・インデント ==========                                                                                                                                                                                          
set expandtab       " タブをスペースに変換
set tabstop=2       " タブ幅を4スペース
set shiftwidth=2    " 自動インデントも4スペース
set autoindent      " 自動インデントを有効化

" ========== 検設定 ==========
set hlsearch        " 検索結果をハイライト
set incsearch       " 入力と同時に検索
set ignorecase      " 検索時に大文字小文字を無視
set smartcase       " 大文字を含めたら区別

" ========== 表示設定 ==========
set nowrap          " テキストの折り返しを無効化
set background=dark " ダークテーマ用の配色
syntax on       " シンタックスハイライトを有効化
colorscheme desert  " カラースキームを desert に。default もある

" ========== プラグイン ==========
call plug#begin('~/.vim/plugged')
" ステータスライン
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
" ファイルエクスプローラー
Plug 'preservim/nerdtree'
" ファイル検索 / grep
Plug 'junegunn/fzf'
Plug 'junegunn/fzf.vim'
" JS開発
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'maxmellon/vim-jsx-pretty'
call plug#end()

" ========== 便利なキーマッピング ==========
inoremap jj <Esc>
inoremap <silent><expr> <CR> pumvisible() ? coc#pum#confirm() : "\<CR>"
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
nnoremap <leader>s :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>r :execute 'Rg ' . expand('<cword>')<CR>
nnoremap <C-g> :Rg<CR>
nnoremap <C-f> :Files<CR>
nnoremap <C-b> :Buffers<CR>
nnoremap <C-n> :NERDTreeToggle<CR>

  • :source ~/.vimrc で設定を適用

プラグイン

vimプラグインを使えば「軽量なデフォルトvim」をベースに「自分好みのIDE」にできる。軽量なまま。軽めのプログラミング言語なら重量級のIDEに課金して90%の機能を無駄にするより、vim使ったほうがスマート。

# GPTおすすめのプラグイン
1. fzf.vim(超高速ファイル・単語検索)
2. vim-airline(軽量なステータスバー)
3. nerdtree(ファイルエクスプローラー)
4. vim-gitgutter(git 連携)
5. coc.nvim(VSCode 並みの補完・LSP。PHPも補完できる)
:PlugInstall    # .vimrc に設定を追記した後で

環境とシェル

コマンド 説明
:set 現在セッションのオプションを表示
:set shiftwidth=4 インデントシフトの初期値
:set autoindent 自動インデントモード
:set hlsearch 検索時のハイライト表示をオン
:set wrap 長文を折り返す
:set showmatch ()や{}の対応表示をオン
:set list タグや空白などの見えない文字が確認できる
:set all 全てのオプションを表示
:sh, ^D シェルを起動、終了
:!command コマンドを実行
:n,m!command n行目から m行目まで command でフィルタ処理
:r !date 日時情報がカレント行に書き込まれる

起動とファイル操作

コマンド 説明
vi file1 file2 file3 file1とfile2をオープン
:r file1 現在行直下にfile1を全てコピー
:5r file1 5行目にfile1を全てコピー
:w! newfile 書き込み権限がない場合の一時しのぎ

画面分割

コマンド 説明
^w s, :sp file (split) file を横分割で開く
^w v, :vs file (Verticle Split) file を縦分割で開く
^w o, :on (only) 編集中ファイル以外を全て閉じる
^w q 現在のウィンドウを閉じる
^w + j/k/l/h 下/上/右/左のウィンドウに移動
^w + [+/-] ウィンドウの横軸を1行広げる/縮める
^w + [3>/3<] ウィンドウの縦軸を3つ広げる/縮める
:ar 起動中のファイルをリスト表示
:n (next) 次のファイルへ移動
:rew 先頭のファイルへ移動
:last 最後のファイルへ移動
:e file2 file2を編集する
:e#, Ctrl + ^ 直前のファイル編集へ戻る

テキスト移動

コマンド 説明
h, j, k, l 左、下、上、右
w, W, b, B 前、後の単語(大文字は大きいジャンプ)
e, E 単語の末尾(大文字は大きいジャンプ)
), ( 次、前の文章へ
}, { 次、前の空行で区切られたブロックへ
% 括弧移動

行移動

コマンド 説明
[Enter] 次の行
0, ^, $ カレント行の先頭、文字先頭、末尾
+ 下の行の文字先頭
- 上の行の文字先頭
H (Head) 画面の最上行
M (Middle) 画面の中央行
L (Lass) 画面の最下行
nH, nL 上、下から n行目
z[Enter] カーソル位置を画面の一番上に
z. カーソル位置を画面中央に
z- カーソル位置を画面の一番下に

スクロール

コマンド 説明
Ctrl + y, Ctrl + e 1行ずつ上、下にスクロール
Ctrl + u, Ctrl + d 半画面ずつ上、下にスクロール
Ctrl + b, Ctrl + f 1画面ずつ上、下にスクロール

検索

コマンド 説明
tx カレント行内でカーソルより後方にある x の直前にジャンプ
Tx カレント行内でカーソルより前方にある x の直前にジャンプ
fx カレント行内でカーソルより後方にある x にジャンプ
Fx カレント行内でカーソルより前方にある x にジャンプ
;, , カレント行の文字検索を前方、後方に繰り返す
/pattern 前方にパターンを検索
?pattern 後方にパターンを検索
* カーソル上のテキストを検索
n, N 直近の検索を前方、後方に繰り返す

置換

コマンド 説明
:s/old/new/ カレント行の最初の old を new に置換
:s/old/new/g カレント行の全ての old を new に置換
:5s/old/new/g 5行目の全ての old を new に置換
:23,44s/old/new/g 23~44行目内の全ての old を new に置換
:%s/old/new/, :1,$s/old/new/ ファイル全ての old を new に置換
:%s/old/new/c ファイル全ての old を逐一確認しながら new に変換
:%s/\(That\) or \(this\)/\2 or \1/ ホールドバッファ1,2によりthis or That と置換
~ 大文字/小文字に変換

パターンマッチング(正規表現)による高度な置換は『vi入門83~107p』を確認

ジャンプ

コマンド 説明
Ctrl + G ファイル名、状態、カレント行番号の表示
gg ファイル先頭にジャンプ
G ファイル末尾にジャンプ
23G, :23 23行目にジャンプ
mx 現在位置を x でマーク
'x x がある行の先頭にジャンプ
`x x にジャンプ

挿入と変更

コマンド 説明
i, a カーソルの前、後にテキストを挿入
I, A 行の先頭、末尾にテキストを挿入
O, o カーソルの上、下にテキストを挿入
s, S 1文字、カレント行をテキストに変更
r 一文字変更
cw 単語変更
cc カレント行を変更
c + [motion] モーションで指定した場所までを変更
c + nG カレント行からn行目までを変更
C 行末まで変更
R 重ね書き
10i#- #- の組み合わせを10回入力。Vim によるテキスト編集はプログラミング
Ctrl + t (挿入モード)右にインデント
Ctrl + d (挿入モード)左にインデント
>> 右にインデント
3<< 3行まとめて左にインデント
:5,10 << 5~10行まとめて右に2インデント

削除とヤンク

コマンド 説明
^w, ^u 入力中の単語を削除。入力中の行を削除
x, X 文字を前方、後方に削除
dw 単語を直後の空白とセットで削除
de 単語のみを削除
dd カレント行を削除
D 行末までを削除
d + [motion] モーションで指定した場所までを削除
d + 7G カレント行から7行目までを削除
%d 全て削除
yw 単語のヤンク
yy, Y カレント行のヤンク
y + [motion] モーションで指定した場所までをヤンク
y + 7G カレント行から7行目までをヤンク
P, p 削除、ヤンクしたテキストをカーソルの前、後にペースト

レジスタの活用

コマンド 説明
:reg レジスタ一覧
"a5Y レジスタa にカレント行から5行を登録
"AY レジスタa にカレント行を追記
"bp レジスタb の内容をペースト
^r + a (挿入モードで)レジスタa をペースト
^r + (挿入モードで)クリップボードをペースト

Exモードの活用

コマンド 説明
%, 1,$ ファイル内全ての行
0, ., $ ファイルの先頭、カレント行、最終行
x-n xのn行前
x+n xのn行後
Q exエディタを起動
:vi viモードへ戻る
:3,5d 3行目〜5行目を削除
:.,$d カレント行からファイル最終行までを削除
:3,5m0 3行目〜5行目をファイル先頭に移動
:3,5m10 3行目〜5行目を10行目に移動
:13itext. 13行目に text を挿入
:12ctext. (change) 12行目を text で置き換える

その他

コマンド 説明
. 直近の編集コマンドの繰り返し
v, V 文字、行の選択
ggVG ファイル内全てを選択
u, U アンドゥ、カレント行の復元
Ctrl + r リドゥ
J 2行の連結
:ab ab に登録されている略語の一覧
:ab IBM International Business Machines IBM を入力すると勝手に正式名称を展開してくれる
:unab ab に登録されている略語を解除

保存と終了

コマンド 説明
ESC, Ctrl + [ 挿入モードへ
:e! 一番最初の状態へ戻す
:w, :w!, :wa 保存、強制的に保存、オープンしているファイルを全て保存
:3,5w newfile 3〜5行目を newfile として保存
:3,5w>>file 3〜5行目を file に追記
ZZ 保存して終了
:q, :q! 終了、変更を破棄して終了