Vim
Vim 8.0 で :smile というコマンドが追加されました。 このコマンドを実行すると以下のような出力がされます。 それだけ。 [コマンドが追加された経緯] :smile コマンドは次のような経緯で追加されたらしいです。 @pink_bangbi neovim 出てきたりして空気が…
Vim 8.0 で EndOfBuffer というハイライトグループが追加されました。 これはバッファ外に表示されてる ~ の部分を制御するハイライトグループになります。 以下のようにハイライトを設定することで ~ のハイライトを無効にすることが出来ます。 highlight l…
カーソル下の数字などをインクリメントする <C-a> が Visual モードでもできるようになりました。 選択した範囲の数字に対してインクリメントをすることが出来ます。 [v_g<C-a>/v_g<C-x>] これと似た機能で v_g<C-a>/v_g<C-x> というのも追加されました。 これは 1. 1. 1. 1. というよ</c-x></c-a></c-x></c-a></c-a>…
Vim 8.0 で 'breakindent' というオプションが追加されました。 これは、行を折り返しするときにインデントを考慮するようになるオプションになります。 [set nobreakindent] [set breakindent] 便利。
ついに Vim 8.0 がリリースされました!!! https://groups.google.com/forum/#!topic/vim_dev/CmiGxtJ7fn4 Vim 7.0 がリリースされたのが 2006年5月になるので、約10年ぶりのメジャーアップデートとなります。 わたしは Vim 7.3 あたりから Vim を使い始め…
以前、『コールバック関数内で timer_stop() 出来ない』という問題があったんですが、Vim 7.4.2304 でこの問題が修正されました。 function! Test() let disp = { "value" : 0 } function! disp.call(...) echo self.value let self.value += 1 " 5回呼び出…
Vim 7.4.2244 で :filter コマンドが追加されました。 これは :filt[er] /{pat}/ {command} という風に使用でき、{command} の出力結果を {pat} でフィルタリングして出力されます。 " oldfiles で .vim ファイルのみを出力する filter /.vim$/ oldfiles ち…
気がついたら Vim 7.4.2180 で timer_pause() なるものが追加されていました。 これは、任意の Timer を一時停止たり再開したりすることが出来ます。 " 一時停止 call timer_pause(timer, 1) " 再開 call timer_pause(timer, 0) [ストップウォッチ] と、言う…
@pink_bangbi lambda式をパースする際に、外側のスコープにアクセスしている変数が1つでもあるかチェックしています。なければキャプチャはしません。で、文字列の中まではパースしないのでそういう動作になってしまいます。— K.Takata (@k_takata) 2016年8…
[関連] secret-garden.hatenablog.com Vim 7.4.2259 でインクリメンタルサーチ中にマッチ位置を起動する機能が追加されたんですが、既存のキーの挙動を破壊していたため別のキーに割り当てられました。 [Vim 7.4.2268 からの挙動] Vim 7.4.2268 では、 <C-t> で前</c-t>…
[追記] Vim 7.4.2268 で挙動が変わりました。 secret-garden.hatenablog.com Vim 7.4.2259 で 'incsearch' を有効にして検索(/)した際にマッチした単語の位置を移動する機能が実装されました。 github.com これにより <C-p> で前のマッチ <C-n> で次のマッチ にカーソ</c-n></c-p>…
さて、Vim script の lambda 内でローカル変数を使用すると自動的にキャプチャが行われます。 function! s:main() let value = 42 let F = { -> value + value } echo F() " => 84 let value = -4 echo F() " => -8 endfunction call s:main() lambda 内で e…
タイトルがすでに結論なのですが、この前追加された funcref() を使用することで、以下のような問題を回避することが出来ます。 secret-garden.hatenablog.com function! Foo() let x = 0 function! Bar() closure let x += 1 return x endfunction " return…
少し前なんですが Vim 7.4.2137 で任意の関数の Funcref を返す funcref() という組み込み関数が追加されました。 github.com これは、既存の function() と同じように使用することが出来ます。 function! s:plus(a, b) return a:a + a:b endfunction let s:…
某所で話題になったので覚書。 vim の --cmd オプションで runtimepath にプラグインのパスを設定します。 $ vim -u NORC -N --cmd "set runtimepath+=~/.vim/bundle/ctrlp.vim" ポイントは -u に NORC を渡すとこ。 最初は NONE を渡してたんですが、NONE …
今朝、vim_dev の ML に告知がありました。 Vim 8 pre-announcement - vim_dev Work on Vim 8.0 is coming close to an end. I hope version 8.0 can be released in about two weeks. 約2週間後にリリース予定らしいので予定通り進めば今月中にも Vim 8.0 …
Vim 7.4.2213 で追加された EndOfBuffer ハイライトグループを利用してバッファ外に表示されるチルダ("~")を無効にすることが出来ます。 [表示あり] [表示なし] highlight link EndOfBuffer Ignore
Vim 7.4.2213 で EndOfBuffer というハイライトグループが追加されました。 github.com これはバッファ外の "~" の部分のハイライトをハイライトするのに使用されます。 ここの部分 [設定例] EndOfBuffer は通常のハイライトグループと同じように使用できま…
OS X 10.9/10/11 7.4.2196 ついこの間リリースされたばかりなんですが、また新しいのがリリースされました。 何か不具合でもあったのかな。
patch 7.4.2170 で timer_info() 関数が追加されました。 github.com この関数は現在実行中の timer の情報を返す関数です。 echo timer_info() " => [ " { " 'callback': function('<SNR>489_timer_handler'), " 'id': 2, " 'remaining': 420, " 'repeat': -1, "</snr>…
OS X 10.9/10/11 7.4.2173 リリース リリースされました。 ちょうど Mac で最新版の Vim を使いと思っていたので助かる。
先日知ったんですが、Vim の patch 7.4.2071 で type() の戻り値の定数が追加されました。 github.com これは v:t_xxx という形で定義されています。 let value = 42 let list = [] let dict = {} let Func = function("map") " 以前のコード echo type(valu…
function! s:set_vimfiler() augroup my-filetype-vimfiler autocmd! * <buffer> autocmd CursorMoved <buffer> execute "normal \<Plug>(vimfiler_print_filename)" augroup END endfunction augroup my-vimfiler autocmd! autocmd FileType vimfiler call s:set_vimfiler() augro</plug></buffer></buffer>…
前回『Vim script の closure は使うべきではない』と言ってたんですが、次のようなコードだと結構有効的だと思います。 function! s:init(value) let value = a:value " 初期値に基づいて関数を定義する function! s:hoge() closure return value + value e…
Vim の patch 7.4.2120 において :function の引数に closure というキーワードが追加された。 これは関数内から関数外の変数を参照するための機能である。 :func-closure には次のような使い方の例が載っている。 function! Foo() let x = 0 function! Bar(…
Vim の patch 7.4.2120 で Vim script の関数に closure 機能が実装されたました。 github.com これは :function の引数に closure キーワードを追加することで、関数内から関数外の変数を参照できるような機能です。 function! s:main() let value = 0 let …
Vim の patch 7.4.2119 で Vim script の lambda に『ローカル変数をキャプチャする』機能が実装されたました。 github.com function! s:main() let value = 2 " lambda 内から外部のローカル変数が参照できる let PlusValue = { x -> x + value } echo Plus…
Vim script の lambda で可変長引数を受け取る場合は特に引数を定義する必要はなく、a: を参照すれば通常の関数と同様に取得できます。 " 通常の関数引数の a: と同じように使える " a:000 に渡された引数が保存されている let Even = { -> filter(copy(a:00…
Vim script の lambda では定義した引数以上の引数を渡してもエラーになりません。 " 過剰に引数を渡してもエラーにならない echo { a, b -> a + b }(1, 2, 3, 4) " => 3 これは次のような場合に有効です。 let Odd = { value -> value % 2 != 0 } " filter(…
[関連] github.com これを Vim script だけでどこまで出来るかやってみた [コード] let s:V = vital#of("vital") let s:S = s:V.import("Palette.Scriptnames") function! s:call_stack() try throw 'abc' catch /^abc$/ return split(matchstr(v:throwpoint…