とほほのVim入門(カーソル移動)

トップ > Vim > カーソル移動

目次

カーソル移動(上下左右)

ノーマルモードでカーソルを移動するには h, l, j, k コマンドを使用します。キーボードのホームポジションから手を離さなくてもカーソル移動できるように設計されています。10j と打つと10行下に移動します。

[N]h : N文字左に移動 (<Left>, <BS>, Ctrl-hでも可)
[N]l : N文字右に移動 (<Right>, <Space>でも可)
[N]j : N行下に移動 (<Down>, Ctrl-n, Ctrl-j, <NL>でも可)
[N]k : N行上に移動 (<Up>, Ctrl-pでも可)

挿入モードでは下記を使用します。

<Right> : 1文字右に移動
<Left> : 1文字左に移動
<Up> : 1行上に移動
<Down> : 1行下に移動
Ctrl-g k : 1行上の行頭に移動 (Ctrl-g Ctrl-k, Ctrl-g <Up>でも可)
Ctrl-g j : 1行下の行頭に移動 (Ctrl-g Ctrl-j, Ctrl-g <Down>でも可)

下記は j, k とほぼ同等ですが、1行が複数行にまたがって表示されている場合の動作が異なります。

[N]gj : N行下に移動 (g<Down>でも可)
[N]gk : N行上に移動 (g<Up>でも可)

下記なども使用できます。

[N]+ : N行下の行頭に移動 (Ctrl-m, <CR>でも可)
[N]- : N行上の行頭に移動
[N]_ : N-1行下の行頭に移動
[N]$ : N-1行下の行末に移動 (<End>でも可)

カーソル移動(行内)

0 : 現在の行の行頭に移動 (<Home>でも可)
^ : 現在の行の行頭(空白以外)に移動
$ : 現在の行の行末に移動(<End>でも可)
g0 : 画面に表示されている範囲の行頭に移動 (g<Home>でも可)
g^ : 画面に表示されている範囲の行頭(空白以外)に移動
g$ : 画面に表示されている範囲の行末に移動 (g<End>でも可)
gm : 現在の行の(画面の横幅の)中央に移動
gM : (画面の横幅に関係なく)現在の行の中央に移動
[N]| : 現在の行の行頭からN文字目の位置に移動
[N]fChar : 行中のN個前方のCharに移動
[N]FChar : 行中のN個後方のCharに移動
[N]tChar : 行中のN個前方のCharの直前に移動
[N]TChar : 行中のN個後方のCharの直前に移動
[N]; : 直前に実行した f, F, t, TコマンドをN回実行
[N], : 直前に実行した f, F, t, Tコマンドを逆方向にN回実行

カーソル移動(単語)

[N]w : N個先の単語の先頭に移動(Word) (Ctrl-Right, Shift-Rightでも可)
[N]b : N個前の単語の先頭に移動(Begin) (Ctrl-Left, Shift-Leftでも可)
[N]e : N個先の単語の末尾に移動(End)
[N]ge : N個前の単語の末尾に移動(Go End)
[N]W : w と同様だが空白のみを単語の区切りとみなす
[N]B : b と同様だが空白のみを単語の区切りとみなす
[N]E : e と同様だが空白のみを単語の区切りとみなす
[N]gE : ge と同様だが空白のみを単語の区切りとみなす

カーソル移動(文脈)

空行を文の区切りとみなし、空行または文の文頭に移動します。

[N]( : N個前の文の文頭または空白行に移動
[N]) : N個先の文の文頭または空白行に移動

空行を段落の区切りとみなし、空行の先頭または末尾に移動します。

[N]{ : N個前の空行の末尾に移動
[N]} : N個先の空行の先頭に移動

1文字目が { である行と } である行の間をセクションと見なし、{} の位置に移動します。C言語などの関数単位の移動に便利です。

[N][[ : N個前の行頭 { に移動
[N]]] : N個先の行頭 { に移動
[N][] : N個前の行頭 } に移動
[N]][ : N個先の行頭 } に移動
'' : 最後のジャンプの前にいた行の先頭の文字へ移動
'( : 現在の文の文頭がある行の先頭の文字へ移動
') : 現在の文の文末がある行の先頭の文字へ移動
'{ : 現在の段落の最初の行の先頭の文字へ移動
'} : 現在の段落の最後の行の先頭の文字へ移動
`( : 現在の文の文頭へ移動
`) : 現在の文の文末へ移動
`` : 最後のジャンプの前にいた位置へ移動
`{ : 現在の段落の最初へ移動
`} : 現在の段落の最後へ移動

カーソル移動(ファイル)

[N]gg : ファイルのN行目に移動(N省略時はファイルの先頭)(Go) (Ctrl-Homeでも可)
[N]G : ファイルのN行目に移動(N省略時はファイルの末尾)(Go) (Ctrl-Endでも可)
[N]% : ファイルの N パーセントの位置に移動(%)
[N]H : 画面に表示されている範囲の先頭からN行目に移動(Head)
[N]L : 画面に表示されている範囲の最終行にN行目に移動(Last)
M : 画面に表示されている範囲の中央行に移動(Middle)

カーソル移動(括弧)

% : カーソルが括弧文字にあるとき、対応する括弧に移動
[( : 前方の対応する ( の位置に移動
]) : 後方の対応する ) の位置に移動
[{ : 前方の対応する { の位置に移動
]} : 後方の対応する } の位置に移動

カーソル移動(プログラム用)

[N][m : N個前のメソッドの先頭に移動(Java用)
[N][M : N個前のメソッドの末尾に移動(Java用)
[N]]m : N個先のメソッドの先頭に移動(Java用)
[N]]M : N個先のメソッドの末尾に移動(Java用)
[N][# : N個先の対応する #if や #ifdef や #else に移動(C言語用)
[N]]# : N個先の対応する #else や #endif に移動(C言語用)
[N][* : N個先の対応する /* */ コメントの先頭に移動(C言語用) ([/でも可)
[N]]* : N個先の対応する /* */ コメントの末尾に移動(C言語用) (]/でも可)

カーソル移動(その他)

[N]go : ファイルの先頭からNバイト目に移動
:goto(:go) N : ファイルの先頭からNバイト目に移動

マーク

現在のカーソル位置に a~z、A~Z 1文字のマークをつけ、後からマーク位置に戻ったり、範囲選択の対象とすることができます。例えばノーマルモードで ma をタイプし、現在のカーソル位置に a という名前のマークをつけます。別の位置に移動した後、'a でマーク位置 a に戻ることができます。

mMark : 現在のカーソル位置にマーク Mark をつける。Mark は1文字の英字
`Mark : マーク Mark の位置にジャンプする
'Mark : マーク Mark の位置の行頭にジャンプする

また、{motion} 機能と組み合わせて、ある行に ma でマークをつけ、5行したに下がって d'a とすることで、5行下からマークした行までの5行を削除することができます。

d'a : カーソル位置からマーク a までの行を削除する
y'a : カーソル位置からマーク a までの行をコピー(ヤンク)する

マーク名 a~z は同じファイル内しかジャンプできませんが、マーク名 A~Z であれば別ファイルにジャンプすることもできます。

'[a-z] : 同じファイル内のマーク位置にジャンプする
'[A-Z] : マーク位置にジャンプする(別ファイルでも可)

そのほか、下記のマーク名を使用できます。

0~9 : 前回(0)、前々回(1)、前々々回(2)... Vim を終了した位置
" : 前回このファイルを編集した位置
[ : 直前に操作した行の先頭
] : 直前に操作した行の末尾
< : 直前に選択したビジュアルエリア行の先頭
> : 直前に操作したビジュアルエリア行の末尾
. : 最後に編集した行
:marks : マークの一覧を表示

ジャンプ

'Mark などによるジャンプはジャンプした場所が履歴として記録され、下記で履歴の場所に戻ることができます。

[N]Ctrl-o : N個前のジャンプ位置に戻る
[N]Ctrl-i : N個先のジャンプ位置に戻る (<Tab>でも可)
:jumps (:ju) : ジャンプ位置の一覧を表示

ファイルジャンプ

grep -rn keyword の結果を Vim で開き、該当のファイル位置にジャンプすることができます。

gf : カーソル位置のファイル名にジャンプ
fG: カーソル位置のファイル名にジャンプ後、ファイル名に続く行番号に移動

行番号の書き方は下記などで構いません。

filename.txt:123: ...
filename.txt 123 ...
filename.txt(123) ...

スクロール

縦方向のスクロールには下記を使用します。

[N]Ctrl-f : Nページ分下にスクロール(Forward) (<PageDoen>, Shift-Downでも可)
[N]Ctrl-b : Nページ分上にスクロール(Back) (<PageUp>, Shift-Upでも可)
[N]Ctrl-d : N行分下にスクロール(N省略時は半ページ)(Down)
[N]Ctrl-u : N行分上にスクロール(N省略時は半ページ)(Up)
[N]Ctrl-e : N行分下にスクロール(N省略時は1行)
[N]Ctrl-y : N行分上にスクロール(N省略時は1行)

現在のカーソル位置が画面の上部・中央・下部になるように移動します。

zt : カーソル行が画面の上部になるようにスクロール(Top)
zz : カーソル行が画面の中央になるようにスクロール
zb : カーソル行が画面の下部になるようにスクロール(Bottom)
z<Enter> : カーソル行が画面の上部になるようにスクロール後行頭に移動
z. : カーソル行が画面の中央になるようにスクロール後行頭に移動
z- : カーソル行が画面の下部になるようにスクロール後行頭に移動

:set nowrap の時は横方向のスクロールもできます。

[N]zh : N文字分左へスクロール
[N]zl : N文字分右へスクロール
zH : ウィンドウ幅の半分左へスクロール
zL : ウィンドウ幅の半分右へスクロール

マウスによるスクロールもできます。

<ScrollWheelDown> : 3行下へスクロール
<Shift-ScrollWheelDown> : 1画面下へスクロール
<ScrollWheelUp> : 3行上へスクロール
<Shift-ScrollWheelUp> : 1画面上へスクロール
<ScrollWheelLeft> : 6列左へスクロール
<Shift-ScrollWheelLeft> : 1画面左へスクロール
<ScrollWheelRight> : 6列右へスクロール
<Shift-ScrollWheelRight> : 1画面右へスクロール

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