Vimの履歴

今広く使われてるviはほとVimらしい。

バッファ

:ls     バッファの表示
:b[number]	[number]番バッファを表示する。
:bn	次のバッファを表示する。
:bp	前のバッファを表示する。
:bw	現在表示中のバッファを完全に消す。
 #n      次の
:e#     前の
:e#[number]    :b[number]と同じ?

置換

:%s/hogem/moge/g
:'<,'>:s/hogemoge/hoge/ 範囲置換 %s でなく :s

移動

1G または gg ページの始めへ
G  ページの終わりへ
^d 半ページ下 (d: down)
^u 半ページ上 (u: up)
^e 一行下へ (EclipseのCtrl+↓)
^y 一行上へ (EclipseのCtrl+↑)
^f ページダウン(f: forward)
^b ページアップ (b: back)
f(任意の文字) 同じ行でカーソル以降の任意の文字にジャンプ
F(任意の文字) 同じ行でカーソル以前の任意の文字にジャンプ

検索

 * or # カーソル下の単語を検索
g* or g# カーソル下の単語を検索(マークのみ)
[I or ]I カーソル下の単語を一覧表示

ウィンドウ

:new 新規作成
:sp 横に分割
:vsp 縦に分割
Ctrl+W Ctrl+W 順に移動
n Ctrl+W {+-><} ウィンドウサイズ変更



タブ

:tabe [file]
:tabc
:tabn or gt
:tabp or gT

レジスタ

"ay 「a」レジスタにコピー
"ap 「a」レジスタに貼付け

その他

v ビジュアルモード
Ctrl+v 矩形選択
:earlier 10m  10分前の状態に戻る
Ctrl+P 補完
Ctrl+] ctagsの関数ジャンプ
:version バージョンや有効な機能の一覧など
Ctrl+X Ctrl+O オムニ補完(関数) filetype plugin on を入れておく
. 直前の操作を繰り返す
gg=G 全体をインデント整形


挿入モードで使えるやつ

Ctrl + [ Escと同じ

Ctrl + [J,M] 改行
Ctrl + [N,P] 補完
Ctrl + T インデント増やす
Ctrl + D インデント減らす
0, Ctrl + D インデント0にする
Ctrl + H バックスペース
Ctrl + U 行頭まで削除
Ctrl + W 単語単位で逆方向へ削除
Ctrl + R ?
Ctrl + Y 直上の文字を挿入
Ctrl + E 直下の文字を挿入
Ctrl + O 一度だけコマンドモード使える
Ctrl + @ ?
Ctrl + V, Ctrl + [任意] 制御文字の入力


省略

:iabbrev ad advertisement
  :iabbrev で設定した文字を打ち、
  スペースやエンターを押すと文字列が展開される。
:abbreviate
  :iabbrev で設定したリストを表示
:iunabbreviate ad
  設定した省力記法をクリア
:iabclear
  全ての省略記法をクリア

テキスト選択

vi*系 va*系がある

viw
vis
vip
vit
vi' "`({<


選択中に o でカーソル逆に

http://ogawa.s18.xrea.com/fswiki/wiki.cgi?page=Vim%A4%CE%A5%...

リドゥ

Ctrl + R

Tips

複数ファイルの一括置換

まずファイルを開く

:args *.c 
:args **/*.c 

確認

:args 

複数ファイル置換

:argdo %s/hoge/moge/g | update

複数ファイルの一括置換(確認しながら)

vim -c "argdo %s/FooBar/BarBaz/gce | update" **/*.pm

http://subtech.g.hatena.ne.jp/cho45/20100405/1270444967

連番

(1)

という文字列を作って、その行上で
qayyp<C-a>q

して、8@a するとあら不思議!(1)のところは 1 でも foo1 でもおk。vim テラベンリスwww。

http://subtech.g.hatena.ne.jp/secondlife/20081223/1230023656

へーすごーい

qでマクロ記録開始
aはトリガーキー
yyで一行コピー
pでペースト
C-aで数値をインクリメント
qでマクロ記録停止

8は繰り返し
@でマクロ実行
aを開始

ちくちゃに教えてもらった技

:Ex ファイル一覧
:!  コマンド実行
:sp ウィンドウ分割
:vs 縦分割
:ctrl+w w 分割した中で移動


ペースト時にオートインデントをoffにしたい

:set paste

か、

「:a!」→ペースト→Esc

複数行のインデント

vで行選択した後で「>」

" オートインデントを無効にする
"set noautoindent
" タブが対応する空白の数
set tabstop=4
" タブやバックスペースの使用等の編集操作をするときに、タブが対応する空白の数
set softtabstop=4
" インデントの各段階に使われる空白の数
set shiftwidth=4
" タブを挿入するとき、代わりに空白を使わない
set noexpandtab

コメントアウト/コメント解除

http://tempest.dcnblog.jp/blog/2007/06/vivim_9128.html

ビジュアルモードで選択→大文字I→文字→Escでできるよ!って色なとこで書いてあったのにどうやってもできなくて涙目になってたら、Ctrl+Vの矩形選択でできました。

UTF8で文字化けしないように

.vimrc

set encoding=utf-8
set fileencodings=iso-2022-jp,utf-8,sjis


ってこの設定やってもなお文字化けしておかしいなーと思ったらターミナルの文字コード設定がEUC-JPやったというオチ。未だにputtyなのでそろそろpoderosaとやらに乗り換えるか

設定の確認

:set

行末に^Mがつく

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/164linendm...
CR+LFのCR部分が出てる。
^Mはctrl+V ctrl+Mで入力できる。
取り除くには :%s/^M//g で置換する

色分けする

Fedora(やRH系?)はyum install vim-enchancedでないと色分けされないそうだ。インストールしたものは vim になるので alias vi="vim" すると vi で実行できる。

ref: http://tempest.dcnblog.jp/blog/2005/05/fedora_core_3vi_1939....

ファイルごとで設定を変える(モードライン)

http://nanasi.jp/articles/howto/file/modeline.html

改行を削除する(行を連結)

J

コマンドモードに戻る時にESC以外の戻り方

Ctrl + [

プラグイン

どこに入れるか?

 :h add-global-plugin 

macなら.vim/plugin

quickrun

その場で実行
http://github.com/thinca/vim-quickrun

FuzzyFinder

pluginとautoloadに入れる
http://www.vim.org/scripts/script.php?script_id=1984

AutoComplPop

文字タイプしたら補完始まる
http://www.vim.org/scripts/script.php?script_id=1879

VimPHP辞書を作成
http://www.asahi-net.or.jp/~wv7y-kmr/memo/vim_php.html

ファイルタイプごとに設定を変更する

http://d.hatena.ne.jp/bazz/20090425/1240671263

ftplugin/ruby.vimにいれる

setlocal tabstop=2
setlocal shiftwidth=2

vimrc

http://vimwiki.net/?vimrc%C5%B8%BC%A8%B2%F1%BE%EC

参考

Vimコマンド 覚書
http://www.7key.jp/software/vi.html

vimで複数ファイルにまたがる特定のパターンを置換する場合のお作法
http://zx.jpn.org/b/20081025/155/vim/vim-mluti-file-replace

ドキュメント
http://www.ac.cyberhome.ne.jp/~yakahaira/vimdoc/index.html