ラベル vim の投稿を表示しています。 すべての投稿を表示
ラベル vim の投稿を表示しています。 すべての投稿を表示

2016年6月29日水曜日

Vimでハードタブをソフトタブに変換する

タブにまつわるコーディングルールは色々とあるけれど、個人的にはソフトタブを好んで使っており、また今の職場もルール上、ソフトタブを使うことになっている。が、たまにルール外の世界から持って来たコードにハードタブを見つけたりすると、その場で変換することになる。

expandコマンドを使える真っ当な環境なら、素直にそれを使えばいい。OS Xを含むUnix系の環境なら当たり前のように使える。これまでVimでは

:%!expand -t4
とかやって来た。が、好き勝手にCygwinを入れたりできないような厳しい職場のWindowsだと、困ったことにこの手を使えない。で、これまでメンドクセーと思いながらもLinuxマシンに持って行って変換していたのだが、Vim組み込みの機能でできることを今更知った。

使うのはズバリ

:retab
:set expandtab状態で:retabすればハードタブがソフトタブになる。

逆に:set noexpandtab状態で:retabすれば、ソフトタブがハードタブになる、…と言いたいところだが、ちょっと癖がある。help retabから引用すると、

Replace all sequences of white-space containing a <Tab> with new strings of white-space using the new tabstop value given.
ハードタブが含まれたホワイトスペースでないと変換してもらえない。ハード・ソフト混在の気持ち悪いソースには使えるけど、きちんとソフトタブに統一されたソースは、:retabではハードタブに変換できない。ただ、手段がないわけではなく、
With !, Vim also replaces strings of only normal spaces with tabs where appropriate.
:retabの代わりに
:retab!
すればOK。

2016年6月9日木曜日

Vimでウィンドウを分割しながらタグジャンプ

今更知ったVimの操作。Vimでタグジャンプする際にカレントウィンドウの状態を取っておきたいとき、これまでは手動でsplitしてからタグジャンプしていたのだけれど、

CTRL-W ]
を使えば1手でできるのだ。詳しくは
:help stag
で。他にもsplitしながら別のことをする機能があるみたい。

2014年11月29日土曜日

VimがIMEをオンにするのがうざい

普段、ターミナル上で起動しているUnix系のOS(OS X含む)のVimはIMを勝手に制御したりしないので、それに慣れているとWindows版のGVimに勝手にIMEをonされるのに、地味にイラついていた。編集モードでonされたのを手動でoffしたのに、検索文字列を入力しようとしたらまた勝手にonされたりして。大体、わざわざVimを入れて使おうと思う人が編集するファイルなんて、十中八九プログラムのソースだろうよ。IMEをonにされても邪魔にしかならん。

…で、いい加減、痺れを切らして解決方法をググったら、こちらのページの設定でIMEの制御を無効化できた。具体的には

set iminsert=0
set imsearch=-1
でOK。iminsert=0が挿入モードでIMをoffにする設定で、imsearch=-1が検索文字列入力時のIM制御をiminsertと同じ振る舞いにする設定。なので、imsearch=0でも良い。

これで少しはWindows環境の不快度が下がった。本当はフルセットのCygwinを使いたいのだけれど、今の職場のPCは、そこらへんを勝手にいじれないのが辛い。

2012年3月2日金曜日

ERBを使おう


eRubyとは、乱暴に言えばPHPのRuby版みたいなもの。道なりにRubyをインストールしていれば、eRubyの一実装であるerbというコマンドが既にインストールされている場合が多い(Debian系は別パッケージだったかも)。
さて、PHPに例えておいてなんだが、erbは決してHTML専用ジェネレータではなく、汎用テンプレートエンジンなのだ。単調な記述を繰り返さねばならないとき、ささっと使うと非常に便利。
例えばVerilogの6ビットのアドレスデコーダを記述すると、こんな感じ。
% 64.times do |a|
assign w_dec_addr[<%=a%>] = (w_addr[5:0] == 6'd<%=a%>);
% end
これをerbに食わせるとこうなる。
assign w_dec_addr[0] = (w_addr[5:0] == 6'd0);
assign w_dec_addr[1] = (w_addr[5:0] == 6'd1);
(中略)
assign w_dec_addr[62] = (w_addr[5:0] == 6'd62);
assign w_dec_addr[63] = (w_addr[5:0] == 6'd63);
FPGAならgenerate forとか使って気軽に冒険できるけど、どこでも確実に合成できるようにしようと思うと、ベタ書きになっちゃうのよね。

erbは引数にファイル名を与えなければフィルタとして動作するので、Vimのvisual modeと非常に相性が良い。編集中のファイルにeRubyのコードを混ぜ込み、vで範囲指定した状態で
:'<,'>!erb
と実行すれば、選択した行のみerbに通すことが出来る。失敗してもuでアンドゥできるので、ガンガン試してみよう。

2012年3月1日木曜日

Vimのバッファの状態

Vimを日常的に使っている割に、まじめに把握してなかったシリーズ(?)第2弾。Vimのバッファについて、helpを読んでみた。
バッファには3つの状態がある。
  1. ウィンドウに表示しながら編集中(active)
  2. 非表示だが編集内容は保持中(hidden)
  3. 編集を終えた(inactive)
普通に編集しているファイルはactive。これはまあ、特に意識せずとも使っている。
編集を終えて閉じたファイルはinactive。これもまた、特に意識するものではない。あるファイルを表示しているウィンドウを全て閉じても、そのバッファ自体が消滅するのではなく、inactiveで残っているわけだ。最もメモリは解放するようなので、残っていても特に害はない。
あまり使いこなしていないのがhidden。まだディスクに保存はしたくないが狭い端末を分割したくないとき、hiddenにすれば編集中のまま他のファイル(バッファ)を編集できる。カレントウィンドウで表示中のバッファは
:hid
でhiddenにできる。また、:hidの引数に他のコマンドを与えれば、カレントバッファをhiddenにしながらそのコマンドを実行できる。例えば
:hid e foo.txt
でカレントバッファhiddenにして、代わりにfoo.txtのバッファをカレントウィンドウに表示する。

2012年2月28日火曜日

Vimのウィンドウ操作

日常的にVimを使っていながら、意外とウィンドウ操作は把握していなかったので、あんちょこ的にまとめてみる。
開く操作
CTRL-W sカレントウィンドウを横分割
CTRL-W vカレントウィンドウを縦分割
CTRL-W nカレントウィンドウを横分割しながら新規無名ファイルを開く
:sp[lit] {file}カレントウィンドウを横分割しながら指定ファイルを開く
:vs[plit] {file}カレントウィンドウを縦分割しながら指定ファイルを開く
閉じる操作
CTRL-W qカレントウィンドウを閉じる(ラスト1つならVim終了)
CTRL-W cカレントウィンドウを閉じる(ラスト1つなら閉じない)
CTRL-W oカレント以外のウィンドウを全て閉じる
別のウィンドウへ移動する操作
CTRL-W h左のウィンドウに移動
CTRL-W j上のウィンドウに移動
CTRL-W k上のウィンドウに移動
CTRL-W l右のウィンドウに移動
CTRL-W w下/右のウィンドウに移動
CTRL-W W上/左のウィンドウに移動
CTRL-W t最も左上のウィンドウに移動
CTRL-W b最も右下のウィンドウに移動
CTRL-W p直前にいたウィンドウに戻る
ウィンドウ自身を移動させる操作
CTRL-W rカレントを含むウィンドウのロウ/カラムを下/右回りにローテーション
CTRL-W Rカレントを含むウィンドウのロウ/カラム上/左回りにローテーション
CTRL-W xカレントと次(無ければ前)のウィンドウをスワップ
CTRL-W Hカレントウィンドウを無理矢理一番左にする
CTRL-W Jカレントウィンドウを無理矢理一番上にする
CTRL-W Kカレントウィンドウを無理矢理一番下にする
CTRL-W Lカレントウィンドウを無理矢理一番右にする
ウィンドウのサイズ変更
CTRL-W =全てのウィンドウのサイズを均等に調整
CTRL-W -カレントウィンドウの高さを減らす
CTRL-W +カレントウィンドウを高さを増やす
CTRL-W <カレントウィンドウを幅を減らす
CTRL-W >カレントウィンドウを幅を増やす