2012/10/19


Jekyllを使っていていつも思うのが、githubの様な ```perl
use strict;
use warnings;

warn "foo";
```
という Triple Backtick が使えない事なんだけど、まぁこれは Markdown の仕様に準拠していない拡張なのでしょうがないと思いつつも、最近 github に慣れすぎていてイライラしてきた。Jekyll Plugin では Markdown の変換をプラグインとして書くことは出来ないので、Jekyll::MarkdownConverter の convert メソッドを上書きしてやるプラグイン(と呼べるかどうかはあるが)を書いた。
module Jekyll
  class MarkdownConverter
    alias :old_convert :convert
  
    def convert(content)
      content.gsub!(/(?:^|\n)```(\w*)\n(.*?\n)```\n/mdo |text|
        cls = $1.empty? ? "prettyprint" : "prettyprint lang-#{$1}"
        "\n<pre class=\"#{cls}\"><code>#{CGI.escapeHTML($2)}</code></pre>"
      end
      old_convert(content)
    end
  end
end
これを _plugins/triple-backtick.rb として入れておけば、Google Code Prettify が検知できるクラス名を付けてコード出力してくれ、みんな大好き ``` が使える様になって幸せになれる。
ちなみにこの方式を使って、maruku や redcloth で出力させたい場合はLiquidのコンバータまでさかのぼって上書きしないといけなくなるので諦めた。
Posted at by




pythonの補完は、vimが標準で配布している物で事足りるかなーとか思ってたけど浅墓すぎた。
今日見つけた jedi-vim は良い。
davidhalter/jedi-vim - GitHub

Using the jedi autocompletion library for VIM.

https://github.com/davidhalter/jedi-vim
何が良いって精度が良い。そして標準配布の pythoncomplete がモジュールとそのモジュール内関数しか補完出来ないのに比べ、jedi は評価値を補完出来る。
そしてスゴイのが構文を仮実行しているのではなく、パースしている点。jedi というモジュールを使って、構文解析している。

davidhalter/jedi - GitHub

Awesome autocompletion library for python. It works.

https://github.com/davidhalter/jedi
なので例えば import time

class Foo():
  global time
  asdf = time
  
def asdfy():
  with open("foo.log""w"as f:
    f.write("fooooo")
  return Foo

xorz = getattr(asdfy()(), 'asdf')
xorz.
こんなコードを補完してもゴミファイルが出来たりしない。そして vim script で頑張る pythoncomplete に比べて速い!
上のコードから
さらに関数のヒントまで表示される。
ただ1点だけハマりポイントがあって、この ftplugin はオフィシャルの pythoncomplete とバッティングし得る。先に jedi.vim が読まれる場合、後の pythoncomplete.vim を読ませない為に autocmd FileType python let b:did_ftplugin = 1
この様に b:did_ftplugin を設定してやる必要があった(これは後でpull-req送るかも)。また quickrun のキーアサイン <c-r> ともバッティングするので最終的には jedi の為に以下の設定をした。
let g:jedi#auto_initialization = 1
let g:jedi#rename_command = "<leader>R"
let g:jedi#popup_on_dot = 1
autocmd FileType python let b:did_ftplugin = 1
このキーアサインは、関数名やクラス名をリネームする物で、名前変更後にインサートモードを抜けるとファイル内のシンボルが置き換えられる。調べてないが、構文解析しているので単なる置換ではなく正しいリネーム結果になるはず。試しに上記のコードで文字列内に xorz を埋め込み、xorz をリネームしてみたが文字列内の xorz が置き換わる事は無かった。すばらしい。
その他、pydoc が見れる機能やジャンプ機能もある。しばらく使ってみようと思う。

Posted at by



2012/10/16


しばらく zencoding-vim の emmet ブランチで開発し、落ち着いたら master にマージします。

親参照

^ で親へ移動出来る様になってます。
.header>.nav^.logo
これが <div class="header">
    <div class="nav"></div>
</div>
<div class="logo"></div>
こう展開されます。^^ で複数階層登れます。

高度なCSS補完

おそらくこれが emmet の最大の武器と思う。
まず m0.1 margin: 0.1em; に展開される。また m2 margin: 2px; に、m3p margin: 3%; に展開される。本来ならば z-index の様に px 単位で無い物には単位を付けない様にしないといけないけど、この辺は後々やってく。

ベンダープレフィックス

好き嫌いありそうな機能ですが...
通常 bdrs8 border-radius: 8px; にされるが、頭に - を付けると -bdrs8 -webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
と変換される。また、lg(top,#fff,#000) から background-image:  -webkit-gradient(top, 0 0, 0 100, from(#fff), to(#000));
background-image:  -webkit-linear-gradient(#fff, #000);
background-image:  -moz-linear-gradient(#fff, #000);
background-image:  -o-linear-gradient(#fff, #000);
background-image:  linear-gradient(#fff, #000);
に変換される。


興味ある人は emmet ブランチで人柱お願いします。
mattn/zencoding-vim ツキ GitHub
https://github.com/mattn/zencoding-vim
Posted at by