function! s:escvar(r) " ファイル名を変更 " /Users/basyura/.vim/plugin/vim-rails/plugin/rails.vim " → ~/.vim/plugin/vim-rails/plugin/rails.vim let r = fnamemodify(a:r,':~') " アルファベット、数字やアンダーバー以外の文字を置換 let r = substitute(r,'\W','\="_".char2nr(submatch(0))."_"','g') " 数字始まりを置換(?) let r = substitute(r,'^\d','_&','') return r endfunction
fnamemodify
fnamemodify({fname}, {mods}) ファイル名{fname}を{mods}にしたがって変更する。 {mods}はコマンドラインで使われるのと同様な文字列である。 :~ ファイル名をホームディレクトリについて相対的な名前に (可能ならば) 切り詰める。 ファイルがホームディレクトリの下になければ、 ファイル名は修正されない。
submatch
submatch({nr}) *submatch()* substitute の中の式でのみ使われる。 マッチしたテキストの{nr}番目の部分マッチを返す。 {nr}が0のときはマッチしたテキスト全体を返す。