5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vimコマンドチートシート

Last updated at Posted at 2024-02-17

実践Vimを読んで、自分がよく使うものをまとめています。

■ 1. ノーマルモード

オペレータ(テキスト操作)

オペレータとはテキストに対する操作(削除や変更)に利用されるコマンドです。
オペレータは後述のモーション(移動)と組み合わせて使います。

c{motion}  # 削除して編集モードに移行
d{motion}  # 削除
y{motion}  # ヤンク(コピー)
g~{motion} # 大文字と小文字を入れ替える
gu{motion} # 小文字化
gU{motion} # 大文字化
>{motion}  # インデントを深くする
<{motion}  # インデントを浅くする
={motion}  # 自動インデント

モーション(移動)

モーションとはカーソルの移動に利用されるコマンドです。
モーションは単体でカーソルの移動に利用するほか、オペレータと組み合わせて利用することで、オペレータの対象範囲を指定することができます。

h            # 左に移動
j            # 下に移動
k            # 上に移動
l            # 右に移動
{operator}   # オペレータと同一文字は現在カーソルが存在する行を表す
l            # カーソルがあたっている1文字
w|W          # 次の単語の先頭まで移動(Wはスペースからスペースまでを1単語と見なす)
e|E          # 次の単語の末尾まで移動(Eはスペースからスペースまでを1単語と見なす)
b|B          # 前の単語の先頭まで移動(Bはスペースからスペースまでを1単語と見なす)
ge|GE        # 前の単語の末尾まで移動(GEはスペースからスペースまでを1単語と見なす)
f|F{char}    # {char}まで移動(Fはカーソルより前方を探索)。「;」で次の{char}まで移動、「,」で前の{char}まで移動
t|T{char}    # {char}の直前まで移動(Tはカーソルより前方を探索)。「;」で次の{char}まで移動、「,」で前の{char}まで移動
/{string}    # {string}の先頭文字まで移動。nで次の{string}、Nで前の{string}まで移動
0            # 行の先頭まで移動
^            # インデントを除いた行の先頭まで移動
$            # 行の末尾まで移動
gg           # ファイルの先頭まで移動
G            # ファイルの末尾まで移動
%            # カーソルから一番近い括弧の閉じ括弧まで移動。(使える括弧は()[]{}のいずれか)
a{delimiter} # {delimiter}の始まりから終わりまで({delimeter}を含む)。オペレータといっしょに使う。
i{delimiter} # {delimiter}の始まりから終わりまで({delimeter}を含まない)。オペレータといっしょに使う。
it           # html,xmlタグの内部。オペレータと一緒に使う
p            # パラグラフの区切りまで。オペレータと一緒に使う。

オペレータとモーションの組み合わせ利用例

# 1. カーソルの文字を大文字化する 
#   - オペレータ: gU 大文字化
#   - モーション: l カーソルの文字
gUl

# 2. 現在カーソルが存在する行を大文字にする
#   - オペレータ: gU 大文字化
#   - モーション: {operator} オペレータと同一文字はカーソルが存在する行を表す
gUU

3. ""の中の単語を削除する
#   - オペレータ: d 削除
#   - モーション: i{delimiter} デリミタ(")の始まりから終わりまで("を含まない)
di"

4. ""の中の単語を"ごと削除する
#   - オペレータ: d 削除
#   - モーション: a{delimiter} デリミタ(")の始まりから終わりまで("を含む)
da"

5. ファイルの末尾まで自動インデントする
#   - オペレータ: = 自動インデント
#   - モーション: G 現在のカーソルからファイルの末尾まで
=G

6. 現在カーソルの単語をヤンクする
#   - オペレータ: y ヤンク(コピー)
#   - モーション: i{delimiter} デリミタ w は次の単語の先頭までを表すため、 iw で現在カーソルが存在する単語の先頭から末尾までを表す。
yiw

7. 現在行を含めた3行をヤンクする
#   - オペレータ: y ヤンク(コピー)
#   - モーション: 3{operator} カーソルが存在する行を含めた3行
y3y

8. 現在カーソルから「.」までを削除して編集モードに移行
#   - オペレータ: c 削除して編集モードに移行
#   - モーション: t{char} 「.」まで
ct.

9. htmlタグのテキストを削除。<div>xxxx</div>のxxxxの部分。
#   - オペレータ: d 削除
#   - モーション: it html,xmlタグの内部
dit

その他よく使うコマンド

<C-任意の文字>ctrl を押しながら、任意の文字を入力の意味

r     # 置換モードに移行(1文字置換したらノーマルモードに戻る)
R     # 置換モードに移行(<Esc>を入力するとノーマルモードに戻る)
J     # 改行文字をスペースに置換
u     # 直前の変更を取り消す
<C-r> # uで取り消した変更を元に戻す

■ 2. レジスタの操作

[] に囲まれた部分はあってもなくてもOK

["{register}]p  # 次の行(カーソル位置)にペースト(ノーマルモード)
["{register}]P  # 前の行(カーソル位置)にペースト(ノーマルモード)
["{register}]gp # ペースト後カーソルを末尾に移動(ノーマルモード)
<C-r>{register} # ペースト(挿入モード、コマンドラインモード)
"{a-z}  # 通常のレジスタ
"%      # 現在のファイル名
"_      # /dev/null的なレジスタ
"0      # ヤンク専用レジスタ
:reg    # レジスタの一覧を表示

レジスタを指定したヤンクとプット

# 1. レジスタaを指定して1行ヤンク
"ayy

# 2. レジスタaを指定してノーマルモードでプット
"ap

# 3. 単語をヤンクして検索
yiw # 単語をヤンク
/<C-r>0
<CR>

# 4. ヤンク専用レジスタへのヤンクとプット
yy
"0p

■ 3. 挿入モード

ノーマルモードから挿入モードへ移行するコマンド

i # 挿入モードに移行 
I # 空白行を除いた行の先頭に移動して挿入モードに移行
a # 次の文字に移動して挿入モードに移行
A # 行末に移動して挿入モードに移行
o # 次の行に新しい行を挿入して挿入モードに移行
O # 直前の行に新しい行を挿入して挿入モードに移行
C # 現在カーソルから末尾行までを削除して挿入モードに移行
s # 現在カーソルの文字を削除して挿入モードに移行
S # 現在行を削除して挿入モードに移行

挿入モードで利用するコマンド

<C-v>{code}     # 文字コードを指定して文字を入力
<Esc>           # ノーマルモードに移行

文字コードからテキストを入力

# 1. 緑を入力
<C-v> u7DD1

■ 4. ビジュアルモード

ノーマルモードからビジュアルモードに移行するコマンド

v     # 文字志向のビジュアルモードに移行
V     # 行志向のビジュアルモードに移行
<C-v> # ブロック志向のビジュアルモードに移行

ビジュアルモードのコマンド

o     # 選択範囲の始点と終点を入れ替える

ビジュアルモードの利用例

# 1. 複数行をまとめて2段インデント
VG # 末尾までを範囲指定
>.

# 2. 複数行に対してマクロを並列実行
レジスタaにマクロを登録
V# 3行を範囲指定
:'<,'>normal @a

# 3. 複数行の末尾に;を挿入する
<C-v>jj$ # 3行を末尾まで指定
A;
<Esc>

# 4. 複数行の単語をまとめて置換
<C-v>jje # 3行の特定単語を選択
c{text}
<Esc>

# 5. 1行をすべて同じ文字で埋める
Vr{char}

■ 5. コマンドラインモード

ノーマルモードからコマンドラインモードに移行するコマンド

:     # コマンドラインモードに移行する。
q:    # コマンドラインモードで利用したコマンドの履歴を表示する

コマンドラインモードのコマンド

[] に囲まれた部分はあってもなくてもOK

:[{range}]s/{pattern}/{replace}/[g] # [range]指定した行に対して{pattern}を{replace}に置換 
:[{range}]normal {cmd} # [range]指定した行に対してノーマルモードの{cmd}を実行
:! {cmd}             # shellで{cmd}を実行
:shell               # インタラクティブシェルプロセスを起動。(exit)で抜ける
:r ! {cmd}           # shellで{cmd}を実行し、標準出力を次の行に挿入する
:[{range}]w ! {cmd}    #  [range]指定した行を標準入力として、shellで{cmd}を実行する
:[{range}]! {cmd}      #  [range]指定した行に対して、shellで{cmd}を実行する

コマンドラインモードの使用例

{range}の利用例

# 1. 2-5行目を指定
2,5

# 2. 現在行から末尾までを指定
.,$

# 3. 全部
%

# 4. ビジュアルモードで指定した範囲(ビジュアルモードでの範囲選択中に:を入力)
'<,'>

# 5. パターンでの範囲指定
/{pattern1}/,/{pattern2}/

rangeで指定した範囲に対する操作

# 1. ファイル内のoneをすべてONEに置換
:%s/one/ONE/g

# 2. 現在行から末尾までを自動インデント
:.,$ normal ==

# 3. selectの内容を貼り付ける
:r! mysql -u root -t -e "select * from 10080_1_log.keywordlog limit 10"

# 4. 今書いているshellスクリプトを保存して実行する
:w | ! sh %

# 5. tsvファイルを2カラム目でソート
:%!sort -t $'\t' -k 2

# 6. ファイル内をgrepで検索
:%w ! grep -n "function"

■ 6. ファイルの操作

:e {path} # {path}をオープンする

ファイラ(netrw)の操作

:Ve  # 縦方向に分割して左のウィンドウでファイラをオープン
:Ve! # 縦方向に分割して右のウィンドウでファイラをオープン
:Te  # 新しいタブでファイラをオープン
:e.  # カレントディレクトリでファイラをオープン
i    # ディレクトリの表示形式を変更
v    # ファイルを右に分割して開く
o    # ファイルを下に分割して開く
t    # ファイルを新しいタブで開く

画面分割

<C-w>v    # 画面を左右に分割
<C-w>s    # 画面を上下に分割
<C-w>j    # 右の画面に移動
<C-w>k    # 上の画面に移動
<C-w>h    # 下の画面に移動
<C-w>l    # 左の画面に移動
<C-w>=    # 画面の大きさを揃える
{n}<C-w>_ # アクティブなウィンドウの高さを{n}行にする
{n}<C-w>| # アクティブなウィンドウの高さを{n}文字にする
:clo      # アクティブなウインドウを閉じる
:on       # 非アクティブなウィンドウを閉じる

タブ操作

:tabnew      # 新しいタブを開く
:tabe {path} # {path}を新しいタブで開く
:tabc        # 現在のタブページを閉じる
:tabo        # 非アクティブなタブページを閉じる
<C-w>T       # 現在のウィンドウを独立したタブページに移動する
gt           # 右のタブに移動
gT           # 左のタブに移動

ディレクトリをまたいで検索

:vimgrep /{pattern}/[j] {path} |cw

マーク

:marks       # マークの一覧を表示
m{A-Z}       # 現在ファイルの現在カーソル位置にマークをつける
`{A-Z}       # 記録したマークに移動する

折りたたみ

# カーソル位置の要素の折り畳み
zc # 折り畳み
zo # 展開(一段階)
zO # 展開(すべて)

# ファイルの全要素の折り畳み
zm # 折り畳み(一段階)
zM # 折り畳み(すべて)
zr # 展開(一段階)
zR # 展開(すべて)

# その他
zf{motion} # 折りたたみ
za # 折りたたみの開け閉め
zi # 折りたたみの無効・有効切り替え

折りたたみの使用例

# 1. {}で囲まれた部分を折り畳む
f{zf%

■ 7. マクロ

q{register}      # マクロ記録開始
q                # マクロ記録終了
@{register}      # マクロを実行
[num]@{register} # [num]回マクロを実行
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?