MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

コアテクノロジー部

ミラクル・リナックスのOS開発やサポートを担う、技術部の精鋭陣が交代で担当します。

ミラクル関連リンク

採用情報

サイト検索

2008年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

« ミラクルフットサル | メイン | Linuxエンジニア≒はてなユーザ? »

vim: 見えない文字を見えるようにする

こんにちは、ここの blog は初登場で両刀使いの さとうふみやす です。 両刀と言ってもエディタの話で、vi, Emacs の事です。 皆さんはどちらがお好みですか? 私はテキストの編集は vi (vim)、 メーラーと辞書索き (全然エディタ用途じゃないですが) は Emacs (XEmacs + Wanderlust + lookup) と使いわけています。

今回のお題は vim で見えない文字を見えるようにする としました。 ここでの 見えない文字 とは、スペースやタブ文字のことです。 スペース文字といえば ASCII のスペース (U+0020) やいわゆる「全角」のスペース (U+3000) がありますが、 これらを見た目で区別できたら便利じゃありませんか? また、テキスト行の末尾に無駄なスペース文字がないか気になりませんか? この Tips は、そんな人に役立ちます。

前置きが長くなりましたが本題に入りましょう。 以下 vim 向けのお話ですが、MIRACLE LINUX V4.0 付属の vim (vim-*-6.3.046-0.40E.4.2AX) と、 Debian GNU/Linux unstable (sid) 付属の vim (vim 7.0-017+8) でのみ確認してあります。 ディストリビューションに依らず、vim 6 以降であれば問題ないと思います。

今回の Tips は、vim のシンタックスハイライティング機能 (syntax highlighting) を利用します。 シンタックスハイライティングを有効にすると、vim は表示・編集しているテキストの構造を解析し、 構文やブロックごとに色やフォントを変えて表示してくれる便利な機能です。 これを利用して全角スペースや行末尾のスペースを可視化します。

まずは、vim を起動して次のコマンドを実行してみてください。 これがエラーになるようであれば、残念ながらあなたがお使いの vim はシンタックスハイライティングに対応していません。 (見た目が) 特に変化ないようであれば問題ありません:

:syntax on

次にハイライトさせたいパターンを構文 (syntax) として定義します。 全角スペースに一致させる場合、次のようなコマンドになります。 display キーワードは画面に表示される場合だけ処理させるための指示です。 containedin=ALL キーワードはどんなコンテキストでも一致させるための指示です:

:syntax match InvisibleJISX0208Space " " display containedin=ALL

次に、定義した構文に一致するテキストをどのように表示するか (ハイライト) を定義します。 全角スペースに対し白黒端末ではアンダーラインを、色対応端末と GUI (gvim) では青で表示させるには、 次のように定義します:

:highlight InvisibleJISX0208Space term=underline ctermbg=Blue guibg=Blue

さあ、準備ができました! ASCII スペースと全角スペースを適当に入力してみてください。 うまい具合に ASCII スペースと全角スペースが見た目で区別できるようになったでしょうか?

同様に、行末のスペース文字を可視化するコマンドを紹介しましょう。 ついでにタブも可視化してみます (タブの可視化は画面がごちゃごちゃになるのでお薦めしません) :

:syntax match InvisibleTrailedSpace "[ \t]\+$" display containedin=ALL
:highlight InvisibleTrailedSpace term=underline ctermbg=Red guibg=Red
:syntax match InvisibleTab "\t" display containedin=ALL
:highlight InvisibleTab term=underline ctermbg=Cyan guibg=Cyan

以上、いまくいったでしょうか。 うまくいったなら、vim の設定ファイルに追加しておきましょう。 ~/.vimrc ファイルに次のような設定を記述します:

syntax on
syntax match InvisibleJISX0208Space " " display containedin=ALL
highlight InvisibleJISX0208Space term=underline ctermbg=Blue guibg=Blue
syntax match InvisibleTrailedSpace "[ \t]\+$" display containedin=ALL
highlight InvisibleTrailedSpace term=underline ctermbg=Red guibg=Red
syntax match InvisibleTab "\t" display containedin=ALL
highlight InvisibleTab term=underline ctermbg=Cyan guibg=Cyan

以上です…と言いたいところですが、問題が一つ。 vim はファイル種別ごとにシンタックスハイライティングの定義を切り替える機能があるのですが、 .vimrc によるシンタックスハイライティング定義よりもそちらが優先されてしまうため、 上記の設定が有効にならないことがあります。 この問題の回避に加え、 シンタックスハイライティング機能の有無のチェックと .vimrc ファイルの再読み込みに対応させると、次のような設定になります:

if has("syntax")
    syntax on
    function! ActivateInvisibleIndicator()
        syntax match InvisibleJISX0208Space " " display containedin=ALL
        highlight InvisibleJISX0208Space term=underline ctermbg=Blue guibg=Blue
        syntax match InvisibleTrailedSpace "[ \t]\+$" display containedin=ALL
        highlight InvisibleTrailedSpace term=underline ctermbg=Red guibg=Red
        syntax match InvisibleTab "\t" display containedin=ALL
        highlight InvisibleTab term=underline ctermbg=Cyan guibg=Cyan
    endf

    augroup invisible
        autocmd! invisible
        autocmd BufNew,BufRead * call ActivateInvisibleIndicator()
    augroup END
endif

申し訳ありませんがここで時間切れのため、最終版の詳細な解説は割愛させていただきます。 :help キーワード で vim のヘルプが参照できるので、 そちらを参考にしてください。

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/4447/5836001

このページへのトラックバック一覧 vim: 見えない文字を見えるようにする:

コメント

コメントを投稿

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.