vim のよく忘れること

2009/03/10

自分がわりとよく「あれなんだっけ」と思うことをまとめておきます。思いついたら追加します。

置換

hogeをfooに置換する場合

最初のみ
:s/hoge/foo

一行
:s/hoge/foo/g

選択範囲(:’<,'> まで自動で入るので「s/before/after/g」で OK
:’<,'>s/hoge/foo/g

複数行
:<開始行>,<終了行>s/hoge/foo/g

ファイル全体 ※%=全体という意味
:%s/hoge/foo/g

最後にcを付けると置換前に確認する
たとえば一行置換を確認しながらならばこんなかんじ
:s/hoge/foo/gc

vimgrep

:vimgrep /hogehoge/ *.txt

最初にマッチしたファイルを開かないようにするには j フラグを使う。
:vimgrep /hogehoge/j *.txt

再帰的に検索するには **(starstar) を使う。
:vimgrep /hogehoge/j **/*.txt

検索結果は Quickfixリストに表示される。:copen で開き :ccl で閉じることができる。詳細は :he quickfix-window。
vimgrep をデフォルトの grep プログラムとして使用する

:grep を :vimgrep のエイリアスにするには、gvimrc に以下の行を追加する。
:set grepprg=internal

#comments
:vimgrep /hoge/j **/*.txt | cwin
とやると、copenしなくてもQuickfixが開いてくれて幸せです。
Posted by: aoki : October 16, 2007 06:21 PM

Vim7 内蔵の grep を使う | tanablogより引用』

ウィンドウ分割

上下に分割 :split
左右に分割 :vsplit
ウィンドウを閉じる :close
現在のウィンドウ以外を閉じる :only
別ウインドウへ移動 Ctrl + w

タブ・スペース変換

文書中の全てのスペースをタブに変換

:set noexpandtab
:%retab!

文書中の全てのタブをスペースに変換

:set expandtab
:%retab

折りたたみ

折りたたむ形を横から見ると z なので、キーは z

選択範囲の折りたたみを作る zf
折りたたみを開く zo
折りたたみを閉じる zc

全ての折りたたみを開く zO
全ての折りたたみを閉じる zC

ローマ字の大文字・小文字を変換

参考:Vim-users.jp – Hack #166: ローマ字の大文字/小文字を変換する

一文字ずつを対象に大文字→小文字、小文字→大文字に相互変換

・変換したい文字の上で or 選択した範囲を相互変換 → ~
・オペレーターに付ける → g~
・行丸ごと相互変換 → g~g~
 例:Hoge → hOGE

大文字に変換

・選択した範囲を大文字に → ビジュアルモードで選択後 U
・オペレーターに付ける → gU
・行丸ごと大文字に → gUgU
 例:Hoge→HOGE

小文字に変換

・選択した範囲を小文字に → ビジュアルモードで選択後 u
・オペレータに付ける場合 → gu
・行丸ごと小文字に → gugu
 例:Hoge→hoge

細かいもの

指定行へ移動

<行数>gg か<行数>G をよく使っていたけれど、:<行数>でも移動できると知った。

ビジュアルモードの直前の選択範囲を、もう一度選択

gv

コメントアウトのトグル

#コレ何かのプラグインだっただろうか・・→発見「EnhCommentify.vim : 複数のファイルタイプに対応したソースコメントアウト、コメントアウト解除スクリプト—名無しのvim使い
\x でコメントアウトをトグル

書き換え系

c$ で、カーソル以降~行末までを書き換え。(cw の w が $ に。すぐわすれる…。)

対応括弧にとぶ

%

削除

:10,20d
10~20 行目削除。削除範囲が広いときには便利。

単語

空白を含む単語 w
空白を含まない単語 e

ビジュアルモード、インサートモード、コマンドモードから抜ける

Ctrl + c

カーソルの下のファイルを開く

gf

<Leader>ってなんだっけ

Kaoriya版Vimでは標準で<Leader>は¥キー

plugin を追加したら

:helptags $VIM/vimfiles/doc
とかして、ヘルプを引けるようにしておく。( $VIM/vimfiles/doc の部分は各自環境に合わせて変更 )

autocomplpop.vim 使用時 omni 補完でエラー

下の 120 とまさに同じ状態がずっと起きていて困っていたけれども、ごり押しで対応したのでメモ。

120 :名無しさん@お腹いっぱい。:2009/02/20(金) 02:14:24
HTML ファイル編集時 class=" まで入力された状態で omni 補完を実行すると

function htmlcomplete#CompleteTags の処理中にエラーが検出されました:
行 304:
E121: 未定義の変数です: classlines

とエラーが出るんだけど、このエラーどうすれば解決する?
環境は Fedora10, vim-enhanced-7.2.060-1.fc10.i386

121 :名無しさん@お腹いっぱい。:2009/02/20(金) 16:17:31
>>120
同じOS&vimだけどエラー出なかったよ。
エラーの行番号304から察するに
/usr/share/vim/vim72/autoload/htmlcomplete.vim のverが自分のと違うっぽい。
うちのは
" Last Change: 2006 Oct 19

122 :120:2009/02/20(金) 23:35:04
>>121
こちらの htmlcomplete.vim も " Last Change: 2006 Oct 19
vimscript は読めないけれどちょっと中身を見てみると
どうやら classlines は css ファイルから補完候補を探してる模様
css ファイル用意するとエラーが出なくなり、問題なく omni 補完出来るようになりました

Vim Part16より引用』

とりあえず、autoload/htmlcomplete.vim の
227 行目 if context =~? "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
から
396 行目 endif
までをコメントアウト(行頭に「”」をつける)して対応。

困ったらこの辺見よう