Omakeの自動継続ビルドしようとしたらvimでハマった
sphinx専用エディタとかないかなーってつぶやいたらOmakeを薦められた。
世の中便利なものがあるんだねーほえーとか思いながらOmakeをビルドして
自動makeいざ尋常にって勝負したら動いてくれないわけ。
いろいろやってもだめで悩んだ挙句ファイル汚くしたんで一旦戻そうと思って
svn revert * ってやったら動いたわけですよ。意味がわからんし。
そこでいろいろ試してみることに。
まずemacs使ってやった
なんだと。。。動くだと。。。
emacsにできてvimに(ry
次にvim -u NONE hoge.rst してみる。
vimをデフォルトの状態で起動したわけです。
なんだと。。。動くだと。。。
で、犯人は/Users/yuito/.vimrc or /Users/yuito/.vim/* に決定
で、ここからが本題です。
vimのhelpから引用
'backupcopy' 'bkc' 文字列 (UnixでのViの既定値: "yes" 、それ以外: "auto")
グローバル
{Vi にはない}
ファイルの書き込みをしてバックアップが作られるとき、その方法をこのオプ
ションで指定する。このオプションはコンマで区切られた単語のリストである。主な値は次の通り:
"yes" 先にファイルのコピーを作ってバックアップにして、更新した内容は
元のファイルに上書きする
"no" 先に元のファイルをリネームしてバックアップにして、更新した内容
は新しいファイルに書き出す
"auto" どちらか適切な方を選ぶ次の値を上のどれか1つと組み合わせることができる:
"breaksymlink"は書き込み時に常にシンボリックリンクを切る。
"breakhardlink"は書き込み時に常にハードリンクを切る。
backupとwritebackupの関係
'backup' 'writebackup' 動作
off off バックアップは作られない
off on カレントファイルをバックアップし、後で消去する (既定)
on off 古いバックアップを消去し、カレントファイルをバックアッ
プする
on on 古いバックアップを消去し、カレントファイルをバックアッ
プする
簡単にいうとbackupを作成するときは元ファイルが更新されときと
元ファイルをバックアップにして新しいファイルに更新が書き出されるときがある。
しかし、こいつに関係しそうなオプションが沢山あってわけわかめなので
3つのオプションの組み合わせでどんな挙動をするのかの検証をしてみた。
基本的にはbackupはとらないので
set nobackup
は設定しておきます
- その1
set writebackup set backupcopy=auto
*** omake error: File OMakefile: line 18, characters 1-36 rule failed to build target: source/index.rst
対象ファイルがなくなったって言われる
- その2
set writebackup set backupcopy=yes
問題なし
- その3
set writebackup set backupcopy=no
問題なし
- その4
set nowritebackup set backupcopy=auto or yes or no
:quitのタイミングでbuildが走る
とりあえずbackupcopy=autoはやめましょうということで。
vimでpep8を実行
最近python書く機会が多くなったので、自動でやってほしいよねと。
探したらこれが見つかった
https://github.com/nvie/vim-pep8
感謝しながらダウンロードしてきて.vimに展開
vundleの人は
" .vimrc Bundle 'git://github.com/nvie/vim-pep8.git' " :BundleInstall 実行
保存したときに実行するように設定
autocmd FileType python call s:python_settings() function! s:python_settings() autocmd BufWritePost <buffer> call Pep8() endfunction
quickfixに結果が出力されます
neocomplcacheをインストールしてみた
作者の方がneocomplcache.vimはそれなりに複雑なプラギンだしインストールしても
たいへんだよってなことを言っていた。
けどすごい便利なので使えないのももったいない気がする。
とりあえずインストールまでを説明してみようと思った。
インストール
http://github.com/Shougo/neocomplcache/downloads
から最新をダウンロードする。(現状最新はver.5.1)
zip or tarを解凍するとこんな感じの構成になっている。
それぞれのフォルダが何なのか知りたい人はここ http://vim-users.jp/2009/06/hack34/
autoload doc indent plugin presen syntaxというフォルダがあると思います。
このフォルダをvimのフォルダにコピーします。
ただし、presenはいりません。
OSX, linux系をお使いの方は~/.vimに移動します。
windowsをお使いの方は vimのインストールフォルダ/runtime/に移動します。
[OSX]
[windows]
移動したらダウンロードしてきたneocomplcacheの中身をコピーします。
これでインストール完了です。
neocomplcacheを動かしてみましょう
本来は:helpとか:helptagsとか使うのですが、わからない人もいると思うので直接いっちゃいます。
先ほどneocomplcacheをインストールしたフォルダ(.vim とか runtime とか)に移動します。
docというフォルダがあると思うのでさらにその中に移動します。
neocomplcache.txtというファイルがあるので開きます。
620行目あたりになんとサンプルの設定が書いてあるではないですか!
サンプルをコピーします。
vimrcファイルに貼り付けます。
貼り付け時に勝手にインデントとかうぜぇ〜〜〜ってひとは:set pasteしてください。
保存していったんvimを終了します。
vimを機動します。
なんとneocomplcacheが動きます。
ご丁寧にmapまで書いていただいております。
tabで補完できるぜ!いぇいw
各設定が何をやってるかわからないとか、こんな設定ないの?とか思った方は
先ほどのdocフォルダにあるneocomplcache.jaxファイルを開いてみましょう。
詳しい説明が日本語で書かれています。まず読んでみましょう。
たのしい補完ライフを送ってください!
vimで縦にlineを引く
vim7.3にして
set colorcolumn=80
次は色を変えたい!
hi ColorColumn guibg=#444444
快適
MacVimを広く使いたいので邪魔なモノを消す設定など
"透明度を指定 set transparency=20 "ツールバーなし set guioptions-=T "メニューバーなし set guioptions-=m "右スクロールバーなし set guioptions-=r set guioptions-=R "左スクロールバーなし set guioptions-=l set guioptions-= "下スクロールバーなし set guioptions-=b
vimで自動補完
ずっとautocomplpopを使っていたのだが、neocomplcacheというのがあるのを知って試してみた。
クイックマッチがすごく便利!補完候補が大量にあるときとかCtrl+n叩きまくる必要がなくなったw
動作がさくさくwいらいらしなくてすむw
helpがしっかりしてるw
いろいろ設定ができてカスタムしやすいw
以上の理由でそく乗り換えました。
.vimrcに追記した設定
" vim起動時にneocomplcacheを起動するか 1:有効 2:無効(初期値) let g:NeoComplCache_EnableAtStartup = 1 " 入力に大文字が含まれている場合は、大文字・小文字を無視しない 1:有効 2:無効(初期値) let g:NeoComplCache_SmartCase = 1 " ポップアップメニューで表示される候補の数 let g:NeoComplCache_MaxList = 50 " 単語の出現頻度だけではなく、前の単語とのつながりも考慮して候補の並び替えを行うかどうか 1:有効(初期値) 0:無効 let g:NeoComplCache_PreviousKeywordCompletion = 1 " プレビューウインドウが開いているとき、追加情報を表示するかどうか 1:有効 0:無効 let g:NeoComplCache_EnableInfo = 1 " 大文字を入力したときに、それを単語の区切りとしてあいまい検索を行うかどうか 1:有効 0:無効(初期値) let g:NeoComplCache_EnableCamelCaseCompletion = 1 " _を入力したときに、それを単語の区切りとしてあいまい検索を行うかどうか 1:有効 0:無効(初期値) let g:NeoComplCache_EnableUnderbarCompletion = 1 " 補完の対象となるキーワードの最小長さ let g:NeoComplCache_MinSyntaxLength = 3 " 自動補完を中止するための連続入力時間 初期値0.0 let g:NeoComplCache_SkipInputTime = '0.2' " 手動補完時に補完を行う入力数 let g:NeoComplCache_ManualCompletionStartLength = 0 " 補完するためのキーワードパターンを記録する(まだよくわかってない) if !exists('g:NeoComplCache_KeywordPatterns') let g:NeoComplCache_KeywordPatterns = {} endif let g:NeoComplCache_KeywordPatterns['default'] = '\v\h\w*' " ユーザが定義したスニペット補完ファイルのパス let g:NeoComplCache_SnippetsDir = $HOME.'/snippets'
参考:
http://vim-users.jp/2009/07/hack-49/
追記
g:NeoComplCache_KeywordPatternsについてコメントいただいたので。
fileタイプごとの補完キーワードのパターンマッチの設定が行えるものみたい。
.vim/autload/neocomplcache.vimを見るとまんま書いてある。
このままで使えそうです。
例)let g:NeoComplCache_KeywordPatterns['python'] = '\v\h\w*%(\s*\(\)?)?'
vimrc
syntax on "------------------------------------------------------------------------------- set nocompatible "------------------------------------------------------------------------------- " ステータスライン set laststatus=2 " 常にステータスラインを表示 "set statusline=%<%F\ %r%h%w%y%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%4v(ASCII=%03.3b,HEX=%02.2B)\ %l/%L(%P)%m set statusline=[%n]%F\ \ \ \ \ \|%{(&fenc!=''?&fenc:&enc).'\|'.&ff.'\|'}%m%r%=<%l/%L> " ステータスライン "------------------------------------------------------------------------------- " 文字コード関連 " □とか○の文字があってもカーソル位置がずれないようにする if exists('&ambiwidth') set ambiwidth=double endif "----------------------------------------------------------------------------- " 基本設定 set ambiwidth=double " 文脈依存は全角 set ignorecase " 検索時に大文字小文字を無視 (noignorecase:無視しない) set smartcase " 大文字小文字の両方が含まれている場合は大文字小文字を区別 set backspace=indent,eol,start " バックスペースでなんでも消せるように set autoread " 他で書き換えられたら自動で読み直す set noswapfile " スワップファイル作らない set hidden " 編集中でも他のファイルを開けるようにする set formatoptions=lmoq " テキスト整形オプション,マルチバイト系を追加 "set whichwrap=b,s,h,l,<,>,[,] " カーソルを行頭、行末で止まらないようにする "----------------------------------------------------------------------------- " インデント set ts=4 " タブの画面上での幅 set shiftwidth=4 " シフト移動幅 set expandtab " タブをスペースに展開する "----------------------------------------------------------------------------- " 表示 set guicursor=a:blinkon0 " カーソルの点滅を行わない set ruler " ルーラーを表示 set sm " 括弧入力時に対応する括弧を表示 let loaded_matchparen = 1 "対応括弧を強調しない set list " 不可視文字表示 set listchars=tab:>.,trail:_,extends:>,precedes:<" 不可視文字の表示形式 set display=uhex " 印字不可能文字を16進数で表示 "----------------------------------------------------------------------------- " 色設定 hi NonText ctermfg=darkgray hi Folded ctermfg=blue hi SpecialKey cterm=underline ctermfg=darkgray hi Folded term=standout cterm=bold ctermfg=4 ctermbg=0 hi Pmenu cterm=bold ctermfg=4 ctermbg=7 hi PmenuSel cterm=bold ctermfg=0 ctermbg=6 hi PmenuSbar ctermfg=4 ctermbg=7 hi Search term=NONE cterm=NONE ctermfg=black ctermbg=LightGray hi Search ctermbg = 4 ctermfg = 7 hi TabLineSel term=bold cterm=bold,underline ctermfg=7 ctermbg=0 hi TabLineFill ctermfg=white ctermbg=black hi StatusLine term=NONE cterm=NONE ctermfg=black ctermbg=white hi MatchParen term=standout ctermbg=LightGrey ctermfg=Black guibg=LightGrey guifg=Black "----------------------------------------------------------------------------- "キーマップ noremap j gj noremap k gk vnoremap j gj vnoremap k gk nmap n nzz nmap N Nzz nmap * *zz nmap # #zz nmap g* g*zz nmap g# g#zz " タブを使う nnoremap <C-h> gT nnoremap <C-l> gt nnoremap <Leader>1 1gt nnoremap <Leader>2 2gt nnoremap <Leader>3 3gt nnoremap <Leader>4 4gt nnoremap <Leader>5 5gt nnoremap <Leader>6 6gt nnoremap <Leader>7 7gt nnoremap <Leader>8 8gt nnoremap <Leader>9 9gt "----------------------------------------------------------------------------- " 補完・履歴 set wildmenu " コマンド補完を強化 set wildchar=<tab> " コマンド補完を開始するキー set wildmode=list:full " リスト表示,最長マッチ set history=1000 " コマンド・検索パターンの履歴数 " <TAB>で補完 function! InsertTabWrapper() let col = col('.') - 1 if !col || getline('.')[col - 1] !~ '\k' return "\<TAB>" else return "\<C-N>" endif endfunction inoremap <tab> <c-r>=InsertTabWrapper()<cr> "----------------------------------------------------------------------------- " 検索 set wrapscan " 最後まで検索したら先頭へ戻る set ignorecase " 大文字小文字無視 set smartcase " 大文字ではじめたら大文字小文字無視しない set incsearch " インクリメンタルサーチ set hlsearch " 検索文字をハイライト " 選択した文字列を検索 vnoremap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> " 選択した文字列を置換 vnoremap /r "xy:%s/<C-R>=escape(@x, '\\/.*$^~[]')<CR>//gc<Left><Left><Left> " Escで検索ハイライトを削除 nnoremap <Esc><Esc> :<C-u>set nohlsearch<Return> nnoremap / :<C-u>set hlsearch<Return>/ nnoremap ? :<C-u>set hlsearch<Return>? nnoremap * :<C-u>set hlsearch<Return>* nnoremap # :<C-u>set hlsearch<Return># "------------------------------------------------------------------------------- " 全角スペース、末尾の半角スペース、タブを色づけする(色は俺好み、でも全角スペースを□にしたい) if has("syntax") syntax on function! ActivateInvisibleIndicator() syntax match InvisibleJISX0208Space " " display containedin=ALL highlight InvisibleJISX0208Space term=underline ctermbg=Blue guifg=#999999 gui=underline syntax match InvisibleTrailedSpace "[ ]\+$" display containedin=ALL highlight InvisibleTrailedSpace term=underline ctermbg=Red guifg=#FF5555 gui=underline syntax match InvisibleTab "\t" display containedin=ALL highlight InvisibleTab term=underline ctermbg=Cyan guibg=#555555 endf augroup invisible autocmd! invisible autocmd BufNew,BufRead * call ActivateInvisibleIndicator() augroup END endif "----------------------------------------------------------------------------- "タブ機能 nmap <Tab> :tabn<CR> nmap <C-t> :tabnew_ set showtabline=2 set tabline=%!MyTabLine() function MyTabLine() let s = '' for i in range(tabpagenr('$')) if i + 1 == tabpagenr() let s .= '%#TabLineSel#' else let s .= '%#TabLine#' endif let s .= '%' . (i+1) . 'T' let s .= ' ' . (i+1) . (1==getwinvar(i+1,'&modified')?'[+]':'') . ' %{MyTabLabel(' . (i+1) . ')} ' endfor let s .= '%#TabLineFill#%T' if tabpagenr('$') > 1 let s .= '%=%#TabLine#%999Xclose' endif return s endfunction function MyTabLabel(n) let buflist = tabpagebuflist(a:n) let winnr = tabpagewinnr(a:n) return bufname(buflist[winnr - 1]) endfunction "----------------------------------------------------------------------------- " QFixHome let howm_dir = '~/.vim/howm/' let howm_filename = '%Y/%m/%Y-%m-%d-%H%M%S.howm' let howm_fileencoding = 'utf-8' let howm_fileformat = 'unix' let mygrepprg = 'grep' let MyGrep_ShellEncoding = 'utf-8' "----------------------------------------------------------------------------- " yankring.vim let g:yankring_history_dir = "~/.vim/tmp/" nmap ,y :YRShow<CR> "----------------------------------------------------------------------------- " backspace問題用 noremap! <7f> <08> "----------------------------------------------------------------------------- " 文字コードの自動認識 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 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 "-----------------------------------------------------------------------------