LoginSignup
22
27

More than 5 years have passed since last update.

vimの操作方法の一覧

Last updated at Posted at 2018-01-27

カーソル移動

  • 四方移動
    • [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,記号群]:探す文字
    • 次の一致に移動
      • ;
    • 前の一致に移動
      • ,

マーク

  • 現在のカーソル位置を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
22
27
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
22
27