ソース中に現れる組み込み関数ランキング

  • .vim/bundle 内のファイルを対象に
  • vital.vim の重複を許して
登場数 関数名
2643 len
2567 copy
2348 type
2196 get
1947 substitute
1930 map
1820 has_key
1633 printf
1585 split
1472 exists
1236 empty
1137 getline
1070 fnamemodify
1051 matchstr
1025 filter
973 join
922 string
900 add
894 has
831 line
816 range
731 expand
565 deepcopy
546 call
533 bufnr
453 globpath
429 function
420 extend
383 winnr
365 nr2char
363 keys
362 executable
359 strlen
351 isdirectory
351 char2nr
338 filereadable
332 stridx
325 index
306 escape
301 readfile
273 eval
273 col
268 getpos
260 shellescape
259 glob
238 max
237 repeat
220 sort
218 system
216 submatch
216 remove
213 bufname
204 getcwd
198 min
195 getbufvar
180 cursor
171 matchlist
165 values
162 strdisplaywidth
162 reltime
161 input
159 strpart
149 iconv
140 str2nr
137 search
136 tabpagenr
135 tolower
133 mode
132 reverse
132 items
127 fnameescape
126 match
121 resolve
110 setpos
110 insert
99 tempname
95 writefile
95 winbufnr
94 setline
87 winwidth
86 bufwinnr
80 delete
78 strftime
77 getftime
74 toupper
65 matchend
64 append
61 localtime
60 getreg
58 reltimestr
54 visualmode
54 setreg
49 mkdir
47 getwinvar
46 tr
46 finddir
45 str2float
44 searchpos
41 winheight
41 getregtype
41 feedkeys
39 buflisted
36 findfile
32 simplify
31 tabpagewinnr
31 strwidth
29 abs
26 strtrans
26 strridx
26 getchar
25 tabpagebuflist
25 float2nr
24 hasmapto
23 strchars
20 synID
20 getftype
19 virtcol
19 maparg
19 bufloaded
18 inputsave
18 inputrestore
17 getqflist
16 matchadd
16 histnr
16 floor
16 filewritable
16 bufexists
15 getbufline
15 confirm
14 synIDattr
14 getpid
13 winrestview
13 setwinvar
13 pumvisible
13 haslocaldir
12 winsaveview
12 matchdelete
12 hlID
12 getfsize
11 getcmdtype
11 count
10 synIDtrans
10 setbufvar
10 inputsecret
10 ceil
10 argv
9 uniq
9 setqflist
9 searchpair
9 rename
8 sha256
8 tagfiles
8 gettabwinvar
8 gettabvar
7 luaeval
7 histget
6 serverlist
6 log
6 indent
6 changenr
5 synstack
5 prevnonblank
5 hostname
5 hlexists
5 histdel
5 getmatches
4 winline
4 undotree
4 taglist
4 searchpairpos
4 histadd
4 getcmdline
4 foldtext
4 foldlevel
4 foldclosedend
3 winrestcmd
3 synconcealed
3 shiftwidth
3 settabwinvar
3 remote_expr
3 libcall
3 exepath
3 clearmatches
2 settabvar
2 remote_send
2 remote_foreground
2 pow
2 getloclist
2 foldclosed
1 xor
1 setloclist
1 matchaddpos
1 inputlist
1 getcmdwintype
1 complete_check
1 argc

ちなみに 1 回しか呼ばれていないものを使っているプラグインは,

関数名 プラグイン
xor clever-f
setloclist fugitive
matchaddpos easymotion
inputlist neobundle
getcmdwintype vital
complete_check neocomplete
argc neocomplete

でした.

だいぶ前に vim-operator-inserttext 作った

任意の関数の実行結果を対象のテキストの前後に挿入またはテキストを置き換えるオペレータです.*1

function! g:Hoge(motion, wise_name)
    " wise_name = 'char', 'line' or 'block'
    return "<<" . a:motion . ">>"
endfunction

" motion の前に g:Hoge({motion}, {wise_name}) の実行結果を挿入する
map <expr> ss operator#inserttext#mapexpr(function('g:Hoge'), -1)

" motion の後ろに g:Hoge({motion}, {wise_name}) の実行結果を挿入する
map <expr> ss operator#inserttext#mapexpr(function('g:Hoge'), +1)

" motion の内容を g:Hoge({motion}, {wise_name}) の実行結果に置き換える.
" blockwise の場合には最終行を実行結果で置き換える.
map <expr> ss operator#inserttext#mapexpr(function('g:Hoge'), +0)

表を書いた時に, 合計やら平均やらを計算して挿入するとか, 他言語で評価した結果におきかえるとか, なんかできそうな気がしている.

あと, operator-furround くらいまでカスタマイズできるようにしたいけど手が動かなさそう.

*1:今週 +0 の場合(テキストを置き換える)だけのオペレータを作ろうとして存在を思い出したのでメモメモ

リストに対するランダムアクセス

おしまい。

vim-operator-furround v1.0.0

開発用ブランチを master にマージしました. 使っている人ほぼいないと思いますが, 破壊的な変更が入っています。

  • 入力の終端を で判断しており, 開き括弧はどこにあっても, 複数あってもいい.
    • たとえば, hoge() で囲みたいとか.
    • たとえば, Lisp な入力をしたいとか.
    • たとえば, XML なタグを入力をしたいとか.
    • たとえば, LaTeX なタグを入力をしたいとか.
  • ファイルタイプ毎に設定が可能になった
  • レジスタ利用と input 待ちをサポート
  • hoge() で囲みたくない症候群にも対応
  • 挿入時に対象のテキストをハイライト
  • 名を変更
  • g:operator_furround_latex, g:operator_furround_xml は廃止

vim-operator-surround とは以下で挙動が異なります.

  • 入力の終端を で判断するので、必ず の入力が必要になります.
    • 括弧がない場合には自動的にデフォルトの括弧の入力されるので、たとえば hoge() で囲みたい場合は hoge だけの入力で済む
  • レジスタを利用したオペレーションをサポート. これにより複数行の surround 操作も実現可能
  • 複数の括弧を同時に入力可能
  • motion=blockwise は未サポート

vital.vim を使うときはそれなりの覚悟が必要

この記事は Vim Advent Calendar 2013 181 日目の記事になります.

vital.vim とは

vital.vim は, vim 本体にはないけどあると便利なライブラリ群です. vim-jp の有志とその愉快な仲間たちによって開発されています. vitalize 時のプラグイン名さえ重複しなければ複数のバージョンの vital.vim が存在していても問題ないような仕組みがあります.

ujihisa
とにかく一番厳しいのは既存の関数の挙動を変えるときにchangelogに書くという点だけです
(この情報が:Vitalize時に表示されるので)
changelogというよりnewsといってもいいかも
あのchangelogとvitalizeの仕組みを考案・開発した人は神です

http://lingr.com/room/vim/archives/2013/07/13#message-15897280

5/26 に usevim で紹介され, 5/27 あたりに vital.vim ブームがやってきました.

crazymaster
vital.vimgithubのTrendにのりましたね
todayとweekly

vim-jp – Lingr

http://f.st-hatena.com/images/fotolife/s/syngan/20140527/20140527214451.png

今も weekly で 9 位にいます.
http://f.st-hatena.com/images/fotolife/s/syngan/20140530/20140530213349.png

ちょっと待ってよ

暗黒美夢王は lingr で良く以下の趣旨の発言をされています.

:Vitalizeするとほとんどの場合、プラグインの互換性が壊れて修正が必要になるため、
積極的にやりたくならないのです。

vim-jp – Lingr

vital の更新はかなりリスクが高い
破壊的変更も多いし、そもそもプラグインが大量にあると時間がかかる

vim-jp – Lingr

どういうことかというと, 「複数のバージョン〜仕組み」があるために, 頻繁に非互換が発生する修正が取り込まれています. 一応、非互換が出た場合には Changes に記述することになっています. 見てもらえばわかりますが, 結構大胆です. 関数がなくなったり, モジュール名が変わったり...
たとえ Changelog 書いてあったとしても, 複数個所で使用している関数すべてを問題なく修正できる保証はありませんし, 普通は vitalize は一度しかやらなくて済むほうが平和です.しかし, vital.vim にはバグはありますし, vim の非互換 update によって, vital.vim を更新しないといけなくなることもあります.

また, Changes に書かれていないものもあります.

それから, 仕様が固まっていないものがそのことが明記されずに公開されているものがあり, vital.vim の動向を追いかけている人でないと把握できないようにもなっています.

今後取り込まれると, 非互換が発生することが確実な issueたちも.

別の問題として, 残念なことにテストが十分になされていません.
テスト自体がないものもありますし, ある場合でも自動的に行っているのは Travis-CI でデフォルトで提供される vim のみです. windows ルートや他のバージョンでのテストは現時点では行われていません.

raa0121
WindowsでVitalのテストする手順がほしいなぁ
Vimproc必須なのかな
travis-ci以外でWindowsのテストも常時叩くべきかも
vim本体含め

vim-jp – Lingr

ということで, vital.vim を利用する場合には, ただ恩恵が得られるだけではないことを理解しておく必要があると思います.

そうはいっても

vital.vim は便利です.
issues に報告しさえすれば問題点は修正してもらえるはずですし, こんなんほしいなーとかつぶやくと対応してくれる人がいるかもしれませんし, 積極的に使うべきだと思います. 多くのものは基本的な機能の提供なので vim script のお勉強にも便利です.
また使われることによってふわふわな部分の仕様も確定していくのだと思います.

それでも気になってしまう人は, ライセンス上ソースコードをコピーして利用することが許されているので, 使用する部分が少ない場合にはコピーするのも一つの手段だと思います.

追記1

lingr ログをいくつか追加しました.

filetype=tex + set spell の挙動

こんなファイルを作ります.

hoge
\section{hoge}
hoge
% vim:set spell ft=tex:

すると, こうなります.
http://f.st-hatena.com/images/fotolife/s/syngan/20140528/20140528085454.png

\section{} などが見つかるまでは spell check が動いてくれません. \input などでファイルを分割する場合には注意