ソース中に現れる組み込み関数ランキング
登場数 | 関数名 |
---|---|
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 |
でした.
vint
- vim script初心者に使ってもらいたい、転ばぬ先の杖「Vint」
- GitHub - Kuniwak/vint: Fast and Highly Extensible Vim script Language Lint implemented in Python.
もう, vim-vimlint はメンテしなくていい感じなのかな. かな.
だいぶ前に 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 のリストは線形リストである.
- なので, 要素へのアクセスは O(len(list)) である.
- ということは, 辞書をリストっぽくつかったほうがランダムアクセスははやい?
- 私の環境では, リスト長が 100 くらいまではリストがはやいけど, それ以上なら辞書を使うべきらしい
- vim-vimlint で node->tag が 1 から 90 まで if 文で比較する処理があったので Funcref のリストを使ったらはやくなった
- improve s:VimlLint.compile() by using a list of Funcref (#7) · syngan/vim-vimlint@15dc232 · GitHub
- 他にもいろいろやったら autoload/vimlint.vim の解析が, 以前は parse 15秒 + lint 15秒 くらいだったのが, lint 2 秒くらいになった
5秒くらいはデバッグ用の処理だった
おしまい。
vim-operator-furround v1.0.0
開発用ブランチを master にマージしました. 使っている人ほぼいないと思いますが, 破壊的な変更が入っています。
- 入力の終端を
で判断しており, 開き括弧はどこにあっても, 複数あってもいい. - ファイルタイプ毎に設定が可能になった
- レジスタ利用と input 待ちをサポート
- hoge() で囲みたくない症候群にも対応
- 挿入時に対象のテキストをハイライト
vim-operator-surround とは以下で挙動が異なります.
vital.vim を使うときはそれなりの覚悟が必要
この記事は Vim Advent Calendar 2013 181 日目の記事になります.
vital.vim とは
vital.vim は, vim 本体にはないけどあると便利なライブラリ群です. vim-jp の有志とその愉快な仲間たちによって開発されています. vitalize 時のプラグイン名さえ重複しなければ複数のバージョンの vital.vim が存在していても問題ないような仕組みがあります.
ujihisa
http://lingr.com/room/vim/archives/2013/07/13#message-15897280
とにかく一番厳しいのは既存の関数の挙動を変えるときにchangelogに書くという点だけです
(この情報が:Vitalize時に表示されるので)
changelogというよりnewsといってもいいかも
あのchangelogとvitalizeの仕組みを考案・開発した人は神です
5/26 に usevim で紹介され, 5/27 あたりに vital.vim ブームがやってきました.
crazymaster
vim-jp – Lingr
vital.vimがgithubのTrendにのりましたね
todayとweekly
今も weekly で 9 位にいます.
ちょっと待ってよ
暗黒美夢王は lingr で良く以下の趣旨の発言をされています.
:Vitalizeするとほとんどの場合、プラグインの互換性が壊れて修正が必要になるため、
vim-jp – Lingr
積極的にやりたくならないのです。
vital の更新はかなりリスクが高い
vim-jp – Lingr
破壊的変更も多いし、そもそもプラグインが大量にあると時間がかかる
どういうことかというと, 「複数のバージョン〜仕組み」があるために, 頻繁に非互換が発生する修正が取り込まれています. 一応、非互換が出た場合には Changes に記述することになっています. 見てもらえばわかりますが, 結構大胆です. 関数がなくなったり, モジュール名が変わったり...
たとえ Changelog 書いてあったとしても, 複数個所で使用している関数すべてを問題なく修正できる保証はありませんし, 普通は vitalize は一度しかやらなくて済むほうが平和です.しかし, vital.vim にはバグはありますし, vim の非互換 update によって, vital.vim を更新しないといけなくなることもあります.
- System.File: Fix for Vim 7.4.122 · vim-jp/vital.vim@8a98fc5 · GitHub (vim の非互換により発生したバグ)
- Preludeというファイルがカレントディレクトリにあると、vitalがクラッシュする · Issue #100 · vim-jp/vital.vim · GitHub (vital.vim 利用者全員に影響のあるバグ)
また, Changes に書かれていないものもあります.
- Prelude を必須モジュールから外す · Issue #140 · vim-jp/vital.vim · GitHub (Prelude モジュールを利用している人全員に影響)
- Web.HTTP で if_python 時に maxRedirect が有効にならない (pukiwiki.vim ではまった)
それから, 仕様が固まっていないものがそのことが明記されずに公開されているものがあり, vital.vim の動向を追いかけている人でないと把握できないようにもなっています.
- LasyList.take() の挙動が一致していない · Issue #93 · vim-jp/vital.vim · GitHub
- これは今後仕様が変わることが想像されますが(きっとされません :-)), ドキュメントには記述されていません.
- VitalにAssertion系のモジュールがあったほうが便利そうなので提案 by rbtnn · Pull Request #128 · vim-jp/vital.vim · GitHub
- close されていますが, どうなるのかしら.
今後取り込まれると, 非互換が発生することが確実な issueたちも.
- Web.* の関数名を snake_case に · Issue #78 · vim-jp/vital.vim · GitHub
- Arugments order of Data.List functions · Issue #94 · vim-jp/vital.vim · GitHub
別の問題として, 残念なことにテストが十分になされていません.
テスト自体がないものもありますし, ある場合でも自動的に行っているのは Travis-CI でデフォルトで提供される vim のみです. windows ルートや他のバージョンでのテストは現時点では行われていません.
raa0121
vim-jp – Lingr
WindowsでVitalのテストする手順がほしいなぁ
Vimproc必須なのかな
travis-ci以外でWindowsのテストも常時叩くべきかも
vim本体含め
ということで, vital.vim を利用する場合には, ただ恩恵が得られるだけではないことを理解しておく必要があると思います.
そうはいっても
vital.vim は便利です.
issues に報告しさえすれば問題点は修正してもらえるはずですし, こんなんほしいなーとかつぶやくと対応してくれる人がいるかもしれませんし, 積極的に使うべきだと思います. 多くのものは基本的な機能の提供なので vim script のお勉強にも便利です.
また使われることによってふわふわな部分の仕様も確定していくのだと思います.
それでも気になってしまう人は, ライセンス上ソースコードをコピーして利用することが許されているので, 使用する部分が少ない場合にはコピーするのも一つの手段だと思います.
追記1
lingr ログをいくつか追加しました.
filetype=tex + set spell の挙動
こんなファイルを作ります.
hoge \section{hoge} hoge % vim:set spell ft=tex:
\section{} などが見つかるまでは spell check が動いてくれません. \input などでファイルを分割する場合には注意