とほほのVim入門(編集)

トップ > Vim > 編集

目次

コピー

Vim ではコピーのことをヤンクと呼びます。

["x]y{motion} : カーソル位置から{motion}位置までをコピー(ヤンク) (レジスタxに格納)
["x][N]yy : N行をコピー(Yank) (レジスタxに格納)
["x][N]Y : N行をコピー(Yank) (レジスタxに格納)

削除

["x][N]x : カーソル位置から後方に向けてN文字削除 (<Del>でも可) (レジスタxに格納)
["x][N]X : カーソル位置の前方のN文字削除 (レジスタxに格納)
["x]d{motion} : カーソル位置から{motion}位置までを削除(Delete) (レジスタxに格納)
["x][N]D : 行末まで(N指定時は続くN-1行も)を削除 (レジスタxに格納)
["x][N]dd : N行削除 (レジスタxに格納)
:delete(:d) : 現在の行を削除(ビジュアルモード選択中は選択範囲を削除)

カット

["x]c{motion} : カーソル位置から{motion}位置までをカット(Cut)し、挿入モードに移る (レジスタxに格納)
["x][N]s : カーソル位置からN文字をカットし、挿入モードに移る (レジスタxに格納)
["x][N]C : 行末まで(N指定時は続くN-1行も)をカットし、挿入モードに移る (レジスタxに格納)
["x][N]cc : N行をカットし、挿入モードに移る (レジスタxに格納)(Cut) (Sでも可)

ペースト

["x][N]p : カーソルの後に(レジスタxに)コピーした文字列をN回挿入(Paste)
["x][N]P : カーソルの前に(レジスタxに)コピーした文字列をN回挿入(Paste)
["x][N]gp : p と同じだが挿入後に挿入行の末尾に移動
["x][N]gP : P と同じだが挿入後に挿入行の末尾に移動
["x][N]]p : p と同じだがインデントを現在の行に合わせる
["x][N][p : P と同じだがインデントを現在の行に合わせる

置換

[N]rChar : カーソルから右方向にN文字をCharで置換(Replace)
[N]grChar : r と同じだが元のレイアウトを変更しない (例:「あか」の「あ」を gr で a に変換すると「a か」のようにスペースがはいる)
[N]R : 上書モードに入る。挿入モードと似ているが挿入ではなく古いテキストが上書きされる点が異なる。N指定時はN回上書きする
[N]gR : R と同じだが元のレイアウトを変更しない
:[{range}]s/{pattern}/{string}/[{options}] : {pattern} を {string} に置換する
  {options} の g はマッチしたパターンはすべて置換する(省略時は最初の1回のみ)
  {options} の c は置換する度に確認する
:[{range}]s [{options}] : 直前の s 置換を繰り返す
& : 直前の s 置換を繰り返す

使用例を下記に示します。

:s/AAA/ZZZ/ : AAA を ZZZ に置換
:s/AAA/ZZZ/g : AAA を ZZZ に置換 (1行に数回出現する場合はすべて置換)
:s/AAA/XXX/c : 置換を行う度に確認
:.,'as/AAA/XXX/ : 現在行(.)からマーク a の行までの AAA を ZZZ に置換
:%s/AAA/XXX/ : すべての行に対して AAA を ZZZ に置換
:s/^AAA/XXX/ : 行頭が AAA で始まるものを ZZZ に置換

大文字・小文字変換

[N]~ : N文字の大文字・小文字を逆転させる
~{motion} : カーソル位置から{motion}位置までの文字の大文字・小文字を逆転させる(tildeopがオンの場合)
g~{motion} : カーソル位置から{motion}位置までの文字の大文字・小文字を逆転させる
gU{motion} : カーソル位置から{motion}位置までの文字を大文字にする
gu{motion} : カーソル位置から{motion}位置までの文字を小文字にする

行連結

[N]J : 末尾の改行を削除してN行分連結する(空白有)(N省略時は2行)(Join)
[N]gJ : 末尾の改行を削除してN行分連結する(空白無し)(N省略時は2行)
:join(:j) : 行を結合する

タブストップ

<Tab> : タブ文字を挿入 (Ctrl-iでも可)
:set tabstop=n : タブストップをn文字に設定 (短縮形ts)
:set expandtab : タブ文字の代わりに空白文字を使用する (短縮形et)
:set noexpandtab : タブ文字を使用する (短縮形noet)

タブ文字でインデントされている行を空白文字によるインデントに変更したい場合は expandtab を設定した上で下記を実行します。

:set retab : タブの再設定を行う。expandtab が On の場合はタブ文字の代わりに空白文字を使用する (省略形ret)

インデント

:> : shiftwidth分インデントを増やす
:< : shiftwidth分インデントを減らす
[N]>> : N行に対して、shiftwidth分のインデントを挿入する
[N]<< : N行に対して、shiftwidth分のインデントを削除する
>{motion} : {motion}位置までの行に対して、shiftwidth分のインデントを挿入する
<{motion} : {motion}位置までの行に対して、shiftwidth分のインデントを削除する
={motion} : {motion}位置までの行に対して、外部 indent コマンドによるインデントを行う
== : 現在行に対して、外部 indent コマンドによるインデントを行う
:set shiftwidth=n : インデントの文字数をn文字に設定 (短縮形sw)
:set autoindent : オートインデントを有効にする (短縮形ai)
:set noautoindent : オートインデントを無効にする (短縮形noai)
:set expandtab : インデントにタブ文字の代わりに空白文字を使用する (短縮形et)
:set noexpandtab : インデントにタブ文字を使用する (短縮形noet)

整列

textwidth で指定した横幅に応じてテキストを横幅でそろえたり、右寄せ、中央寄せ、左寄せします。

gq{motion} : カーソル位置から {motion} 位置までの行を textwidth 幅にそろえる(単語の途中では改行しない)
:right(:ri) : テキストを右寄せする
:center(:ce) : テキストを中央寄せする
:left(:le) : テキストを左寄せする

横幅は textwidth で設定します。textwidth が 0 の時は 80 文字とみなされます。

:set textwidth=120          (省略形は tw)

整形

プログラムの整形を行います。equalprg が指定されていればそのプログラム、未指定であれば lisp, cindent, indentexpr で指定された内部プログラム、これも未指定であれば indent 外部コマンドが整形に使用されます。

={motion} : 現在行から {motion} までの行を整形
[N]== : N行を整形
:set equalprg={program} : 整形プログラムを指定 (略称: ep) (例: :set equalprg=indent\ -br\ -ce)
:set lisp : Lispモードに設定
:set cindent : Cインデントモードに設定 (略称: cin)
:set indentexpr={expression} : 整形に用いられる式 (略称: inde) (例: :set inde=s:MyIndentExpr())

フィルタ

指定した行に対して外部コマンドを適用することができます。例えば !Gcat -b は現在行から最終行(G)までに対して行番号をつけるコマンド(cat -b)を実行します。indent コマンドでプログラムのインデントを整形する際にも利用されます。

[N]!!{filter} : N行に対して外部コマンド {filter} を実行する
!{motion}{filter} : {motion}位置までの行に対して外部コマンド {filter} を実行する
:{range}!{filter} : {range} で指定した行に対して外部コマンド {filter} を実行する

下記に例を示します。

!!cat -b : 現在行に対して行番号付け(cat -b)を行う
3!!cat -b : 現在行から3行分に対して行番号付け(cat -b)を行う
!Gcat -b : 現在行から最終行に対して行番号付け(cat -b)を行う
!'acat -b : 現在行から マーク a までの行に対して行番付け(cat -b)を行う
:1,5!cat -b : 1行目から5行目に対して行番号付け(cat -b)を行う
:%!cat -b : 全行に対して行番号付け(cat -b)を行う

実行・アンドゥ・リドゥ

[N]. : 直前の操作をN回繰り返す
[N]u : 直前の操作をN回取り消す(Undo) (<Undo>でも可)
U : 現在の行に対する最近の変更をすべて取り消す
[N]Ctrl-r : 取り消した操作をN回再実行する(Redo)
:undo(:u) : 直前の操作をアンドゥする
:redo(:red) : 直前のアンドゥをリドゥする

インクリメント・デクリメント

[N]Ctrl-a : カーソルがある位置の数字をN回インクリメント
[N]Ctrl-x : カーソルがある位置の数字をN回デクリメント

Rot13暗号化

アルファベット a-z A-Z を Rot13 で暗号化することができます。A→N、B→O、C→P のようにアルファベットを13文字進めるだけで暗号化というほどでもありませんが、ポケモンのアンノーン文字みたいなものですね。Rot13 したものをもう一度 Rot13 すると元の文字に戻ります。

g?{motion} : 現在位置から {motion} 位置までをRot13で暗号化
[N]g?? : N行をRot13で暗号化
[N]g?g? : N行をRot13で暗号化

Copyright (C) 2023 杜甫々
初版:2023年8月6日 最終更新:2023年8月13日
http://www.tohoho-web.com/vim/edit.html