:let i=1
qa
I<c-r>=i<CR><Esc>j
:let i+=1
q
:reg a ... レジスタを参照
:put a ... レジスタをバッファへ出力
( 編集... )
0
"ay$ ... 行末改行なしのyank
dd
- magic
- \v : rubyっぽいやつ
- \V : テキストそのまま
- escape ...
<c-r>=
- 例:
:echo escape('c:\program files\vim', ' \')
results in: >
c:\\program\ files\\vim
- ````=escape(@u,getcmdtype().'\')
- /hogefuga/e<CR>
- nコマンドごとにマッチした文字列の末尾に移動
- マッチをを表すテキストオブジェクト: gn / gN
- 例:
~~~~
text: piyo hoge fuga
/hoge fuga<CR>n
cgn でマッチした文字列全体を変更可能
~~~~
- 参照渡し
~~~~
:%s//<c-r>0/g
:%s/\=@0/g ... \= : vimscript評価, @0 : ヤンクレジスタ
~~~~
- 応用: レジスタ上書きによる置換
- 例: hogeをfugaに置換
:let @/ = 'hoge' :let @a = 'fuga' :%s//=@a/g
- ファイル全体にコマンドを繰り返す
:s/aaaa/bbbb/g g&
- ````:%s//.../&```` と同じ効果
- 置換範囲の修正
:%s/aaaa/bbbb/g :'<,'>&&
- &というExコマンド(直前のsubstituteを繰り返せ)に&(直前の:sコマンドのフラグを流用せよ)を組み合わせる
## Multiple Repeats: global, vglobal
- <u>v</u>globalのvはinvertのv
:[range]g[lobal]/{pattern}/[cmd]
- 例: TODOを含む行をコピーしてyank register追記していく
qaq (register a のクリア) :g/TODO/yank A ... Aは追記を示す
- argdoやbufdoと連携が可能である
- {}内のsort
:g/{/ .+1,/}/-1 sort
(この場合, :[range]g[lobal]/{pattern}/[range] [cmd])
cssの .button{ display: block; font-size: 24px; font-family: "Tenderness"; text-transform: uppercase; border:1px solid #777; padding: .5em 2em .55em; } のような内容で{}の中身を整列できる
-> ````:g/{start}/ .,/{finish} [cmd]```` ... {start}から{finish}で終わる行範囲へcmdを適用
## 開発ツール連携
- ctags
nnoremap :!ctags -R :autocmd BufWritePost * call system("ctags -R")
- complier, makeを自由に設定可能
- スペルミスをノーマルモードで修正するときには[sでミスしたところにジャンプしてからz=で修正する。
インサートモードでは<C-x><C-s>でミスした部分に順番にジャンプし自動補完で修正できる。
## レジスタ
- 例:
1. マクロを記録 ````qa0f.v)w~q````
2. Visual selection
3. ````'<,'>normal @a````
- args, argdo
:args *rb :argdo normal @a ... 並列適応 (:argdo write)
## Visualモードなど
- visual mode内でo ... 始点終点切り替え
- ````<c-o>```` : 挿入ノーマルモード
- eg: ````<c-o>zz```` insert modeで入力している行を画面中心にもってくる
- ````gU{motion}```` : {motion}まで大文字にする
- ````<c-r>0```` : 挿入モードでも貼り付け
- 0 はヤンクレジスタ
- " は無名レジスタ
:'<,'>normal :%normal A: :%normal ://
- 直前のコマンド実行: ````@:````
- ````<c-r><c-w>```` -> word
- ````<c-r><c-a>```` -> WORD
- ````q:```` ... コマンド履歴を含むコマンドラインウィンドウ
- ````q/```` ... 検索履歴を含むコマンドラインウィンドウ
- ````c-f```` ... コマンドラインモードからコマンドラインウィンドウへ
- ````2,$!sort -t',' -k2````
- ````:set hidden```` <- next without "!"
- ````<c-w>s, <c-v>v```` ウィンドウ分割