綾小路龍之介の素人思考

Tools > vimの設定とtips

使いこなすと味が出てくる。vim使いになるための覚書。使い始めて5年くらいだけど、使いにくいが代名詞のviエディタのキーバインド、キーアサイン、にも慣れてしまうものだね。今はwindows上で書いてるんだけど、エスケープキー押したあとにiとかoとかaとか押してる、ものすごく自然に。困った、僕はタッチタイプできないから、あとから気づくんだよな、余分なもの押したことに。昔はエディタ使っていると思わずCtrl+Sだったけど、今じゃあ暇さえあればESCだもんな。


目次


1.1 vimの検索で正規表現を使う

一度にいくつものキーワードをハイライト表示したい場合に正規表現をどう書けばいいのかわからなかった。いや、正規表現の書き方は知っていたけどエスケープすることまでは知らなかった。

/\(keyword1\|keyword2\)

とすると一度にkeyword1とkeyword2の両方をハイライトできる。でもデフォルトで色分けは無理。調べると色分けも可能なようだけどなんかが必要らしい。エスケープするということに関しては普通の正規表現の書き方をして、正規表現に含まれる普通の文字以外をエスケープすればいいような気がする。例えば次のような感じ。

普通の正規表現viの正規表現
[a-z]\[a\-z\]
^.*\.wav$\^\.\*\\.wav\$

1.2 [vim] 自動コミット

オレオレリポジトリにコミットするのにコンパイルチェックなんて必要なのか知らないけれど、とにかくこうするとコミットする回数が増えて、あたかも自分が仕事をしているかのように感じられて嬉しかったりする。:make するときのコマンドを適当なシェルスクリプトに変えて、シェルクスクリプトの中でmakeを呼ぶ。

:set makeprg=sh\ make.sh
$ cat make.sh
#!/bin/bash
make && svn commit

いつもどおり:makeすると、makeに成功した場合のみmakeが終わってからsvnのログを書けと言われるので、書けばコミットできる。問題は、vimを起動して毎回設定変更しないとだめだということだ。カレントディレクトリに常にmake.shがあるわけではないからな。


1.3 vimでvsplit(縦分割)の幅変更

まずは縦分割して、横幅を変更したいウィンドウにカーソルを移動させる。そして、Ctrl + W >でウィンドウの横幅が広がる。Ctrl + W <でウィンドウの横幅が狭くなる。これだと1文字幅ごとに変更することになるので、Ctrl + W 10>で10文字幅だけウィンドウの横幅を広くすることが出来る。また、Ctrl + W 10<で10文字幅だけウィンドウの横幅を狭くすることが出来る。


1.4 検索結果の強調表示(ハイライト)

ハイライトしないとよくわからんがetchのvimはあんまりいろいろ世話を焼いてくれないので自分で設定しておく。

$ su -
# echo set hlsearch >> /etc/vim/vimrc

1.4.1 [vim] vimで色分け(シンタックスハイライト)して表示

もっとも簡単で一時的な変更の場合はvimを起動してesc-:syntax=onと入力する。これで当該ウィンドウで開く文書については色分け表示される。

:syntax=on

初期状態のvimrcでは色分け表示されていないのでコメントの多い設定ファイルをいじるときに不便。ということで色分け表示をONにしておく。ユーザのホームディレクトリで~/.vimrcにsyntax=onを追加すると設定したユーザのみに反映される。

$ echo syntax=on>>~/.vimrc

vimrcの大元である/etc/vim/vimrcに追加するとマシンを使う全てのユーザで有効になる。

# echo syntax=on>>/etc/vim/vimrc

ubuntuのvim.tinyでは色分け表示できないのでapt-get install vimをする必要があるそうな。debianでもそうなのかな。先にvimパッケージ導入してしまったので良くわからないが。

  1. ubuntu - PukiWiki
  2. estancia - .vimrcのsyntax onがエラーになる/効かない
  3. 粉々にしてあげる » vimに色をつける

1.5 [vim] 色わけして表示

色分けしてくれると良いこといっぱい。例えば、書きながらにしてコンパイル通らない箇所とかを指摘してくれる(全部ではないけれど)。ちょいミスが減らせて便利だと思う。下のようにすれば、ファイル名が*.htmlでないけれど、内容はhtml文書のファイルも色分けして表示してくれて便利。

:set filetype=html

1.6 [vim] インデントする。

インデントするときはいつもindent -kr hoge.cとかしていたけど、vimでもすぐにできることに気づいた。コマンドモードでgg=GすればOK。気分的な問題だけど、indent -krしてからgg=Gすればいい感じ。indentだけだとなんだかうまくいかない。まぁindentコマンドで制御すればOKなんだけど、そんな根性ないので。


1.7 [vim] オートインデントを無効にしてペースト

vimへの流し込みやペーストのとき、キルリングからのペーストだと問題ない。しかし、puttyでマウス選択したものをShift + Insertしたり、screenでC-a {したものをC-a }したりするとオートインデントが効いてしまうため、整形済みテキストをペーストする場合には、せっかくの整形が崩れてしまうので不都合。そんな場合はペーストモードになればよし。

:set paste

これで挿入モードなどの場合にpasteモードになっていることがわかる。この状態でペーストするとオートインデント無でペーストされるので整形済みテキストを形を変えずにペーストできる。

-- INSERT (paste) --

ペーストモードから抜けるには下のようにする。

:set nopaste
  1. ペースト時 の vim のオートインデントを無効にしたい - Web道楽
  2. vim インデント無効

1.8 [vim] ファイル内容の流し込み

たまに使うが忘れると面倒なものだ。

:r hoge.txt

これを知る前は下のようにしていた。コマンドモードで!を2回。

:.!cat hoge.txt

この方法だと、単純に流し込みする場合はメリット無だが、シェルを起動しているので、HTMLエスケープするためのパイプを通して流し込む場合(html文書のpreタグ中にcのソースを貼る場合)とかは結構つかえる。

:!cat hoge.c | perl htmlescape.pl

htmlescape.plの中身は下のような感じ。

#!/usr/bin/perl -p
use HTML::Entities;
encode_entities($_,"<>&");

1.9 [vim] savevers.vimを使って編集ファイルの世代バックアップを取る

世代バックアップを取るのに前は、bashの関数を~/.bashrcに追加して使っていました。適当に作った関数だったので、lessからviに渡したときにviの起動に失敗しました。確か下のような感じだったと思います。

vi(){
  cp $1 $1.`date +%Y%m%d%H%M%S`;
  command vi $1;
}

これではまずいので、savevers.vimを導入しました。

$ wget http://www.vim.org/scripts/download_script.php?src_id=261 -O ~/.vim/plugin/savevers.vim
$ echo 'set backup'                           >> ~/.vimrc
$ echo ':set patchmode=.clean'                >> ~/.vimrc
$ echo ':let savevers_types = "*"'            >> ~/.vimrc
$ echo ':let savevers_dirs = &backupdir'      >> ~/.vimrc
$ echo ':let versdiff_no_resize=1'            >> ~/.vimrc
$ echo ':nmap <silent> <F5> :VersDiff -<cr>'  >> ~/.vimrc
$ echo ':nmap <silent> <F6> :VersDiff +<cr>'  >> ~/.vimrc
$ echo ':nmap <silent> <F8> :VersDiff -c<cr>' >> ~/.vimrc

削除系のコマンドはこわいのでショートカット登録(というのかは不明)しなかった。詳しい使い方はsavevers.vimの配布ページに載っているのでそこを参照してほしい。

:Purge編集中のファイルのバックアップの内最も古いもの以外を全て削除
:Purge 0編集中のファイルのバックアップを全て削除
:Purge -a 0編集中のファイルのバックアップがあるディレクトリの中にあるバックアップを全て削除(編集中のファイルも編集中でないファイルもとにかく全て)

ひとつ気付いた事がある。それは、:Purgeする場合、削除されるのは新しいファイルからということだ。例えば、:Purge -v Nとした場合。1番目からN番目までが残り、N+1番目以降は消去される。新しいファイルのほうが、数が大きくなるので、古いファイルが残り、新しいファイルが消去されることになる。手動でバックアップファイルを消去して、わざと欠番を作った場合、その欠番を数が小さいほうから順に埋めるようにしてバックアップが作成されるようだ。


1.10 [vim] savevers.vimでできたファイルをバックアップしておく

savevers.vimを使っています。プログラムの開発とか、文書書くときに。過去に戻りたい時には最適です。でも、編集して保存した回数だけファイルができるので、ディスクスペースを結構食います。古い履歴ファイルに関して、削除する勇気がいないので、とりあえず圧縮しました。

$ tar cfj FILENAME.tar.bz2 FILENAME.????.clean
$ rm -f FILENAME.????.clean

解凍したい時は、下のように。

$ tar xfj FILENAME.tar.bz2

savevers.vimは欠番を埋めるように履歴ファイルを作ります。なので、最も古い0001-0999のファイルだけ圧縮して、それらを削除すると、次は0001番から履歴ファイルが作られてしまいます。0999番と1000番の関係がおかしくなるので全て圧縮しました。


サイトマップ

  1. CSS > Webサイトのレイアウトの話
  2. DVDリッピングしてaviファイルにするときの計算方法
  3. Debian > インストールメモ
  4. Memo > One Line Diary
  5. Memo > To-Doリスト
  6. Memo > iswebの自動挿入広告の文字コードに関する考察
  7. Memo > リンクとメモ
  8. Memo > 物理屋の独り言
  9. Misc > High Performance Computing(HPC)
  10. PC過去の遺物集
  11. Perl > 1行スクリプト覚書 with Active Perl
  12. Perl > Perl実験室でWeb雑考
  13. Perl > XML::TreePPでXMLサイトマップファイルを生成
  14. Perl > e.cgi のページ ProjectRotation8
  15. Perl > クエリを連想配列で受け取るスマートな方法
  16. Perl > サーバーにアップロードしたcgiのエラーチェック
  17. Perl > ブリコラージュ的 cgi
  18. Programing > プログラムの素人が不思議に思ったこと
  19. Services > Gmail Tips
  20. Services > YourFileHostダウンローダ
  21. Services > twitterはじめました。
  22. Tech > MathMLを使ってみる
  23. Tech > Windows 2000 Professional でLaTeX組版システムを使う
  24. Tech > coLinuxの導入
  25. Tech > サイトのミラーリング
  26. Terapadで作るLaTeX統合環境
  27. Tools > Opera > 設定の諸々
  28. Tools > bashのメモ
  29. Tools > lit2ptoのページ
  30. Tools > vimの設定とtips
  31. Tools > よく使う機能のメモと設定のメモ
  32. VMware > ホストOSがWindows XP Home SP2でゲストOSがVine Linux 4.1
  33. Vine > SSHの暗号化経路を経由してSambaサーバの共有ディレクトリをマウント
  34. Vine Linux > LaTeXでpdf文書作成
  35. Vine Linux > Libretto L1に載せる
  36. Vine Linux > SSH関係の諸々メモ
  37. Vine Linux > サーバを立てたときのメモ
  38. Vine Linux > ソフトウェアRAID
  39. Vine Linux > デスクトップとして使う場合に必要な設定
  40. Wanderlust > inter7でIMAP4
  41. Web Etcetera > サーバー上でファイルを直接編集することについて
  42. Web Etcetera > 検索エンジンが自分のサイトをどのように認識しているか
  43. Web Etcetera > 無料ホームページスペースの広告削除は真か偽か
  44. Winamp > StreamRipperで全自動リッピング
  45. Winamp > タスクマネージャを使って目覚まし時計
  46. Windows > robocopyでフォルダ間同期
  47. Windows > 手動でコーデックをインストールする
  48. gnuplotのプロットギャラリー
  49. rsyncでディレクトリの内容を同期する
  50. wgetのメモ
  51. ネットワーク上にメモ帳を置く
  52. ハードウェア > HDDの再利用
  53. ハードウェア > 安定で快適なマシンはハードから
  54. ブリコラージュ的メールマガジン一括登録解除方法
  55. 初めに
  56. 情報基礎演習UNIX
  57. 窓たちと正く付き合うにはショートカットキーから

コメント


pin

[PR]b̐VԂ𖳗ھĒ:K钊IIŊȒPGET