Fri, 28 Aug 2009
Vim
使用しているVim
MacVim は以前使って「こりゃだめだ…」ということだったので、 MacPorts-JP の Vim を使っていた。
なんとなくスナップショットを使ったら、タブの見栄えはかっこいいし、 MacPorts-JP の Vim で気になっていた、日本語入力の時の文字のずれもない。
なんで「こりゃだめだ…」と思ったのか思い出せない…
脳が悪いんだなぁw
ってことで今は MacVim の スナップショット43 を使用。
MacPortsWiki-JP で配布されている PrivatePortfile を使ってコンパイル…
してくれてるものを使用w
ありがたい。
Mac OS X 10.4/10.5用 vim7.1.293 universalバイナリ の Carbon版を使用。
設定
OSをLeopardにしてVimの設定も見直した。
vimrc (Leopard)
" vimrc
" 2009年 3月 5日 木曜日 01時22分59秒 JST 作成
" vi互換をオフにする
set nocompatible
"---------------------------------------------------------------------------
" 文字コード
"---------------------------------------------------------------------------
" Vimがファイルを開く時
"
" fileencodings に指定された文字コードから
" encoding で指定した文字コードへの変換を試みる
" 変換に成功:変換に成功した文字コードでファイルが開かれ
" fileencoding には変換に成功した文字コードがセットされる
" 変換に失敗:encodingに指定された文字コードでファイルが開かれ
" fileencoding の値は空になる
" ex:
" 設定
" encoding=utf-8
" fileencodings=ucs-bom,iso-2022-jp,cp932,euc-jp
"
" Vim が cp932 (SJIS) のファイルを開く時
" ucs-bom → utf-8
" iso-2022-jp → utf-8
" cp932 → utf-8
" と変換を試みていく
" cp932 → utf-8 で変換に成功
" fileencoding に cp932 をセットしてファイルを開く
"
" Vim が encoding と同じ utf-8 のファイルを開く時
" ucs-bom から euc-jp までの変換は全て失敗するので
" utf-8 でファイルを開き fileencoding の値は空になる
"
" 参考
" ずんWiki
" www.kawaz.jp/pukiwiki/?vim#cb691f26
" KaoriYa
" www.kaoriya.net/
" Peace Pipe
" peace-pipe.blogspot.com/2006/04/mac-6-vim-mac.html
set encoding=utf-8
" 文字コードの自動認識
if &encoding !=# 'utf-8'
set encoding=japan
set fileencoding=japan
endif
if has('iconv')
let s:enc_euc = 'euc-jp'
let s:enc_jis = 'iso-2022-jp'
" iconvがeucJP-msに対応しているかをチェック
if iconv("¥x87¥x64¥x87¥x6a", 'cp932', 'eucjp-ms') ==# "¥xad¥xc5¥xad¥xcb"
let s:enc_euc = 'eucjp-ms'
let s:enc_jis = 'iso-2022-jp-3'
" iconvがJISX0213に対応しているかをチェック
elseif iconv("¥x87¥x64¥x87¥x6a", 'cp932', 'euc-jisx0213') ==# "¥xad¥xc5¥xad¥xcb"
let s:enc_euc = 'euc-jisx0213'
let s:enc_jis = 'iso-2022-jp-3'
endif
" fileencodingsを構築
if &encoding ==# 'utf-8'
let s:fileencodings_default = &fileencodings
let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
let &fileencodings = &fileencodings .','. s:fileencodings_default
unlet s:fileencodings_default
else
let &fileencodings = &fileencodings .','. s:enc_jis
set fileencodings+=utf-8,ucs-2le,ucs-2
if &encoding =~# '^¥(euc-jp¥|euc-jisx0213¥|eucjp-ms¥)$'
set fileencodings+=cp932
set fileencodings-=euc-jp
set fileencodings-=euc-jisx0213
set fileencodings-=eucjp-ms
let &encoding = s:enc_euc
let &fileencoding = s:enc_euc
else
let &fileencodings = &fileencodings .','. s:enc_euc
endif
endif
" 定数を処分
unlet s:enc_euc
unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
function! AU_ReCheck_FENC()
if &fileencoding =~# 'iso-2022-jp' && search("[^¥x01-¥x7e]", 'n') == 0
let &fileencoding=&encoding
endif
endfunction
autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
set ambiwidth=double
endif
"---------------------------------------------------------------------------
" 検索
"---------------------------------------------------------------------------
"
" 検索時に大文字小文字を無視 (noignorecase:無視しない)
set ignorecase
" 大文字小文字の両方が含まれている場合は大文字小文字を区別
set smartcase
" 検索文字列をハイライトする
set hlsearch
" インクリメンタルサーチを行う
set incsearch
" 検索時にファイルの最後まで行ったら最初に戻る (nowrapscan:戻らない)
set wrapscan
" Migemo
" g/ g? でmigemo検索
if has('migemo')
set migemo
endif
"---------------------------------------------------------------------------
" 編集
"---------------------------------------------------------------------------
"
" タブの画面上での幅
set tabstop=4
" Vimによって自動的に挿入されるインデント (autoindentやcindent) の画面上での幅
set shiftwidth=4
" タブキーを押した時に挿入される空白の幅
" softtabstop が 0 以外の時: tabstop=4 でも softtabstop の分だけ挿入される
" softtabstop が 0 の時: tabstop の分だけ挿入される
set softtabstop=0
" タブをスペースに展開しない (expandtab:展開する)
set noexpandtab
"set expandtab
" 自動的にインデントする (noautoindent:インデントしない)
" 挿入されたインデントを削除するには CTRL-D
" コメント文字を削除するには CTRL-W
set autoindent
" C言語のインデントを行う
"set cindent
" バックスペースでインデントや改行を削除できるようにする
set backspace=2
" 括弧入力時に対応する括弧を表示 (noshowmatch:表示しない)
set showmatch
" 対応する括弧にカーソルをジャンプさせない
let loaded_matchparen = 1
" コマンドライン補完をシェルのように (デフォルト:full)
"set wildmode=list:longest,full
" コマンドライン補完するときに強化されたものを使う(参照 :help wildmenu)
set wildmenu
" テキスト挿入中の自動折り返しを日本語に対応させる
set formatoptions+=mM
" バックアップファイルを作成しない
set nobackup
" バッファを切り替えてもundoできるようにする
set hidden
"---------------------------------------------------------------------------
" 表示(非GUI固有)
"---------------------------------------------------------------------------
"
" シンタックスをオンにする
syntax on
" 行番号を非表示 (number:表示)
set nonumber
" ルーラーを表示 (noruler:非表示)
set ruler
" タブや改行を表示しない (list:表示)
set nolist
" どの文字でタブや改行を表示するかを設定
set listchars=tab:>-,extends:<,trail:-,eol:<
" 長い行を折り返して表示 (nowrap:折り返さない)
set wrap
" 常にステータス行を表示 (詳細は:he laststatus)
set laststatus=2
" コマンドラインの高さ
set cmdheight=1
" コマンドをステータス行に表示
set showcmd
" タイトルを表示
set title
" カーソルの上または下に表示する行数
" 画面より大きな値を指定すればカーソルは常に中央になる
set scrolloff=5
" ステータスラインに文字コードなどを表示する
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
" エラー音のかわりにヴィジュアルベル(画面フラッシュ)
set vb
" ヴィジュアルベル(画面フラッシュ)の値を空に
set t_vb=
"---------------------------------------------------------------------------
" その他
"---------------------------------------------------------------------------
"
" コマンドのヒストリ(コロンコマンド)
set history=1000
" ファイルタイプを検出して、タイプ毎のプラグイン、インデントを有効にする
filetype plugin indent on
"---------------------------------------------------------------------------
" MAP
"---------------------------------------------------------------------------
"
" 検索結果が画面中央に表示されるようにする
nmap n nzz
nmap N Nzz
nmap * *zz
nmap # #zz
nmap g* g*zz
nmap g# g#zz
" コマンド入力時(exモード)のカーソル移動
cmap <C-a> <Home>
cmap <C-e> <End>
cmap <C-f> <Right>
cmap <C-b> <Left>
" 挿入モードでのカーソル移動
imap <C-a> <Home>
imap <C-e> <End>
imap <C-f> <Right>
imap <C-b> <Left>
" 検索ハイライト切り替え
map ,h :set hlsearch!<CR>
" reStructuredText のハイパーリンク作成
vmap ,a v`>a`_<ESC>`<i`<ESC>
vmap ,s v`>a: <ESC>`<i.. _<ESC>
"---------------------------------------------------------------------------
" コマンド
"---------------------------------------------------------------------------
"
" 日付挿入(どこのサイトから拾ってきたのか忘れた)
command! Date normal o<ESC>!!date<CR>==
map \date :Date<CR>
gvimrc (Leopard)
" gvimrc
" 2009年 3月 5日 木曜日 01時42分29秒 JST 作成
"---------------------------------------------------------------------------
" カラー
"---------------------------------------------------------------------------
"
"colorscheme xemacs
" buttercream を少し変更
colorscheme buttercream2
"---------------------------------------------------------------------------
" IM制御
"---------------------------------------------------------------------------
"
" IMを使用しない
set imdisable
" 入力モード移行時にIMをオンにしない
set iminsert=0
" 検索モード移行時にIMをオンにしない
set imsearch=0
" インライン入力時色設定
"hi IMLine guifg=#880088 guibg=LightGrey
"hi IMLine guifg=#ffffde guibg=Black
" ColorScheme で設定
"---------------------------------------------------------------------------
" フォント
"---------------------------------------------------------------------------
"
" BitstreamVeraSansMono
set guifont=BitstreamVeraSansMono-Roman:h12
" Osaka
"set guifont=Osaka-等幅:h12
"set guifont=Osaka-Mono:h13
" M+ と IPA の合成フォント
" mix-mplus-ipa.sourceforge.jp/
"set guifont=M+1VM+IPAG_circle_Regular:h14
"set guifont=M+1VM+IPAG_circle_Regular:h13
" アンチエイリアス
set antialias
" Apple Type Services for Unicode Imaging を使用する
if has('macatsui')
set macatsui
endif
"---------------------------------------------------------------------------
" 表示
"---------------------------------------------------------------------------
"
" 行間隔の設定
set linespace=1
" どんな時も左右のスクロールバーを表示させない
set guioptions-=r
set guioptions-=L
" ツールバーを表示しない
set guioptions-=T
" メニューアイテムを取り外し可能にしない
set guioptions-=t
"---------------------------------------------------------------------------
" ウィンドウ
"---------------------------------------------------------------------------
"
" 幅
set columns=100
" 高さ
set lines=35
"---------------------------------------------------------------------------
" マウス
"---------------------------------------------------------------------------
"
" どのモードでもマウスを使えるようにする
set mouse=a
" マウスの移動でフォーカスを自動的に切替えない (mousefocus:切替える)
set nomousefocus
" 入力時にマウスポインタを隠す (nomousehide:隠さない)
set mousehide
" ビジュアル選択(D&D他)を自動的にクリップボードへ (:help guioptions_a)
set guioptions+=a
buttercream (Leopard)
どこかの国の誰かが作成したものを改変。
名前の響きが卑猥w
ぬめっとした色設定が好き。
" Vim color file
" vim: tw=0 ts=8 sw=4
set background=light
hi clear
if exists("syntax_on")
syntax reset
endif
let colors_name = "buttercream2"
" Highlight Foreground Background Extras
hi Normal guifg=#213a58 guibg=#ffffde
hi NonText guifg=LightBlue guibg=#eee9bf gui=bold
hi Comment guifg=#2f8e99
hi Constant guifg=#7070a0
hi Statement guifg=DarkGreen gui=bold
hi identifier guifg=DarkGreen
hi preproc guifg=#408040
hi type guifg=DarkBlue
hi label guifg=#c06000
hi operator guifg=DarkGreen gui=bold
hi StorageClass guifg=#a02060 gui=bold
hi Number guifg=Blue
hi Special guifg=#aa8822
hi Cursor guifg=LightGrey guibg=#880088
hi lCursor guifg=Black guibg=Cyan
hi ErrorMsg guifg=White guibg=DarkRed
hi DiffText guibg=DarkRed gui=bold
hi Directory guifg=DarkGrey gui=underline
hi LineNr guifg=#ccaa22
hi MoreMsg guifg=SeaGreen gui=bold
hi Question guifg=DarkGreen gui=bold
hi Search guifg=Black guibg=Grey gui=bold
hi SpecialKey guifg=Blue
hi SpecialChar guifg=DarkGrey gui=bold
hi Title guifg=DarkMagent gui=underline
hi WarningMsg guifg=DarkBlue guibg=#9999cc
hi WildMenu guifg=Black guibg=Yellow gui=underline
hi Folded guifg=DarkBlue guibg=LightGrey
hi FoldColumn guifg=DarkBLue guibg=Grey
hi DiffAdd guibg=DarkBlue
hi DiffChange guibg=DarkMagenta
hi DiffDelete guifg=Blue guibg=DarkCyan gui=bold
hi Ignore guifg=grey90
hi IncSearch gui=reverse
hi ModeMsg gui=bold
hi StatusLine gui=reverse,bold
hi StatusLineNC gui=reverse
hi VertSplit gui=reverse
hi Visual guifg=LightGrey guibg=#880088 gui=reverse
hi VisualNOS gui=underline,bold
hi Todo guibg=#ccaa22 gui=bold,underline
" インライン入力時色設定
hi IMLine guifg=#ffffde guibg=Black
vimrc (旧)
filetype on
" ファイルを開くとき fileencodings に リストされている順番で 文字コードを
" 判定していく。
" 有効な文字コードが見つかると(エラーが発見されないと)、 この値が
" fileencoding にセットされる。
" すべて失敗した場合には fileencoding の値は空に 設定され encoding の値が
" 使われる。
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,euc-jp,iso-2022-jp,cp932
set fileformat=unix
set fileformats=unix,mac,dos
" <Tab> を挿入する際に スペース で置き換える。 autoindent のインデントも
" スペースに変換される。
" 本当に <Tab> を挿入したいときには CTRL-V<Tab> を使う。
set expandtab
set tabstop=4
set shiftwidth=4
" 新しい行を開始したときに、現在の行と同じ量のインデントで開始する。
" 新しい行で CTRL-D を打つと インデントは解除される。
set autoindent
set ignorecase
set smartcase
set wrapscan
set nohlsearch
set wildmenu
set wildmode=longest:full
set backspace=2
set ruler
set showcmd
set laststatus=2
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
" バッファを切り替えても undo が効くようにする。
set hidden
" エラー音の 代わりに 画面フラッシュ を使う。 そして フラッシュ はさせない。
set vb t_vb=
set nobackup
set title
" gq や コメントのときだけ テキスト整形を有効にする。 コメント入力時に
" <return> で次の行に 移ったときには コメント記号を挿入する。
" o や O で新しい行に 移った場合は コメント記号は 挿入されない。
" 日本語も対応しているが、 単語の区切りは 半角のスペースでなければ だめ。
" ただし 特定のファイルを 開くと この値が 上書きされてしまう ことがある。
" その場合は、 $HOME/vimfiles/ftplugin/after/any.vim に 設定を書くことで、
" さらに上書きが可能。
" コメント指示記号 が挿入されてしまっても、 CTRL-W でコメント記号を 消せる。
" どうも gvim では反映されない。 .gvimrc にも記述しておく。
"set textwidth=78
"set formatoptions+=r
"set formatoptions-=t
"setlocal fo-=t fo+=r
" gvim だと ここで指定した formatoptions がまったく反映されない。
" よくわからないので、デフォルトでいく。
" Vim7 になって 対応する カッコが存在すると ジャンプ するようになった。
" これを禁止するための設定。
let loaded_matchparen = 1
gvimrc (旧)
syntax on highlight Normal guibg='#FFFFF3' set vb t_vb= set guifont=M+2VM+IPAG\ circle\ 10 set columns=110 set lines=50
Script
EnhancedCommentify
名無しのVIM使いさんのサイトでも解説されている非常に使い勝手のよいプラグイン。 プラグインはあまり利用しないがこれだけは必ずいれている。 EnhancedCommentify.vim をプラグインディレクトリにいれればインストールは終了。 解凍してできるEnhancedCommentify.txtをドキュメントディレクトリにいれて、 ドキュメントの追加をすればヘルプも読める。

でコメントを(つける | はずす)。

はコメントを(つける | はずす)したあとに一行下に移動する。
プラグインのページ: EnhancedCommentify.vim
vcscommand
Subversion で PyBlosxom のエントリーなどを管理するようになって使い始めたプラグイン。 まだベータみたいだが特に不具合もなく使用できている。
解凍してできた vcscommand.vim, vcscvs.vim, vcssvn.vim をプラグインディレクトリに格納。 ドキュメントファイルをドキュメントディレクトリにいれて、追加コマンド。 このドキュメントに <Leader> というのが頻繁にでてくる。 なんのことだかわからなかったのでヘルプに聞く。
:he Leader
どうやらマップのトリガで特に指定がない場合は \(backslash) になるようだ。
vcscommand では様々なコマンドがマッピングされているので便利。
:he vcscommand-mappings
で一覧を見ることができる。
プラグインのページ: vcscommand.vim
scratch
scratchバッファを作成するプラグイン。scratchバッファはemacsにあるバッファのこと(だと思う)。 elispが評価できたり、メモなんか適当に書いたりできる微妙なバッファで一回使うとやめられない。 Vimでそれを実現するプラグインだがVimスクリプトの評価はできないのかな?よくわからない。
GVimやVimを開いたままにしておくことが多く、他の作業のちょっとしたメモをとるときに 使用している。編集途中の文書が表示されていると脅迫されているような気持ちになって どきどきするのを防ぐためでもある。
scratch関係のプラグインは Vim online にいくつか登録されており、 そのなかでも Yegappan Lakshmanan という人が作成したものを使用している。 まったく同じ名前のプラグインが存在するので油断できない。 別にこれじゃなければいけないという理由は特になく、つまりそんなプラグインであるということ。
プラグインディレクトリに格納するだけ、ドキュメントファイルはない。
:Scratch
で新規スクラッチバッファ作成。
:Sscratch
でsplitで分割してスクラッチバッファを作成。
プラグインのページ: scratch.vim
VST
Structured means Vim script recognizes some patterns and translates them into form recognizable by WWW browsers. In fact, Vim creates quasi-XML form which can be exported into HTML and LaTeX.
WWWブラウザが認識可能な状態でVimスクリプトがいくつかのパターンを認識して、 それらを翻訳する構造化された手段は形成されます。 事実上、VimはHTMLとLaTeXに輸出することができる準XMLフォームを作成します。
コンバータープラグイン。 HTML LaTeX とかで出力できる。 LaTeX は昔ちょっとやっただけなのでよく知らない。 reST で書いたものを HTML にするのに使っている。 VSTのマニュアル を読めば簡単に使える。この手のプラグインは、 何ができて何ができないかを見極める必要があるのでマニュアルは必読。
デフォルトで CSS が出力されるがこれがいらない場合。 あるいは自分の CSS を使いたい場合。
:let vst_css_default="NONE" :let vst_css_user="hoge.css"
デフォルトの出力フォーマットは HTML なので
:VST
でバッファが分割され HTML が出力される。そこで保存とか編集とか。 さくっと使える便利なやつ。
プラグインのページ: vst.vim
Tips
検索の繰り返し
//
行の特定の文字周辺に移動
以下の行について。
aaaaabaaaaabaaaa
--
カーソルが行頭。
t b
一つ目のbの前のaにカーソル移動。
--
カーソルが行末。
T b
二つ目のbの次のaにカーソル移動。
--
カーソルが行頭。
f b
一つ目のbにカーソル移動。
--
カーソルが行末。
F b
二つ目のbにカーソル移動。
バッファ番号3をsplit
:sp +b3
文字コードを変更する
:set fileencoding=utf-8
改行コードを変更する
:set fileformat=unix
バッファ一覧を表示する
:ls % ... カレントバッファ # ... 一個前のバッファ (alternate buffer)
空行の削除
:g/^$/d
すでにタブが存在するファイルのタブをスペースに変換
:set expandtab :retab
ドキュメントの追加
Vim online なんかで配布されているスクリプトに付属しているドキュメントを追加する。 指定のファイルを $HOME/.vim/doc とか $VIMRUNTIME/doc 以下に格納してVimを起動し、 以下のコマンド。
:helptags $HOME/.vim/doc or :helptags $VIMRUNTIME/doc
Memo
フォント
Bitstream Vera Fonts が好み。
MacPorts-JP で配布されている Vim で Bitstream Vera Fonts を指定すると日本語は Osaka-Mono になるっぽい。
Osaka-Monoが指定されること自体は問題ないんだけど、入力時と画面に表示されるフォントがずれる。
M+ と IPAフォントの合成フォント はベストなんだけど、これはこれでコマンドラインに「`」や「<」を入力するとカーソルがずれる。
ちとわかりづらいけど、カーソルがずれてる。
う〜ん…
ままならないなぁ
vi
さくらレンタルサーバーには Vim はインストールされておらず、 vi がインストールされている ( FreeBSD だから「あらかじめ付属している」といったほうがいいのかな?)。 この vi は vi で結構好きだったりする。 ふと、さくらの /tmp ディレクトリをみると
drwxrwxrwt 2 hoge wheel 512 2 12 11:51 vi.recover/
こんなディレクトリが作成されていた。 Vim を使っていてこんなディレクトリを 見かけたことはないし、そんな設定もしていないので、 vi が作成したディレクトリのようだ ( Vim のスワップファイル用のディレクトリみたいなもの? まあ名前をみればね :))。試しにこのディレクトリを削除した後、 vi を起動してファイルを編集すると案の定ディレクトリが作成されていた。
このままほっといてもいいんだけど、 root 直下の tmp にあるのが気持ち悪い。 リカバリーディレクトリの指定ができるはずだと、vi のマニュアルを読んでみた。
どうやらリカバリーディレクトリの指定は
set recdir=hoge
で行えるようだ。$HOME/.exrc なんかに書いておけば起動時に読み込まれる。
Vimとcrontab
EDITOR環境変数を Vim に設定しているのだが、 crontab の編集ができない。 crontab を編集するのに
$ crontab -e
と実行しているのだが、このとき一時ファイルが /tmp に作成されている。
$ l /tmp/ |grep hoge -rw------- 1 hoge users 141 2 12 12:35 crontab.xmq0QssUg0
保存終了すると、一時ファイルに書き込みはできているようなのだが、 以下のようなメッセージが表示され crontab には反映されない。
"crontab.xmq0QssUg0" 2L, 140C written crontab: temp file must be edited in place
試しに
$ EDITOR=vi crontab -e
で編集すると crontab に反映される。
なんだろうと思って調べると、 Vim の「ファイルの上書きの前にバックアップファイルを作る」オプション、 writebackup が問題らしい。 writebackup は +writebackup でコンパイルされていると デフォルトでオンになるらしい。さくらへのインストール時にそんなオプションをつけて コンパイルした記憶がないのでデフォルトで +writebackup でコンパイルされるんだろう。
$ vim --version | grep writebackup +wildignore +wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp
$HOME/.vimrc に
set nowritebackup
を設定して crontab を編集するとちゃんと反映された。
しかしこのオプションをはずしていいものかどうかの判断に迷う。 マニュアルをみると結構便利そうな機能だし、有効にしておいたほうがいいオプションだという気がする。
なんやかやと悩んだあげく、 EDITOR環境変数は vi にすることにした。それで解決する。 Debian でもデフォルトでそうなっているし。
writebackupの動きは Linux/inotify-tools で確認した。
参考URL
- Vim online : Vim Official Page。
- ずんWiki : KaWazさんのWiki。Linux とか Vim とか。
- ずんWiki内Vim関連 : ちょっとしたTIPSがとても役立つ。なんだかんだで困るとここを見る。 [J]
- ずんWiki内Vim関連全option : オプション一覧。 [J]
- VimWiki : UNIX@2chのまとめ。 [J]
- 名無しのVIM使い : スクリプトの紹介とか、MacでのVimの情報とか。 [J]
posted at: 12:29 | category: Draft/Vim | permanent link










< これだめだ…






























