vim - Vimの自動保存で読み込み専用や名前がない場合に警告が出ないようにする設定

Qiitaに投稿しました。

http://qiita.com/babie/items/fa1154e2979c45fa77af

短いですが、今日のノルマはこれで。

次回予告

やっと新しいMacBook Proの環境が整ったので、バリバリ更新していきたいと思います。

さて、次回ですが、

  • pdfの漫画の余白を切り取る
  • はてなブログに予約投稿がないのでツラい

このあたりを何とかしたいと思っています。

補完を便利にするプラグイン autocomplpop の代わりに neocomplcache を導入

ネオコンなるものがあるそうなので調べたら、autocomplpop を置き換える neocomplecache なる Vim スクリプトパッケージがあった。とっくに時代は塗り替えられていたらしい。

アンインストール&インストール:

$ vimana remove autocomplpop
$ vimana install neocomplcache

~/.vimrc に以下を追記:

" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1
" Use smartcase.
let g:neocomplcache_enable_smart_case = 1
" Use auto select
"let g:neocomplcache_enable_auto_select = 1
" Use camel case completion.
let g:neocomplcache_enable_camel_case_completion = 1
" Use underbar completion.
let g:neocomplcache_enable_underbar_completion = 1
" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
" Set manual completion length.
let g:neocomplcache_manual_completion_start_length = 0
" Define dictionary.
"let g:neocomplcache_dictionary_filetype_lists = {
"            \ 'default' : '',
"            \ 'vimshell' : $HOME.'/.vimshell_hist',
"            \ 'scheme' : $HOME.'/.gosh_completions', 
"            \ 'scala' : $DOTVIM.'/dict/scala.dict', 
"            \ 'ruby' : $DOTVIM.'/dict/ruby.dict'
"            \ }
"
" Define keyword.
if !exists('g:neocomplcache_keyword_patterns')
   let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
"
"ilet g:neocomplcache_snippets_dir = $HOME.'/snippets'
autocmd! FileType css setlocal omnifunc=csscomplete#CompleteCSS
autocmd! FileType eruby,html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
autocmd! FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd! FileType python setlocal omnifunc=pythoncomplete#Complete
autocmd! FileType xml setlocal omnifunc=xmlcomplete#CompleteTags

自動起動 let g:neocomplcache_enable_at_startup = 1 ぐらいで不便はないらしいが、ついでなんで色々設定してみた。

上記の設定に以下があるが、

autocmd! FileType eruby,html,markdown setlocal omnifunc=htmlcomplete#CompleteTags

これがないと、「Vim で XML/HTML の閉じタグを自動補完するようにした - LazyLoadLife」が効かないっぽい。

Ruby の end 等を自動的に補完する Vim プラグインを導入した

※ 追記したので最後まで読んでね。

Ruby の end を自動的に入力する Vim スクリプト改め autoend.vim - ursmの日記」に従い、Ruby の end を自動補完する plugin を導入した。

コードを見て分かるとおり、VimRuby 拡張を使って書いてあるために、vim-ruby パッケージが必要。私の環境は Ubuntu なのだが、vim-ruby パッケージはダミーパッケージのようで、インストールしようとすると、vim-nox, vim-gtk, vim-gnome のどれかを入れろと言われた。Vim 自体をインストールするときに vim-full パッケージが見つからないなーと思っていたが、vim-full は生まれ変わって、環境別にこの3つのどれかを入れろってことらしい。VPS なので vim-nox 一択。

変更は特にない。

ふんげー便利! id:ursm ++


……と思ったら、作者の ursm さん自身が endwise.vim に乗り換えているとのことなので、僕も乗り換えました。てへ。使い心地は変わらないのですが、Ruby 以外にも対応してるみたいです。VB とか。

$ vimana install endwise.vim

したら、どこに格納すべきか情報がないらしく、/tmp/ 以下にダウンロードされたので、手動で ~/.vim/plugin/ に移しました。

Vim で閉じ括弧を自動補完するようにした

()の閉じ括弧などを自動的に閉じる - bless {category => 'vim'}, shift - vimグループ」経由「gist: 269208 - GitHub」の設定を頂き、プログラムの入力などで便利なように、() {} [] の後ろの括弧を自動的に補完するようにした。

元々の設定は、<> も補完するようになっていたが、「Vim で XML/HTML の閉じタグを自動入力するようにした - LazyLoadLife」が効かなくなるので、<> 補完については省いた。

~/.vimrc に以下を追記:

inoremap ( ()<ESC>i
inoremap <expr> ) ClosePair(')')
inoremap { {}<ESC>i
inoremap <expr> } ClosePair('}')
inoremap [ []<ESC>i
inoremap <expr> ] ClosePair(']')
" pair close checker.
" from othree vimrc ( http://github.com/othree/rc/blob/master/osx/.vimrc )
function ClosePair(char)
    if getline('.')[col('.') - 1] == a:char
        return "\<Right>"
    else
        return a:char
    endif
endf

Vim で XML/HTML の閉じタグを自動補完するようにした

Vim-users.jp - Hack #22: XMLの閉じタグを補完する」を参考にして、HTML/XML の閉じタグを </ が入力されたときに自動的に補完するようにした。

~/.vimrc に以下を追記:

augroup MyXML
  autocmd!
  autocmd Filetype xml inoremap <buffer> </ </<C-x><C-o>
  autocmd Filetype html inoremap <buffer> </ </<C-x><C-o>
  autocmd Filetype eruby inoremap <buffer> </ </<C-x><C-o>
augroup END

Rails を使うことが多いので、eruby ファイルにも適用されるようにした。

Vimana で rails.vim を導入

なんか、Vim スクリプトの管理には、Vimana というものが便利らしいので、それを使って rails.vim をインストールする。


まず cpanm を導入:

$ sudo cpan App::cpanminus

長ぇ……入った。

次に Vimana を導入:

$ sudo cpanm Vimana

長ぇ……入った!


vimana で rails という名がつくスクリプトを検索:

$ vimana search rails
railscasts        [color scheme] Railscasts TextMate theme for Vim (GUI Only)
railstab.vim      [utility]      Retabbing hacks extracted from rails.vim
rails.vim         [utility]      Ruby on Rails: easy file navigation, enhanced syntax highlighting, and more
grails-vim        [utility]      Easy file navigation and testing of Grails projects
railscasts-theme  [color scheme] A railscasts color theme that works in 256color terminals as well as gui

ほうほう。

rails.vim を導入:

$ vimana install rails.vim

入った。

tree するとこんな感じ。

$ tree ~/.vim
.vim
├── after
├── autoload
│       └── rails.vim
├── colors
├── compiler
├── doc
│       ├── rails.txt
│       └── tags
├── ftplugin
├── indent
├── keymap
├── lang
├── plugin
│       └── rails.vim
├── print
├── record
│       └── rails.vim
├── spell
├── syntax
└── tutor

Vimana 素敵ですね!


ついでに、autocomplpop なるものも入れてみる:

$ vimana search autocomp
autocomplpop      [utility]      Automatically opens popup menu for completions
xul.vim           [syntax]       Support autocompletion (CTRL-XCTRL-U): balises and attributes with XUL files.
autocomp.vim      [utility]      Auto-complete VIM script tailored for those with RSI
bib-autocomp.vim  [ftplugin]     Autocompletion of BibTeX entries
findfile          [utility]      Open file quickly by using autocomplete

$ vimana install autocomplpop

Ctrl-p Ctrl-n で候補選択、Enter で決定か。いいぞ。

Rubyのエンコード指定マジックコメントを##で挿入できるようにした

Vim エディターのスクリプトの作成: 第 2 回 ユーザー定義関数 を読みながら見よう見まねで書いてみた。

ujihisa さんのコメントを受けてちょっと修正。

~/.vim/ftplugin/ruby.vim

function! MagicComment()
  return "# -*- coding: utf-8 -*-\<CR>"
endfunction

inoreabbrev <buffer> ## <C-R>=MagicComment()<CR>

挿入モードで ## を入力すると展開される。escのとこはspaceやcrでもいいみたい。
utf-8 のところを Vim の変数に置き換えればきっと汎用性があるんだろうけど知らん。
あと、新規 *.rb ファイルを開いた時に自動展開されると便利なのじゃろうがわからんちん。とか書いていたら、kumonopanyaさんがやり方を教えてくれた。

~/.vim/templates/rb.tpl を新規作成。

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

~/.vimrc に以下を追加。

autocmd BufNewFile *.rb 0r ~/.vim/templates/rb.tpl

こりゃええわ〜