Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

vimのノーマルモードのコマンドまとめ(その1)

$
0
0

version

vim 7.4.2210

Index

|A|B|C|D|E|F|G|H|I|J|K|L|M|N|
|O|P|Q|R|S|T|U|V|W|X|Y|Z|
| 0 | ! | # | $ | ? | \ | @ | _ | ~ |
| ` | ' | " | : | ; | , | . |
| ^ | % | & | | | | + | * | - | / | = |
| () | [] | <> | {} |
|<Space>|<Enter>|<Esc>|

<A>

a

右に一文字移動して挿入モード

A

行末に移動して挿入モード

^a

カーソルから右方向にある数値をインクリメント

3days
  ↓
4days

※^x:デクリメント

Indexへ

<B>

b

前単語先頭へ移動

  • 改行を区切りに含む
  • 移動先が区切り文字の後

※w:次単語先頭へ移動

B

前単語先頭へ移動

  • 改行を区切りに含まない
  • 移動先が区切り文字の後

※W:次単語先頭へ移動

^b

PageUp
※^f:PageDown

Indexへ

<C>

c

d(切り取り)と同様の動作後に挿入モード

C

Dと同様の動作後に挿入モード

^c

(検索)コマンド中断

Indexへ

<D>

d

切り取り

補足

切り取り範囲の指定は以下の方法がある
※c, yと同様

  • 移動系のコマンドとの併用。d[移動系コマンド]で実行
    例) dw:単語削除, dgg:カーソル位置から先頭行まで削除等
  • dd:行切り取り
  • visualモードとの併用

D

行末まで切り取り

^d

半PageDown
※^u:半PageUp

Indexへ

<E>

e

次単語末尾へ移動

  • 改行を区切りに含む
  • 移動先が区切り文字の前

※ge:前単語末尾へ移動

E

次単語末尾へ移動

  • 改行を区切りに含まない
  • 移動先が区切り文字の前

※gE:前単語末尾へ移動

^e

1行下にスクロール(※カーソルは動かない)
※^y:1行上にスクロール(※カーソルは動かない)

Indexへ

<F>

f

fxでカーソルの右に位置するxにカーソル移動(※xは任意の文字)
※tと類似

F

Fxでカーソルの左に位置するxにカーソル移動(※xは任意の文字)
※Tと類似

^f

PageDown

Indexへ

<G>

g

prefix的なコマンド,gxx(xxは任意のキー入力)で様々な動作を実行する

補足

g打鍵後、入力対象のキーは以下

$ # & ' ` * + , - 0 8 ; < ?  ??  ?g?  @ CTRL-A CTRL-G CTRL-H CTRL-] ] ^ _ 
D E F H I J N P Q R T U V a d e f g h i j k m n o p q r s t u v w x ~
<Home> <End> <Up> <Down> <Left> <Right>

G

最終行の行頭へ移動

^g

ステータスラインにカーソル情報表示

Indexへ

<H>

h

左に一文字移動。<Left>と同じ

H

画面表示されてる範囲の先頭行にカーソル移動

^h

左に一文字移動(改行またぐ)
※<BS>と同じ動作

Indexへ

<I>

i

挿入モードに切替

I

行頭(空白文字を除く)に移動して挿入モードに切替

^i

ジャンプリストの次の位置へ移動
※^o:ジャンプリストの前の位置へ移動

補足

ジャンプリストはジャンプコマンドの履歴。履歴は:ju[mps]で確認できる
※ジャンプコマンド:バッファ間移動,検索,マーク移動,gg,G

Indexへ

<J>

j

次行に移動(移動前の行のカラム位置は移動後の行のカラム位置となる)。<Down>と同じ
※gj:下に一文字移動(行折り返し時は同行に移動)

J

間にスペース文字を入れて次行と行連結
※gJ:間にスペースを入れず次行と行連結

^j

jと同じ
※^n:jと同じ

Indexへ

<K>

k

前行に移動(移動前の行のカラム位置は移動後の行のカラム位置となる)。<Up>, ^pと同じ
※gj:上に一文字移動(行折り返し時は同行に移動)

K

カーソル下の単語を引数にコマンド実行。デフォルトのコマンドはman -s
コマンドはset keywordprgで変更

^k

未定義

Indexへ

<L>

l

右に一文字移動。<Right>と同じ

L

画面表示されてる範囲の最下行にカーソル移動

^l

再描画

Indexへ

<M>

m

mxで現在のカーソル位置をマーク(xはマーク記号)
※`xでマークした位置に移動、'xでマークした位置の行頭へ移動

補足

  • xはa~z,A~Z,[ ] > < ` 'が指定可能
  • オペレータコマンド(d等)と併用可能
    例) d'x:現在位置から'xマーク位置まで切り取り
  • 大文字のマークはファイルをまたいだ移動が可能
    ※ファイルをまたぐ場合はオペレータコマンドとの併用不可
  • マークの一覧は:marksで確認可能

参考

:help mark

M

画面表示されてる範囲の中央行にカーソル移動

^m

次行の最初の非空白文字へ移動
※+と同じ

補足

端末では^mは<Enter>を意味する

Indexへ

<N>

n

次検索(検索未実行時は何もしない)

N

前検索(検索未実行時は何もしない)

^n

次行に移動(移動前の行のカラム位置は移動後の行のカラム位置となる)
※jと同じ

Indexへ

<O>

o

下に行を追加して、追加行に移動してから挿入モード

O

上に行を追加して、追加行に移動してから挿入モード

^o

ジャンプリストの前の位置へ移動
※^i:ジャンプリストの次の位置へ移動

Indexへ

<P>

p

カーソル位置から後ろに貼り付け

P

カーソル位置から前に貼り付け

^p

前行に移動(移動後の行のカラム位置は移動前の行のカラム位置となる)
※kと同じ

Indexへ

<Q>

q

  • qxでキー操作の記録を開始、xは記録先レジスタ名(下記参照)
  • qでキー操作の記録を終了

補足

  • xはa~z, A~Z, 0~9が指定可能
  • @xで記録したキー操作を再実行
  • @@で直前に実行したキー操作を再実行

Q

Exモードの切り替え
※現在のファイルをExエディタで開く

^q

未定義。
※Windowsにて^Vが貼り付けとなっている場合、^qで矩形選択になる

Indexへ

<R>

r

rxでカーソル配下の文字をxで置き換え(※xは任意の文字)

R

Replaceモード(上書きモード)に切り替え

  • 全角文字1文字は半角文字1文字で置き換わる(行末までの文字が前に移動してくる)
  • gR なら全角文字1文字は半角文字2文字で置き換わる(行末までの文字移動しない)

^r

redo

Indexへ

<S>

s

カーソル配下の文字を切り取りしてから、挿入モード
※clと同じ

S

行切り取り(※改行は含まない)してから、挿入モード
※ccと同じ

^s

未定義。
※端末によって画面スクロールロックが有効になることがある。その場合は^qで画面スクロールロック解除。

Indexへ

<T>

t

txでカーソルの右に位置するxの手前にカーソル移動(※xは任意の文字)
※fと類似

T

Txでカーソルの左に位置するxの手前にカーソル移動(※xは任意の文字)
※Fと類似

^t

タグで移動していた場合、移動前の位置に戻る

Indexへ

<U>

u

undo

U

現在行のみの変更を戻す

^u

半PageUp
※^d:半PageDown

Indexへ

<V>

v

通常のvisualモードに切り替え

V

行選択のvisualモードに切り替え

^v

矩形選択のvisualモードに切り替え
※Windowsにて^vが貼り付けとなっている場合^qで矩形選択になる

Indexへ

<W>

w

次単語先頭へ移動

  • 改行を区切りに含む
  • 移動先が区切り文字の後

※b:前単語先頭へ移動

W

次単語先頭へ移動

  • 改行を区切りに含まない
  • 移動先が区切り文字の後

※B:前単語先頭へ移動

^w

prefix的なコマンド,^wxx(xxは任意のキー入力)で主にWindow操作を実行する

補足

^w打鍵後、入力対象のキーは以下

+ - < = > H J K L P R S T W ] ^ _ 
b c d f F g CTRL-] g] g} gf gF 
h i j k l n o p q r s t v w x z 
| } <Down> <Up> <Left> <Right>
CTRL-B CTRL-C CTRL-D CTRL-F CTRL-G 
CTRL-H CTRL-I CTRL-J CTRL-K CTRL-L 
CTRL-N CTRL-O CTRL-P CTRL-Q CTRL-R 
CTRL-S CTRL-T CTRL-V CTRL-W CTRL-X 
CTRL-Z CTRL-] CTRL-^ CTRL-_

Indexへ

<X>

x

カーソル配下の文字を切り取り
※dlと同じ

X

カーソル手前の文字を切り取り
※dhと同じ

^x

カーソルから右方向にある数値をデクリメント

3days
  ↓
2days

※^a:インクリメント

Indexへ

<Y>

y

コピー

補足

コピー範囲の指定は以下の方法がある
※c, dと同様

  • 移動系のコマンドとの併用。y[移動系コマンド]で実行
    例) yw:単語コピー, ygg:カーソル位置から行頭までコピー等
  • yy:行コピー
  • visualモードとの併用

Y

行コピー
※yyと同じ

^y

1行上にスクロール(※カーソルは動かない)
※^e:1行下にスクロール(※カーソルは動かない)

Indexへ

<Z>

z

prefix的なコマンド,zx(xは任意のキー入力)で様々な動作を実行する

補足

z打鍵後、入力対象のキーは以下

<Enter> [数値]<Enter> + - .  = 
A C D E F G H L M N O R W X ^ 
a b c d e f g h i j k l m n o 
r s t v w x z <Left> <Right>

Z

  • ZZ:変更点があれば保存して、終了
  • ZQ:保存せず、終了(変更点は破棄)

^z

vimを中断(端末上で^z打鍵した状態にする)

Indexへ

0

行頭へ移動

  • ^ は空白を除く行頭に移動

Indexへ

!

!

![移動系コマンド]で対象範囲のテキストを外部プログラム(bash等)の指定したコマンドで処理する

補足

  • テキスト範囲は行単位
    ※そのため、移動系コマンドがh等の場合は行が変化しないため、対象は現在行のみになる
  • !打鍵後は外部プログラムのコマンドを適当に入力

現在行から下3行にあるスペース文字を除去
1. !3jと入力
2. tr -d " "と入力してEnter

!!

現在行のテキストを外部プログラム(bash等)の指定したコマンドで処理する
!lまたは!hと同じ

Indexへ

#

現在位置から最も近い単語の後方検索を実行
※ *:現在位置から最も近い単語の前方検索を実行

補足

最も近いの基準は以下

  1. カーソル位置の単語
  2. 現在行の、カーソルの後ろの最初の単語

Indexへ

$

行末に移動
※<End>と同じ

Indexへ

?

?

?[検索文字]の入力後、Enterで入力した検索文字の後方検索を実行

※ /[検索文字]:前方検索実行
※ n:次検索(前方再検索)
※ N:前検索(後方再検索)

??

最後に検索した文字列で後方検索を実行
※ //:最後に検索した文字列で前方検索実行

?[検索文字]?[offset]と??[offset]

?, ??での後方検索実行後、指定したoffset位置に移動

補足(/の補足と同様の内容)

・n:現在の検索文字で次検索実行, N:現在の検索文字で前検索実行
offset

指定内容動作
[数値][数値]行下、1 桁目に移動
+[数値][数値]行下、1 桁目に移動
-[数値][数値]行上、1 桁目に移動
e[+数値][数値]文字右に終わりの場所から移動
e[-数値][数値]文字左に終わりの場所から移動
s[+数値][数値]文字右に初めの場所から移動
s[-数値][数値]文字左に初めの場所から移動
b[+数値]s[+数値] と同じ
b[-数値]s[-数値] と同じ
;検索位置から続けて検索
例)/aaa/;?bbb?
  • 検索文字列は正規表現。ただし、デフォルトでは一部のメタ文字はエスケープ「\」の指定が必要
  • メタ文字のエスケープ指定は検索文字の前にオプションを指定することで変更可

参考:
Vimでパターン検索するなら知っておいたほうがいいこと
vim上で:help magic

Indexへ

\

\

未定義

^\

未定義

Indexへ

@

@x

xに記録したキーマクロを実行

補足

キーマクロの記録方法は以下(※q)

  • qx:キーマクロをxに記録開始
  • q:キーマクロの記録を終了する

@@

直前に実行したキーマクロを再度実行する

@:

直前に実行したコマンド(:[command])を再実行する

Indexへ

_

_

非空白な行頭位置へ移動

補足

  • ^と異なり、回数指定が可能
  • [数値]_で([数値] - 1)行下の非空白な行頭位置へ移動

^_

未定義

Indexへ

~

~

カーソル下の文字を大文字を小文字、小文字を大文字に切り替えてカーソルを右に移動

Indexへ

` '

`[a-z], '[a-z]

  • `xでxにマークしてある位置へジャンプ
  • 'xでxにマークしてある行の非空白な行頭位置へジャンプ
  • ファイルをまたいでの移動は不可

`[A-Z0-9], '[A-Z0-9]

  • `xでxにマークしてある位置へジャンプ
  • 'xでxにマークしてある行の非空白な行頭位置へジャンプ
  • ファイルをまたいで、移動可
    ※ファイルをまたぐ場合はオペレータコマンド(y等)との併用不可

補足

  • [a-zA-Z]はmxでマークできる(※m)
  • [0-9]はvim終了時の位置が記録してある
    ※ 端末にてvim -c "normal '0"で最後に終了したファイルを表示

`[ '[ `] '] `< '< `> '> `` '' `" '" `^ '^ `. '.

文字移動場所
`[,'[直前に変更もしくはコピーしたテキストの最初の文字位置(`),位置行頭(')
`],']直前に変更もしくはコピーしたテキストの最後の文字位置(`),位置行頭(')
`<,'<visualモードで最後に選択したエリアの最初の文字位置(`),位置行頭(')
`>,'>visualモードで最後に選択したエリアの最後の文字位置(`),位置行頭(')
``,''前のジャンプ位置(`),位置行頭(')
`",'"バッファを最後に終了した時点の位置(`),位置行頭(')
`^,'^最後に挿入モードを終了した時点の位置(`),位置行頭(')
`.,'.最後に変更した位置付近(`),位置行頭(')

補足

  • "での移動は再度バッファを開くことで利用可(バッファを再表示するわけではない)
  • ],[ は変更したテキストがなかった場合,
    [ はファイルトップ、]はファイルの最後に移動
    また、undoでテキストを戻した場合は行頭へ移動

注意)
上記補足はヘルプファイルに記載が見当たらず、私の環境で確認した動作のため、正式に定義してある動作ではありません

`( '( `) ') `{ '{ `} '}

文字移動場所
`(,'(現在の文の最初に移動。 ( と同じ
`),')現在の文の最後に移動。 ) と同じ
`{,'{現在の段落の最初に移動。 { と同じ
`},'}現在の段落の最後に移動。 } と同じ

補足

これらはマークではない(:marksで表示しない)

Indexへ

"

"[a-zA-Z0-9.%#:-"*][切り取り/コピー/貼り付けコマンド]

  • "x[切り取り/コピーコマンド]でxレジスタに[切り取り/コピー]したテキストを格納
  • "x[貼り付けコマンド]でxレジスタに格納してあるテキストを貼り付け

補足

  • [切り取り/コピー/貼り付けコマンド]はd,y,x,c,s,p等が該当
  • レジスタxに関しては以下表を参照
x名前説明
"無名レジスタ未指定で利用できるレジスタ
例えば、Y""Yは同じ意味
a-z名前付きレジスタ格納先を(26個まで)指定可能なレジスタ
A-Z名前付きレジスタ該当のa~zレジスタに格納したテキストを追加する
0番号付きレジスタ直近のコピーテキストを格納
1番号付きレジスタ直近の一行超過の切り取りテキストを格納
-小削除用レジスタ直近の一行以下の切り取りテキストを格納
2-9番号付きレジスタ一行超過の切り取りテキストの履歴を2〜9に順次格納
.読取専用レジスタ最後に挿入モードで入力したテキストを格納
%読取専用レジスタカレントファイル名を格納
:読取専用レジスタ最後に実行したコマンドライン文字列を格納
#代替ファイルレジスタ代替ファイル(大抵は一つ前に開いていたファイル名)
=Expressionレジスタvim scriptを実行し、出力する。※挿入モードで使用
*選択範囲レジスタクリップボードのテキストを格納
+選択範囲レジスタクリップボードのテキストを格納
~選択範囲レジスタドラッグアンドドロップした際のテキストを格納
-ブラックホールレジスタテキストを削除する
※他のレジスタに影響を与えない
/最終検索パターン用レジスタ最後に検索したテキスト文字列を格納

注意)
*と+は参照する記憶領域に違いがある。
*はプライマリバッファ、+はクリップボードバッファ
基本的はプライマリバッファを利用している*を使用
参考:
 vim-jp x11-selection
 クリップボード-ArchWiki

Indexへ

:

コマンドモードに切り替え

Indexへ

;

直前に実行したfx,tx,Fx,Txを実行する(※xは任意の文字)
F, T

Indexへ

,

直前に実行したfx,tx,Fx,Txを反対方向へ実行する(※xは任意の文字)
F, T

Indexへ

.

最後の変更を繰り返す(※コマンドラインコマンドは実行しない)

Indexへ

^

非空白の行頭文字へ移動

Ctrl + ^

直前に編集していたバッファファイルに切り替え

[数値]Ctrl + ^

[数値]番目のバッファファイルに切り替え

Indexへ

%

現在位置に最も近い対応括弧に移動する
※括弧文字に関してはset matchpairsで決定する

Indexへ

&

最後に実行した置換処理を再実行する

Indexへ

|

[数値]|

現在行の[数値]桁位置に移動

Indexへ

+

次行の最初の非空白文字へ移動
※1.^mと同じ
※2.-:前行の最初の非空白文字へ移動

Indexへ

*

現在位置から最も近い単語の前方検索を実行
※#:現在位置から最も近い単語の後方検索を実行

Indexへ

-

前行の最初の非空白文字へ移動
※+:次行の最初の非空白文字へ移動

Indexへ

/

/

/[検索文字]の入力後、Enterで入力した検索文字の前方検索を実行
※ ?[検索文字]:後方検索実行
※ n:次検索(後方再検索)
※ N:前検索(前方再検索)

//

最後に検索した文字列で前方検索を実行
※ ??:最後に検索した文字列で後方検索実行

/[検索文字]/[offset]と//[offset]

/, //での前方検索実行後、指定したoffset位置に移動

補足(?の補足と同様の内容)

・n:現在の検索文字で次検索実行, N:現在の検索文字で前検索実行
offset

指定内容動作
[数値][数値]行下、1 桁目に移動
+[数値][数値]行下、1 桁目に移動
-[数値][数値]行上、1 桁目に移動
e[+数値][数値]文字右に終わりの場所から移動
e[-数値][数値]文字左に終わりの場所から移動
s[+数値][数値]文字右に初めの場所から移動
s[-数値][数値]文字左に初めの場所から移動
b[+数値]s[+数値] と同じ
b[-数値]s[-数値] と同じ
;検索位置から続けて検索
例)/aaa/;?bbb?
  • 検索文字列は正規表現。ただし、デフォルトでは一部のメタ文字はエスケープ「\」の指定が必要
  • メタ文字のエスケープ指定は検索文字の前にオプションをしていすることで変更可

参考:
Vimでパターン検索するなら知っておいたほうがいいこと
vim上で:help magic

Indexへ

=

=[移動系コマンド]

[移動系コマンド]の範囲をset equalprgで設定してある処理を実行

==

set equalprgで設定してある処理を実行

補足

equalprgの値が未設定時は組込みの文整形処理を実行

Indexへ

( )

(

文の前方へ移動

)

文の後方へ移動

Indexへ

[ ]

prefix的なコマンド [x・]x (xは任意のキー入力)で主に移動系のコマンドを実行する
※p,Pを除き、全て移動系

補足

[ ・]打鍵後、入力対象のキーは以下

$ # & ' ` * + , CTRL-D CTRL-I # ' ( * ` / D I P [ ] c d f i m p s z {

Indexへ

<>

>[移動系コマンド]

[移動系コマンド]の範囲をset shiftwidth設定値分、右にインデント

<[移動系コマンド]

[移動系コマンド]の範囲をset shiftwidth設定値分、左にインデント

>>

set shiftwidth設定値分、右にインデント

<<

set shiftwidth設定値分、左にインデント

Indexへ

{}

{

段落の前方へ移動

}

段落の後方へ移動

Indexへ

<Space>

右に一文字移動
※ lと同じ

Indexへ

<Enter>

次行の最初の非空白文字へ移動
※^mと同じ

Indexへ

<Esc>

  • 入力中のコマンドをキャンセル
    ※キーマクロ記録等、キャンセルしないコマンドもある
  • ノーマルモード切り替え

Indexへ

蛇足

動機

 当初はvimでバインドキー設定の際、割当対象のキーに迷わないよう、押しやすくかつ利用の少ないキーの一覧を作ってみようかと考えておりました。
 しかし、結局は全コマンドを確認する必要があると思ったので、折角だから勉強も兼ねてまとめてみることにしました。

感想

 作成してみたところ、思ったより疲れました。とはいえ、便利そうなコマンドの再発見もあり、結構勉強になったので、最終的にはやってよかったと思います。
 未記載のprefix的なコマンドである^w,[,],g,zの動作をまとめた記事と当初の目的である推奨バインドキー一覧をまとめた記事もその内作成したいと思います。


Viewing all articles
Browse latest Browse all 5608

Trending Articles