編集系
開く
文字コードを指定
utf-8 shift_jis euc-jp
して開く:e ++enc=utf-8 filepath "現在のファイルを開き直すときはfilepathを入れない
改行コードを指定
unix dos
して開く:e ++ff=unix filepath "現在のファイルを開き直すときはfilepathを入れない
水平分割で開く
:sp|new|split filename
垂直分割で開く
:vs|vnew filename
新規タブで開く
:tabe filename
保存
管理者権限で保存
w !sudo tee %
編集
カーソル上の単語を削除してインサートモードへ
ciw ciW <- 単語の囲い文字を含む cit <- タグで囲まれた範囲
カーソルがある範囲を削除してインサートモードいろいろ
ci' | ci" | ci[ | ci] | c0 | c$
カーソル行を削除してインサートモード
S カーソル行の文字を全て消してインサートモードへ cc 行削除インサートモードへ c5c|c5j その行を含む下5行をクリアしてインサートモードに入る
複数選択範囲を削除してインサートモードへ
s
カーソルの下の単語をレジスター5の文字列に置換
viw"5p
直前の操作をおこなう
. <-基本的にドットを連打 10. <-10回繰り返す時
削除
文字を削除
diw diW <- 単語の囲い文字を含む dit <- タグで囲まれた範囲
abc を含む行を削除する 範囲内のみ可能
:g/abc/d
abc を含まない行を削除する 範囲内のみ可能
:v/abc/d
カーソルがある範囲を削除いろいろ
di' | di" | di[ | di] | d0 | d$ | D <- d$と同じ
1字もしくは選択範囲を削除
x 前 | X 後ろ
カーソル移動
文字単位移動
w W b B
カーソルを表示範囲の最上部,中央,最下部へ移動
H ...High M ...Middle L ...Low
文字へジャンプ
fx 次のxまで飛ぶ Fx 前のxまで飛ぶ tx 次のxの手前まで飛ぶ Tx 前のxの次まで飛ぶ ; 繰り返し用 前方 , 繰り返し用 後方
範囲選択
カーソル上の単語を選択
viw viW <- 単語の囲い文字を含む
カーソル上で記号で囲まれた範囲を選択
vi' | vi" | vi[ | vi] | viW <-囲い文字も含める
前回の選択範囲を再選択
gv
ヤンク
ヤンク 単語 記号で囲まれた範囲や括弧の範囲など
yiw | y0 | y^ | y$ | yi' | yi" | yi[ | yi]
カーソル行をヤンク 行の先頭から改行まで
Y
レジスタaにヤンク
"ay
レジスタの一覧を確認
:reg
ペースト
レジスタaをペースト
"ap | "aP
コマンド欄の入力にて、レジスタaの内容をペーストする
<C-r>a
コマンド欄の入力にて、最後に検索した文字列をペーストする
<C-r>/
コマンド欄の入力にて、クリップボードの内容をペーストする
<C-r>*
レジスタ操作
レジスタを他のレジスタにコピー
:let @y=@a
インデント
カーソル行のインデントを削除
0d^ | ^d0 | ^0c cはインサートモードへ
現在のカーソル行を揃える
==
バーチャルモードで選択した範囲を揃える
=
編集モードで字下げの追加と削除
<C-t> <C-d>
検索
smartcaseで大文字が入るときは区別する
:set smartcase :set nosmartcase
大文字小文字を区別しない ignore case
:set ic
大文字小文字を区別する no ignore case
:set noic
検索時のオプションで大文字小文字を \c区別しない \C区別する
/xxx\c | /\Cxxx
検索途中に一致する文字列に移動するインクリメントサーチ
:set incsearch :set noincsearch
置換
ファイル全て
:%s/検索/置換/g
行を指定 10から50行
:10,50s/検索/置換/g
選択範囲
:'<,'>s/検索/置換/g
後方参照置換
\(後方参照文字列\) \1
変換
数字をインクリメントデクリメント 数値の上で
<C-a> | <C-x>
大文字小文字変換 ビジュアルモードで範囲選択後に
u | U
空白をタブに変換
:set noexpandtab と設定してある状態で :retab!
タブを空白に変換
:set expandtab と設定してある状態で :retab
囲い文字変換 'tpope/vim-surround'
選択範囲の文字を囲い文字で囲う
S◯
範囲選択せずに囲い文字で囲う ...正直使いにくい
ys◯● ...◯は範囲 w(単語)t(タグ) ●で囲う
カーソルがある位置の文字を囲い文字を変更したい時
cs◯● ...◯から●へ
カーソルがあるいちの文字を囲い文字を削除したい時
ds◯ ...tでタグ削除できる
HTMLへ変換 'mattn/emmet-vim'
未入力の場所へ移動してインサートモードへ(インサートモード中でも使える)
<emmet-leader>n N 次へ前へ
すでにある文字をタグで囲む
ビジュアルモードで選択してから <emmet-leader>,とするとTag:が表示される
タグをコメント化/解除
<emmet-leader>/
選択範囲を一行にまとめる
<emmet-leader>m
書き方
div>p{a}^span ^ ノードを一つ上に行く divとspanが兄弟 一気に書かなければあまり使わないかな… . (兄)+弟 と()で囲める書ける div>(ul>li*3)+p{pタグ} . classを連番で3行 table#id>tr.class$*3 . {文字列} a{リンク文字列}
ジャンプ
指定した行番号へジャンプ
:80 80G <- こっちはビジュアルモードでも使える
最終編集位置へジャンプ
`. | '.
ジャンプリスト カーソル位置へ戻る,進む
<C-o> <C-i>
タグジャンプ
<C-]> カーソルの下のタグ定義へジャンプ <C-t> | :pop タグスタックをたどる :tag タグスタックをすすむ
対応した括弧へジャンプ
%
括弧の始まりと終わりへ移動
[{ 現在カーソルの位置のネストの開始"{"へ移動 ]} 現在カーソルの位置のネストの終了"}"へ移動
メソッドジャンプ
]] 次のメソッドの始まりに移動 [[ 前のメソッドの始まりに移動 ]m 次のメソッドの始めに移動 ]M 次のメソッドの終わりに移動 [m 前のメソッドの始めに移動 [M 前のメソッドの終わりに移動
スクロール
スクロールダウン アップ
<C-e> <C-y>
半ページダウン アップ
<C-d> <C-u>
ページダウン アップ カーソルがついてこない
<C-f> <C-b>
スクロール 画面表示範囲変更
z<CR> | zt カーソルが一番上になるように画面スクロール ...Top z. カーソルが中央にくるように画面スクロール z- | zb カーソルが一番下になるように画面スクロール ...Bottom
文字コード、改行コードの変換
文字コード変換
utf-8 shift_jis euc-jp
:set fenc=utf-8
改行コード変換
unix dos
:set ff=unix
マクロ操作
マクロの記録(5に記録)
q5
マクロの実行(5に記録したマクロのを2回実行)
2@5
記録したキーボードマクロのテキストを確認(レジスタ5に登録されている)
"5
コマンド履歴、検索履歴
履歴の表示
ノーマルモードで q: q/ q?
履歴をコマンドへコピーする
履歴一覧の上で Ctrl+C をする
履歴のコマンドや検索を実行する
履歴一覧の上で Enter
Quickfix
開く
:copen|cw| :cgetfile <ファイル名> :cfile <ファイル名>
移動
:cn | :cnext :cp | :cprevious
再読込
:cbuffer
履歴移動
:cnewer :colder
location list
開く
:lopen
移動
:ln | :lnext :lp | :lprevious
syntax error
開く
:Errors | lopen
環境系
編集モード切り替え
フリーカーソルモードON OFF
:set ve=all :set ve=
インサートモードでのタブ押下時に挿入される文字種
空白 :set expandtab :set et タブ :set noexpandtab :set noet
タブ・スペースのインデント幅の設定
:set ts=4
文字コード、改行コードの設定
文字コード
utf-8 shift_jis euc-jp
:set fenc=utf-8
改行コード
unix dos
:set ff=unix
表示変更
折り返しの設定
:set wrap :set nowrap
一括操作系
グレップ検索
カレントファイル内をグレップ検索
:vimgrep /検索文字列/jg % | cw gを付けない場合はそれぞれの行に対して一度のみ jを付ける場合は検索終了後に自動でジャンプしない
現在のディレクトリを起点にグレップ検索
:pwd をしてディレクトリ確認 ファイルのディレクトリに移動 :cd %:h incとphpファイルを検索 :vimgrep /検索文字列/jg **/*.inc **/*.php | cw
dataディレクトリ内でインデックスにキャッシュされている.phpファイルを対象に検索する
:vim /検索文字列/jg `git ls-files data/**/*.php`
argsにディレクトリ名を入れれる
:ar search/directory/**.rb :vim hoge ## :vim huga ##
bufferに読み込まれているファイルを対象にグレップ検索をする
:bufdo vimgrep /検索文字列/jg %
cwを再び開く
:copen | :cw
bufferで開いているファイルに対してグレップ検索をする
:bufdo vimgrepadd /{検索文字列}/ %
履歴移動
:cnewer :colder
グレップ置換、改行コード置換、文字コード変換
サブディレクトリを含めて、拡張子mとhのファイルを検索し、argsに登録
:args **/*.m **/*.h
argsに登録されたファイルの一覧を確認
:args
argsに登録されたファイルに対して置換実行
:argdo %s/search/replace/g | update 改行コードの変更 :argdo set ff=unix | update 文字コードの変更 :argdo e ++enc=utf-8 | update 改行コードと文字コードの変更 :argdo e ++ff=unix ++enc=utf-8 | update 改行コード^Mを削除 ^M = Ctrl+v Ctrl+m :argdo % s/^M//g | update
bufferで開いているファイルのグレップ置換
bufferで開いているファイルの一覧を確認 :buffers | :ls bufferで開いているファイルに対して置換実行 :bufdo %s/foo/bar/g | update windowに開いているファイルのグレップ置換 :windo %s/foo/bar/g | update
ファイルブラウザ
編集中のファイルのディレクトリで開く
:e %:h 現在のウインドウに :leftabove vsplit %:h 現在のウインドウに左ペインとして :tabe %:h 新しいタブに
編集中のファイルとファイルブラウザを行き来する
:Rexplore
netrw 操作いろいろ
Enter ファイルを開く、ディレクトリを移動する o v p 水平方向、垂直分割、プレビューで開く t 新しいタブで開く - 上の階層に移動 u U ディレクトリ移動履歴を戻ったり、戻るを戻ったり c 開いているバッファ(%a)をカレントディレクトリに変更 P 前のウインドウに選択したものを表示する d ディレクトリの作成 D 削除 <C-L> リフレッシュ ■Tree表示の時 Enter 展開、閉じる、ファイルを開く <S-CR> シフトを押しながらエンターで現在行の親ツリーを閉じる :Ntree [dirname] "dirname" を指定しなかった場合 :NTree ../ に同じ