let X = "ひだまり"
let _ = "スケッチ"
try
X / _ / X < また見て下さいね
catch /^Vim\%((\a\+)\)\=:E488/
echo eval(
\ substitute(
\ substitute(
\ v:exception,
\ '^.*E\(\d\+\).*:\s*\(\(.\) / \(.\).*\). <\(.*\)$',
\ '\2"\3".(\1-123)."\5"', ''), '/', '.', 'g'))
endtry
2008/07/11
意外と知られていないvimのtips(ゆの in vimscript)
Tagged as: tips, vim
Bookmarks:
2008/06/26
意外と知られていないvimのtips(vimからperlを使ってYAMLを読み込む)
こう言う時はif_pythonとかif_perlとかを使わせてもらう。運良くvimスクリプトはjsonと相性が良いのでYAMLを読み込み、JSONに変換してvimに戻してあげる。
function! LoadYAML(file)戻り値はDictionary形式になります。
perl << EOF
use YAML::Syck;
use JSON::Syck qw(Dump);
eval {
VIM::DoCommand("let ret = " . Dump(LoadFile("".VIM::Eval('a:file'))));
};
VIM::DoCommand("let v:errmsg = substitute('$@', \"\\n\", '', 'g')") if $@;
EOF
if !exists('ret')
throw v:errmsg
endif
return ret
endfunction
echo LoadYAML("config.yaml")
読み込めなかった場合はthrowしているのでvim7限定になりますがcatchしてやって下さい。
さて、if_perlですがperl510で動かなくなってました。今日パッチを作成してvim-devに送ったのですが、如何せん自信がありません(Shibuya.xsでvimmerな皆様、どうか私にお力をお貸し下さい)。
パッチは
vim72-perl510-fix.diffにあります。不具合報告等あればご連絡下さい。
Tagged as: perl, tips, vim, yaml
Bookmarks:
2008/05/26
意外と知られていないvimのtips(Google Calendarとcalendar.vimを連携させるスクリプト)
見たところ、私のソースを流用されてはいなさそうですが仕組みは似通っています。
diaryvgc - Google Code私の場合はファイルの存在や更新時刻で動作しますが、こちらはログファイルを使った全て。また私の様に「--- Google Calendar ---」という文字列で対象ファイルを絞ったり、イベント期間を設定出来たりはしません。
Synchronism Python Script between VIM Calendar diary and Google Calendar .
DiaryVGC == Diary Vim Google Calendar
http://code.google.com/p/diaryvgc/
私の場合は「--- Google Calendar ---」という文言を見付けて、それだけを対象ファイルとしていますが、こちらはログファイルを使った全て。
ただ、中国の方のようでコード内にcp936やらgb2312といったエンコーディング名がちらほら。
適当にpatch当てて、動くまでは確認しました。
Index: diaryvgc.py
===================================================================
--- diaryvgc.py (revision 4)
+++ diaryvgc.py (working copy)
@@ -257,15 +257,15 @@
if sys.platform[:3] == 'win':
try:
diaryinfo = open(tfile).read()
- info_done = unicode(diaryinfo,'cp936')
+ info_done = unicode(diaryinfo,'mbcs')
#print "=============win===UTF8=============="+tfile
except Exception,ex:
- diaryinfo = codecs.open(tfile,'r','gb2312').read()
+ diaryinfo = codecs.open(tfile,'r','mbcs').read()
info_done = diaryinfo.encode("utf-8")
#print "============win====GB2312=============="+tfile
else:
try:
- diaryinfo = codecs.open(tfile,'r','gb2312').read()
+ diaryinfo = codecs.open(tfile,'r','mbcs').read()
info_done = diaryinfo.encode("utf-8")
#print "=============notwin===GB2312=============="+tfile
except Exception,ex:
使い方は
diaryvgc.py --user your-gmail-id --pw your-pass-word --dir /path/to/vim/diaryで更新です。
追記
よくみたら場所で「China」がデフォルトになってますね。
使う人は適当に「Japan」とかに書き換えるのが良いかと...
自分が作った物が何かしらの形で流用されるってのは、うれしいですね。
Tagged as: google calendar, vim
Bookmarks:
2008/05/02
意外と知られていないvimのtips(vimを使った私的ブログの書き方)
私もしかり、このブログにおいても全てvimで編集しています。
ソースコードは上記リンクに記した通り「:TOhtml」を使い、その他はほぼ全て打ち込んでいます。ただ別のサイトにある記事やリンクを引用する場合、少し手間が発生します。例えば
<a href="http://example.com">サンプル</a>とタイプする場合、ブラウザのアドレスバーからURLを、さらにブックマーク画面を出してタイトルをコピーして上の様な記述に置き換えるとなるとキーボードだけで操作出来なかったりして少し煩わしい感じがしますね。オーサリングツールやmarkdown等で楽する事も出来ますがちょっとした更新で、しかもvimが使いたいなんて場合もありますよね。
また、ブラウザは起動していないけどURLならもう知ってるなんて場合、タイトル抜き出すのが大変なんて思っていませんか?
今日は私が使っているvimスクリプトを紹介してみます。
まずソース
let g:Anchorize_Format = '<a href="%s" class="external" target="_blank">%s</a>'これをanchorize.vimとかでpluginディレクトリに放り込むとインストール完了。
function! Anchorize_TITLE(url)
silent! split _FETCHTITLE_
silent! exec "0r!curl -s ".a:url
if executable('nkf')
if &enc == 'utf-8'
silent! %!nkf -X8
elseif &enc == 'cp932'
silent! %!nkf -Xs
endif
endif
silent! %join!
silent! %g/^\s*$/d _
silent! %s/^.\{-}<title[^>]*>\([^<]\+\)<\/title>.*/\1/i
let ret = getline('.')
silent! bw!
if exists('Anchorize_Format')
let format = Anchorize_Format
else
let format = '<a href="%s">%s</a>'
endif
return printf(format, a:url, ret)
endfunction
function! Anchorize_URL(v)
let url = input('URL:')
if len(url)
if exists('Anchorize_Format')
let format = Anchorize_Format
else
let format = '<a href="%s">%s</a>'
endif
if a:v
silent! normal! gvs
let word = getreg('"')
exec "normal! a".printf(format, url, word)
else
let word = expand('<cword>')
exec "normal! ciw".printf(format, url, word)
endif
endif
endfunction
nnoremap <leader>,u :call Anchorize_URL(0)<cr>
vnoremap <leader>,u :<c-w>call Anchorize_URL(1)<cr>
vnoremap <leader>,U s<c-r>=Anchorize_TITLE(getreg('"'))<cr><esc>
使い方は、まず
今日もGoogleで検索の「Google」という部分を「http://www.google.co.jp/」へのリンクにしたい場合には「Google」の部分までカーソルを移動して
<leader>,u「<leader>」は何も設定していなければ「¥」になっているかと思います。
とタイプすると
URL:というプロンプトが出るのでここに
URL:http://www.google.co.jp/とタイプしてENTERを押すと
今日も<a href="http://www.google.co.jp/">Google</a>で検索と変換されます。また空白を含んだ、例えば「Google Search」の様な場合「Google Search」をビジュアル選択して「<leader>,u」とすれば同じ動作になります。
さらに例えば
今日もhttp://b.hatena.ne.jp/でホットエントリというテキストのURL部分をビジュアル選択し、今度は
<leader>,U「U」は大文字
とタイプすると
今日も<a href="http://b.hatena.ne.jp/">はてなブックマーク - ソーシャルブックマーク</a>でホットエントリと変換してくれます。
急いでネタ記事をアップしたいvimmerには重宝するのではないかと思います。なお、動作にはnkfというフィルタコマンドが必要です。Windowsであれば「nkf win32」あたりで検索すればヒットするかと思います。ちなみに、vimrc等でAnchorize_Formatという変数を
let g:Anchorize_Format = '<a href="%s" class="external" target="_blank">%s</a>'等といった感じに編集する事も出来るので、class属性を常に付けたい人にも使えるかと思います。
元々公開するつもりも無かったスクリプトなので、拡張性ありませんがよろしければどうぞ。
Tagged as: tips, vim
Bookmarks:
2008/03/31
意外と知られていないvimのtips(vimスクリプトを難読化)
Vim script line continuation? - vim_dev | Google グループ検証コードWell, it seems the new line continuation can be placed weirdly, which will make the vim script syntax file even messy when considering the line continuation. Any comments?
e
\c
\h
\o
\ "
\そ
\れ
\P
\l
\a
\!"
それPla!
Tagged as: tips, vim
Bookmarks:
2008/03/24
意外と知られていないvimのtips(vimスクリプトでリバーシ)
Tagged as: tips, vim, vimscript
Bookmarks:
2008/03/17
意外と知られていないvimのtips(vimで__DATA__トークン)
スクリプトは
" DO NOT EDITこんな感じで使う側はこんな感じ
scriptencoding utf-8
let s:self = expand("<sfile>")
com! UseDataToken exe join(map(remove(readfile(s:self),5,8),"strpart(v:val,1)"),"|")
"__DATA__
"silent! unlet datatoken
"let datatoken=readfile(expand("<sfile>"))
"cal remove(datatoken,0,search("^\"__DATA__$")-1)
"cal map(datatoken,"strpart(v:val,1)")
"source datatoken.vimperlの様にファイルハンドルでないのが気持ち悪いか。
UseDataToken
silent! unlet d
let d = eval(join(datatoken))
echo d.author
echo d.version
echo d.date
"__DATA__
"{
"'author': 'mattn <mattn.jp@gmail.com>',
"'version': '0.001',
"'date': 'Mon, 17 Mar 2008'
"}
追記
タイトル変だったので直した
Tagged as: tips, vim
Bookmarks:





![Validate my RSS feed [Valid RSS]](http://mattn.kaoriya.net/images/valid-rss.png)

