Skip to content

Instantly share code, notes, and snippets.

@ompugao
Created January 20, 2016 10:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ompugao/ab0e22ed4c6351de6255 to your computer and use it in GitHub Desktop.
Save ompugao/ab0e22ed4c6351de6255 to your computer and use it in GitHub Desktop.
vim tips

実践Vim

先頭に連番をつける

: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```` ウィンドウ分割
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment