Vim

Vim で :terminal の使い勝手をよくした

Vim

重い腰を上げてやっと Vim の :terminal を使ってみたんですが、いろいろと使い勝手が悪かってので魔改造しました。 いろいろと便利な設定を書こうと思ったら完全に煽り記事みたいになってしまい大変申し訳無くry。 :terminal を真面目に触ってからまだ半日…

Vim で1行がとてつもなく長い場合に描画を軽くする

Vim

例えば、JavaScript で minify されているコードは1行が途轍もなく長いです。 こういうコードを Vim で開く場合、シンタックスハイライト回りが非常に遅く、Vim 自体が重くなってしまう事があります。 'synmaxcol' を設定する そのような場合に 'synmaxcol' …

第33回 PORTもくもく会に行って LT してきた

第33回 PORTもくもく会に行ってもくもくするついでに LT してきました!! もくもく もくもく会っていうことで一応 Ruby のコードを書く予定だったんですが、結局午後からはほとんど LT のスライドを書いてました…。 いや、スライド自体は事前に用意していた…

Vim でシンタックスハイライトが突然オフになる現象の対処方法

Vim

覚書っていうか情報共有というか。 Vim の syntax が突然オフになる現象にお困りの方へ* パッチ 8.0.0647~8.0.1132 の方 → 8.0.1133 以降にアップデート* 8.0.1133 以降の方 → redrawtime の値をデフォルト値に戻してみて下さい— mattn (@mattn_jp) 2017年9…

最新版の Vim で :terminal コマンドを使えるようにする

Vim

最近何かと話題の Vim の :terminal ですが、使用する場合は最新版のソースコードからビルドする他にも configure 時に --enable-terminal を追加する必要があります。 $ ./configure --with-features=huge --enable-terminal これで :terminal コマンドが使…

unite-oldfiles つくった

Vim

最近 v:oldfiles というのが流行ってるらしいのでつくった。 [プラグイン] osyo-manga/unite-oldfiles NeoBundle "osyo-manga/unite-oldfiles" 最近は unite.vim よりも denite.nvim が主流らしいがわたしは使用していない。

Vim の map() や filter() に渡すラムダ内で v:val や v:key が使用できる

Vim

ちょっとした小ネタですが、従来、map() や filter() に渡す文字列式の中では v:val や v:key を使用することが出来ます。 echo map([1, 2, 3], "v:val + v:val") " => [2, 4, 6] echo filter({ "mami" : 1, "mado" : 2, "homu" }, 'v:key =~ ''^m''') " => …

Vim 8.0 で追加された関数 json_decode()/json_encode()

Vim

Vim 8.0 では JSON 形式のデータを扱う機能が追加されました。 [注意] Vim のヘルプを日本語翻訳してるvimdoc-jaですが、まだ最新版の Vim のヘルプに追従しておらず jsondecode()、jsonencode() と表記されていますが、正しくは json_decode() と json_enco…

Vim 8.0 で追加された定数 v:t_TYPE

Vim

Vim 8.0 では新しく type() が返す値が v:t_xxx のような定数として追加されました。 v:t_bool Value of Boolean type v:t_channel Value of Channel type v:t_dict Value of Dictionary type v:t_float Value of Float type v:t_func Value of Funcref type…

Vim の funcref() した関数を削除した時の挙動

Vim

ふと、気になったので試してみました。 [funcref() した後に :delfunction する] function! Test() return "test" endfunction let F = funcref("Test") delfunction Test echo F() " E933: 関数は削除されました: Test " E15: 無効な式です: F() まあ、これ…

Vim 8.0 で追加された関数 funcref()

Vim

Vim 8.0 で新しく funcref() という関数が追加されました。 これは function() と同じように関数参照を取得する関数になりますが、『関数が上書きされても元の関数を呼び出す』という違いがあります。 function! Test() return "Test" endfunction let Funct…

Vim 8.0 で追加された機能 closure

Vim

Vim 8.0 では関数に closure 機能が追加されました。 これは、関数外のローカル変数をキャプチャするための機能です。 function! s:init() let value = 0 " closure キーワードを追加することで関数外のローカル変数をキャプチャできる function! s:count() …

Vim 8.0 で追加された機能 タイマーを一時停止する

Vim

前回書き忘れたので追記。 timer_pause() を使用します。 " 一時停止 call timer_pause(timer_id, 1) " 再開 call timer_pause(timer_id, 0) これで一時的にタイマーを停止したり、任意のタイミングで再開する事が出来ます。

Vim 8.0 で追加された機能 タイマー

Vim

Vim 8.0 ではついに Vim script にタイマー機能が追加されました! この機能を使用することで処理をブロックしないで関数を呼び出すことが出来ます。 [基本的な使い方] タイマーは timer_start() 関数を使用して任意の関数を n 時間後に呼び出す事が出来ます…

Vim 8.0 で強化された機能 辞書関数

Vim

さて、以前の辞書関数は次のように call() と辞書を経由して呼び出す必要がありました。 let s:dict = { "value" : 0 } function! s:dict.up() let self.value += 1 return self.value endfunction let s:f = s:dict.up echo call(s:f, [], s:dict) " => 1 e…

Vim 8.0 で追加された Vim script の機能 Lambda

Vim

Vim 8.0 ではついに Vim script に Lambda が追加されました! Lambda を定義する場合は { args -> expr } という構文を使用します。 " Lambda は関数参照を返す " epxr にはその名の通り "式" のみ書くことができる let F = { a, b -> a + b } echo F(1, 2)…

Vim 8.0 で追加された新しいシンタックス

Vim

Vim 8.0 では新しく以下の言語に対応しました。 New Syntax/Indent/FTplugin files: AVR Assembler (Avra) syntax Arduino syntax Bazel syntax and indent and ftplugin Dockerfile syntax and ftplugin Eiffel ftplugin Euphoria 3 and 4 syntax Go syntax…

Vim 8.0 で追加された機能 function() 関数

Vim

Vim 8.0 では function() 関数の引数が新たに追加されました。 [引数の束縛] function() の第二引数に第一引数に渡す関数の引数を渡すことで、引数の束縛を行うことができるようになりました。 function! Plus(a, b) return a:a + a:b endfunction " 第一引…

Vim 8.0 で追加された機能 :smile

Vim

Vim 8.0 で :smile というコマンドが追加されました。 このコマンドを実行すると以下のような出力がされます。 それだけ。 [コマンドが追加された経緯] :smile コマンドは次のような経緯で追加されたらしいです。 @pink_bangbi neovim 出てきたりして空気が…

Vim 8.0 で追加された機能 EndOfBuffer ハイライトグループ

Vim

Vim 8.0 で EndOfBuffer というハイライトグループが追加されました。 これはバッファ外に表示されてる ~ の部分を制御するハイライトグループになります。 以下のようにハイライトを設定することで ~ のハイライトを無効にすることが出来ます。 highlight l…

Vim 8.0 で追加された機能 v_<C-a>/v_<C-x>

Vim

カーソル下の数字などをインクリメントする <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'

Vim

Vim 8.0 で 'breakindent' というオプションが追加されました。 これは、行を折り返しするときにインデントを考慮するようになるオプションになります。 [set nobreakindent] [set breakindent] 便利。

Vim 8.0 がリリース!!

Vim

ついに Vim 8.0 がリリースされました!!! https://groups.google.com/forum/#!topic/vim_dev/CmiGxtJ7fn4 Vim 7.0 がリリースされたのが 2006年5月になるので、約10年ぶりのメジャーアップデートとなります。 わたしは Vim 7.3 あたりから Vim を使い始め…

Vim 7.4.2304 で Timer のコールバック内で timer_stop() できるようになった

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 コマンドが追加された

Vim

Vim 7.4.2244 で :filter コマンドが追加されました。 これは :filt[er] /{pat}/ {command} という風に使用でき、{command} の出力結果を {pat} でフィルタリングして出力されます。 " oldfiles で .vim ファイルのみを出力する filter /.vim$/ oldfiles ち…

Vim でタイマーを一時停止する

Vim

気がついたら Vim 7.4.2180 で timer_pause() なるものが追加されていました。 これは、任意の Timer を一時停止たり再開したりすることが出来ます。 " 一時停止 call timer_pause(timer, 1) " 再開 call timer_pause(timer, 0) [ストップウォッチ] と、言う…

Vim script で lambda を使用する際の注意

Vim

@pink_bangbi lambda式をパースする際に、外側のスコープにアクセスしている変数が1つでもあるかチェックしています。なければキャプチャはしません。で、文字列の中まではパースしないのでそういう動作になってしまいます。— K.Takata (@k_takata) 2016年8…

Vim 7.4.2268 でインクリメンタルサーチ時に移動するキーが <C-p>/<C-n> から <C-t>/<C-g> に変更された

Vim

[関連] secret-garden.hatenablog.com Vim 7.4.2259 でインクリメンタルサーチ中にマッチ位置を起動する機能が追加されたんですが、既存のキーの挙動を破壊していたため別のキーに割り当てられました。 [Vim 7.4.2268 からの挙動] Vim 7.4.2268 では、 <C-t> で前</c-t>…

Vim 7.4.2259 でインクリメンタルサーチ中にマッチ位置を移動する機能が追加された

Vim

[追記] 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 で execute() を使うとローカル変数がキャプチャされない

Vim

さて、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…