カーソル移動
- 四方移動
[n]h
,j
,k
,l
- 折り返しの上下移動
[n]gj
,gk
- 画面上の最上に移動
H
- 画面上の最下に移動
L
- 画面上の真ん中に移動
M
- n%の位置に移動
n%
- 次の単語
[n]w
- 前の単語
[n]b
- 次の単語の末尾に移動
[n]e
- 前の単語の末尾に移動
[n]ge
- 次の単語 スペース区切り
[n]W
- 前の単語 スペース区切り
[n]B
- 次の単語の末尾に移動 スペース区切り
[n]E
- 前の単語の末尾に移動 スペース区切り
[n]gE
- 行頭に移動
0
- 行末に移動
$
- 空白でない行頭に移動
^
- 折り返しの移動
g0
g$
g^
- 上の行頭の非空白文字に移動
[n]-
- 下の行頭の非空白文字に移動
[n]<CR>
,+
- 行の中央に移動に移動
gm
- 一行目に移動
gg
- 最後の行に移動
G
- n行目に移動
[n]G
- 対応する括弧に移動
%
- 編集した場所の一覧
:changes
- 前回編集した場所に戻る
[n]g;
- 前回編集した場所に進む
[n]g,
- 行上の指定した文字に対しての操作
- [n][d,y,c][f,t,F,T][a-Z,0-9,記号群]
- [n]:数
- [d,y,c]:オペレータ
- [f,t,F,T]:
- fは前方に探し移動
- Fは後方に探し移動
- tは前方に探し直前の文字に移動
- Tは後方に探し直前の文字に移動
- [a-Z,0-9,記号群]:探す文字
- 次の一致に移動
;
- 前の一致に移動
,
- 探す文字が日本語の場合
<C-k>a5
あ<C-k>A6
ア<C-k>n5
ん<C-k>ta
た<C-k>Se
セ<C-k>tU
っ<C-k>yA
ゃ
マーク
- 現在のカーソル位置をaにマーク
m[a-Z]
- aにマークした行の頭に移動
'[a-Z]
- aにマークした行列に移動
`[a-Z]
- ジャンプリストを変更しない移動
g'[a-Z]
g`[a-Z]
- マークの一覧
:marks
- マークの削除
:delmarks[a-Z]
- マークの全削除
:delmarks!
- マークの種類
- 0~9 過去に閉じたファイルのその時点でのカーソル位置
- " カレントバッファを前回閉じた際のカーソル位置
- [ カレントバッファで直前に変更またはヤンクしたテキストの先頭
- ] カレントバッファで直前に変更またはヤンクしたテキストの末尾
- ^ カレントバッファでの直前のインサートモード終了位置
- . カレントバッファでの最後に変更した位置
- < 直前にビジュアルモードで選択したテキストの先頭
- > 直前にビジュアルモードで選択したテキストの末尾
- 前の位置に戻る
[n]<C-o>
- 進む
[n]<C-i>
- ジャンプリストを表示
:ju(mps)
- このファイルで最後に変更した場所に移動
'.
,`.
ページ移動
- ページを現在行が中央になるように移動
zz
,z.
- ページを現在行が最上になるように移動
z<CR>
,zt
- ページを現在行が最下になるように移動
z-
,zb
- 次のページ
<C-f>
- 前のページ
<C-b>
- 半ページ次
<C-d>
- 半ページ前
<C-u>
- 画面を一行下に移動
<C-e>
- 画面を一行上に移動
<C-y>
カット&ヤンク&ペースト
- 行削除
[n]dd
- カーソル位置から行頭まで削除
d0
- カーソル位置から行末まで削除
d$
- カーソル位置から最初まで削除
dgg
- カーソル位置から最後まで削除
dG
- 文字削除
[n]x,dl
- 文字削除(カーソルの左)
[n]X
- 単語削除
dw db de da" di( ...
dab daB dap
- 範囲削除(7行目から20行目まで削除)
:7,20d
- ヤンク(カットと同じ)
yl yy yw y$ y0 3yy :4,89y
- 次に貼り付け
[n]p
- 前に貼り付け
[n]P
- 次に貼り付けてカーソルを移動
[n]gp
- 前に貼り付けてカーソルを移動
[n]gP
- インデントを合わせて次に貼り付け
[n]]p
- インデントを合わせて前に貼り付け
[n][p
- レジスタ履歴
:reg
- 共有
""p
- ヤンク専用
"0p
- デリート専用
"1p
- 直近の検索語を貼り付け
"/p
- 編集中ファイル名を貼り付け
"%p
- 直近のコマンド
":p
- クリップボード
"+ +レジスタに入っているデータを外で貼り付けできる
"* 外でコピーしたデータの格納場所
- コマンドモード,インサートモード時の貼り付け
- ヤンクした文字列
<C-r>0
- 外でコピーしてきた文字列
<C-r>*
- 最前の検索語
<C-r>/
- ヤンクした文字列
visualモード
- 領域選択
v
- 領域選択 行
V
- 領域選択 矩形
<C-v>
,<C-q>
- 直前の選択範囲を再選択
gv
- 始点変更
o
- 文字置換
r[a-Z,0-9,記号群]
- 行頭に追記 矩形選択
I
- 行末に追記 矩形選択
A
- パラグラフ選択
ip
- 小文字にする
u
- 大文字にする
U
- 大文字、小文字反転
~
インサートモード
- インサートモード
[n]i
- 非空白文字の行頭にインサートモード
[n]I
- 行頭にインサートモード
[n]gI
- 次の桁でインサートモード
[n]a
- 行末にインサートモード
[n]A
- 下の行にインサートモード
[n]o
- 上の行にインサートモード
[n]O
- 一文字消してインサートモード
[n]s
,[n]cl
- 一行消してインサートモード
[n]S
,[n]cc
- 単語消してインサートモード
cw ci( ca" cB ...
- カーソル位置から行末まで削除してインサートモード
C c$
- 直前の挿入箇所でインサートモード
gi
インサートモード時の操作
- インサートモードからノーマルモード
<ESC>
,<C-[>
,<C-c>
- 一度だけコマンドを実行
<C-o>{cmd}
- インデントを一つ下げる
<C-d>
- インデントを一つ上げる
<C-t>
<tab>
- backspce
<C-h>
- 前の単語削除
<C-w>
- カーソル位置から行頭まで削除
<C-u>
- ヤンクした文字列
<C-r>0
- 外でコピーしてきた文字列
<C-r>*
- 最前の検索語
<C-r>/
- 直前に挿入した文字列を挿入
<C-a>
- 直前に挿入した文字列を挿入してノーマルモード
<C-@>
- 計算を入力
<C-r>=20*20+20
- 420
- ファイル名を入力
<C-r>=argv()
- vim.txt
- 前の行列の複製
<C-y>
- ダイグラフ
<C-k>a5
あ<C-k>A6
ア<C-k>te
て<C-k>Te
テ<C-k>n5
ん<C-k>SE
§<C-k>PI
¶
- (挿入)スクロール
C-x C-e
C-x C-y
- 補完
C-n
で次C-p
で前C-e
で中止C-y
,Space
,Return
で決定- キーワード補完(前方)
<C-n>
- キーワード補完(後方)
<C-p>
- 局所キーワード補完
C-x C-n
C-x C-p
- ファイル名補完
C-x C-f
- パスパターン補完
C-x C-i
- 行(全体)補完
C-x C-l
- 綴り修正候補
C-x s
set spell
- `set spelllang=en,cjk
置換モード
- 一文字置換
[n]r
[n]gr
(仮想)
- 全て置換
[n]R
[n]gR
(仮想)
- 例(0123456789
- 置換(文字数)
- 0123456789
- 仮想置換(文字幅)
- 0126789
ファイル
- ファイルを開く
:e(dit) {file}
:e +23 {file}
開始位置が23行目:enew
- ファイルエクスプローラを開く
:e .
:browse e
-
一つ上のディレクトリに移動c
現在のディレクトリをカレントディレクトリとするi
詳細を表示s
詳細表示時にソート
- ウィンドウを水平分割してファイルエクスプローラを開く
:Sex
- change directory
:cd
- 編集中バッファのみカレントディレクトリを変える
:lcd
- カーソル位置にある単語をファイル名と見なして開く
gf
- 階層位置
:pwd
- バッファの移動
:b[n]
- 次のバッファへ
:bn
- 前のバッファへ
:bp
- 直前のバッファへ
:b#,<C-^>,bb
- 編集中のバッファ一覧
:buffers
:ls
- バッファ削除
:bd(elete)[n]
:bd![n]
強制削除
- 既に開いているバッファを開く
:b {file}
- 全バッファに対してコマンドを実行
:bufdo %s/function/func/
- 1行目から20行目までを{file}に書き込み
:1,20 w {file}
- 1行目から20行目までを{file}に追記
:1,20 w>> {file}
- {file}の内容を現在行に挿入
:[n]r {file}
- コマンドの実行結果を挿入
:r!{command}
- 複数ファイルの操作
- ファイルを指定
:ar(gs) {file1} {file2} {file3}
:ar dir1/dir2/dir3/dir4/dir5/*
:ar `find . -name \*.txt`
:ar **/*.txt
- 指定ファイルの確認
:ar(gs)
- ファイルの追加
:argadd
- 実行
:argdo %s/function/func/g
- 保存
:argdo update
- 実行保存
:argdo %s/function/func/g | update
- ファイルを指定
ウィンドウ
- ウィンドウを横に分割
:sp(lit)
- ウィンドウを横に分割(読み取り専用)
:sview {file}
- ウィンドウを縦に分割
:vs(plit)
,<C-w>v
:vs {file}
- 新規ファイル 水平
:new
- 新規ファイル 垂直
:vnew
- すべてを閉じる
:wqa
:qa
- 閉じる
:close
,<C-w>q
,:hide
- 現在ウィンドウ以外閉じる
:on(ly)
,<C-w>o
- ウィンドウ間を移動
<C-w>[j,k,h,l]
- ウィンドウの位置を入れ替え
<C-w>[J,K,H,L]
- 次のウィンドウ
<C-w>w
- 前のウィンドウ
<C-w>p
- 高さ調整
<C-w>-
<C-w>+
- 幅調整
<C-w><
現ウィンドウの幅を縮める<C-w>>
現ウィンドウの幅を広める
- 大きさを等しくする
<C-=>
- 全ウィンドウに対してコマンドを実行する
:windo
タブ
- タブ追加
:tabnew
:tabe(dit) {file}
:tabe +33 {file}
- 既存のファイルを開く
:tabf(ind) {file}
- タブ閉じる
:tabc(lose)
- 現在タブ以外閉じる(バッファは閉じない)
:tabo(nly)
- 次のタブ
gt
:tabn(ext)[n]
- 前のタブ
gT
:tabp(revious)
:tabN(ext)
- 最初のタブに移動
:tabfirst
:tabr(ewind)
- 最後のタブに移動
:tabl(ast)
- タブの一覧
:tabs
- タブの順番を変える
:tabm(ove)[n]
- 全てのタブで実行
:tabdo
検索
- .vimrcに下記を記入していると全検索になる
set wrapscan
- インクリメンタルサーチ
set incsearch
- 下方向に文字列を検索
/<文字列>
(インクリメンタルサーチ):/<文字列>
- 上方向に文字列を検索 wrapscanをonにしていると使わない
?<文字列>
(インクリメンタルサーチ):?<文字列>
- 最前の検索結果
//
(インクリメンタルサーチ)://
- カーソル上の単語と同じ単語に下方向に移動
*
,g*
- カーソル上の単語と同じ単語に上方向に移動
#
,g#
- 次へ
n
- 前へ
N
- vimgrep grep
:vim(grep) {pattern} {file}
- 次へ
:cn(ext)
- 前へ
:cN(ext)
,:cp(revious)
- ワイルドカード
?
一つの文字*
全て**
全て 再帰的にディレクトリに入る[abc]
a,b,cのどれか
- {pattern}
/{pattern}/j
検索後に移動しない/{pattern}/g
一行に複数ある場合は全て表示(重複する)
- {file}
%
:カレントバッファ*
:カレントディレクトリにあるファイル**
:カレントディレクトリ以下の全てのファイルdir/**
:dir以下の全てのファイルdir/*
:dirからひとつ下の階層にある全てのファイルdir/**/*.txt
dir/**/a*.txt
- Quickfixウィンドウ
:cw(indow)
:ccl
閉じる:vim {pattern} {file} | cw
- .vimrcに下記を追記すると検索後に:cwを実行しなくともQuickFixを表示
augroup QuickFixCmd
autocmd!
autocmd QuickFixCmdPost *grep* cwindow
augroup END
- QuickFixWindow上の操作
- :cdo %s/function/func/ | update
参考ページvimgrepとQuickfix知らないVimmerはちょっとこっち来い
折りたたみ
折り畳みの設定set foldmethod=marker foldmarker=>->,<-<
折り畳み時のマーカーをコメントする際に使う記号の設定
set commentstring=\ %s
autocmd FileType python set commentstring=\ #%s
autocmd FileType html set commentstring=\ <!--\ %s\ -->
autocmd FileType sh set commentstring=\ #%s
autocmd FileType vim set commentstring=\ \"%s
- 折り畳みの有無効の切り替え
zi
- 折り畳みの作成
[n]zf
- 折り畳みの削除
zd
- 再帰的に削除
zD
- 全削除
zE
- 折り畳みの開閉
za
- 折り畳みの再帰的開閉
zA
- 折り畳みを開く
zo
- 折り畳みを再帰的に開く
zO
- 折り畳みを閉じる
zc
- 折り畳みを再帰的に閉じる
zC
- 折り畳みの先頭に移動
[z
- 折り畳みの末尾に移動
]z
- 一つ下の折り畳みに移動
zj
- 一つ上の折り畳みに移動
zk
- 全ての折りたたみを閉じる
zM
- 全ての折りたたみを開く
zR
置換
:%s/<置換元文字列>/<置換後文字列>/gce
- 区切り文字は任意
%
はカレントバッファc
は確認g
は一行に複数あってもすべて置換e
はエラーを表示しない
置換ではないけど
testを含む行を削除:g/test/d
testを含まない行を削除:v/test/d
指定範囲をコマンドの標準入力として扱い、標準出力で上書きする:.!{シェルコマンド}
:3!date
:.!bc
20*30が600で置換される:.,.+3!nl
4行に行番号がつく:.-4!sed 's/ //g'
その他
現在の行と下の行を連結J
間に空白入れるgJ
undo-tree
edit(1)-----edit(2,4)------edit(3)
|
-----------edit(5)
操作を元に戻すu
一方向 edit3に行けないg-
ツリー
操作を進める<C-r>
g+
undoリスト:undol(ist)
通番を使ってundo:earlier {n}
:later {n}
ハイライト解除:noh
右にインデント[n]>>
左にインデント[n]<<
直近の変更操作を繰り返す.
インクリメント<C-a>
デクリメント<C-x>
シェルコマンドの結果を挿入する:.+3r!{シェルコマンド}
標準入力が必要な場合は実行後に入力する:r!bc
> 20+20*20
> <C-d>
420
コマンド履歴q:
直前に実行したコマンドを再度実行@:
マクロ
記録開始:q[a-Z]
記録終了q
マクロの実行@[a-Z]
例)カーソルにある値をコピーして貼り付けてインクリメントの動作を10回行うi
,0
,<ESC>
,qa
,yy
,p
,<C-a>
,q
,10@a
ダイフラグ:dig(raphs)
大文字にするオペレータgu
小文字にするオペレータgU
反転するオペレータg~
バイナリ:%!xxd
選択モード 使いどころがわからないgh
gH
g<C-h>
spell
次のスペルミス]s
前のスペルミス[s
候補を表示z=
正しいと登録zg
誤りと登録zw
vimscriptでpythonを使う
"def,classの行にmarkを付ける
function! MARK_PYTHON()
python3 << py
import vim
import re
char = 97 #'a'の文字コード
vim.command("execute 'mark' 'a'")
nowRow = vim.current.buffer.mark('a')[0] #現在行番号を得る
for i in range( len(vim.current.buffer) ): #1行目から探索
vim.command("normal " + str(i) + "G")
if re.search("def |class ", vim.current.line):
vim.command("execute 'mark' " + "\'" + \
char.to_bytes(1,"big").decode("utf-8") + "\'")
char+=1
if char >= 123: #zまで使ったらaに戻る
char = 97
#コマンドを実行した行に移動
vim.command("normal " + str(nowRow) + "G")
py
endfunction
command! Mark call MARK_PYTHON()
augroup python_conf
autocmd FileType python call MARK_PYTHON()
augroup END