vimのオライリー本が出るようです。
これまでに私が買ったvi/vim本は
くらいかな。
誰か翻訳してくれ。
素のviって1冊もあれば基本は網羅出来てしまうんで、vim本には基本部分(viコンパチな部分)って書かなくてもいいよ。
特にvi/vimの歴史とか、もういらんし。
2008/02/26
2008/02/18
意外と知られていないvimのtips(一人お手軽Wikiもどきメモ取り機能「howm_vim」)
実はこのサイトは昔、私専用のローカル環境に用意した非公開なウェブサイトでした。
そして、そのサイトは今と同じくblosxomというブログツールで構築されていました。
私はその頃、今の様にvimで直接HTMLを書くのではなく、emacs環境から生まれた
最近はhowm_mode.vimを使わなくなったのですが、先日howm_mode.vimを改造しておられる方を見つけ、ひっそりとウォッチしていました。
で、本日どうやら公開された様です。
始めは動きませんでしたが、少し弄った所すこぶる快適に動き出しました。
日本語での検索や、migemo/cmigemoを使った検索、空白を含んだhowm_dirディレクトリでも問題なく動作しました。
ありがとうございます。またしばらくはメモ取りとしてhowmを使ってみようかなぁ...って思いました。
で、今回修正したパッチはmatchendを使ってディレクトリを掘る部分。
matchendの第2引数は正規表現が入力可能なので、以下の様にescapeしました。
皆さんもメモ取り環境としてhowm_mode.vimを使ってみられてはどうでしょうか。
ちなみに、以前私が使っていた頃のtips。私はmigemoでなくcmigemoを使っているので
また検索で全部出て欲しい場合もあったので、「¥,A」で検索かつ<c-n>,<c-p>で移動、さらに「o」で開ける様
vimぽいmapleaderや、GNUWin32ツールなんかを組み合わせていますので、howm関連だと全体で
使い始めると、意外とやみつきになりますよ。
追記
パッチ作成者殿へのリンクが間違っていました。
そして、そのサイトは今と同じくblosxomというブログツールで構築されていました。
私はその頃、今の様にvimで直接HTMLを書くのではなく、emacs環境から生まれた
howm: 一人お手軽 Wiki もどきというメモ取り環境のvimクローン、「howm_mode.vim」を使い、その書き込みをblosxomに食わせる(拡張子をtxtでなくhowmにする)という方法で使用していました。
最近はhowm_mode.vimを使わなくなったのですが、先日howm_mode.vimを改造しておられる方を見つけ、ひっそりとウォッチしていました。
で、本日どうやら公開された様です。
48 howm-mode.vim (2-25) パッチの公開とそのあてかた試しに本体をhowm_vimのサイトから、パッチをパッチ作者殿のページから落とし当ててみました。
以前からぐずぐず言ってたパッチを公開。ついでに Windows 環境でのパッチのあてかたを書いた。
始めは動きませんでしたが、少し弄った所すこぶる快適に動き出しました。
日本語での検索や、migemo/cmigemoを使った検索、空白を含んだhowm_dirディレクトリでも問題なく動作しました。
ありがとうございます。またしばらくはメモ取りとしてhowmを使ってみようかなぁ...って思いました。
で、今回修正したパッチはmatchendを使ってディレクトリを掘る部分。
matchendの第2引数は正規表現が入力可能なので、以下の様にescapeしました。
diff -cr howm_vim.orig\plugin\howm-mode.vim howm_vim\plugin\howm-mode.vim
*** howm_vim.orig\plugin\howm-mode.vim Mon Feb 18 16:41:24 2008
--- howm_vim\plugin\howm-mode.vim Mon Feb 18 16:15:40 2008
***************
*** 440,446 ****
if editing != filepath
let howm_dir = s:HowmExpand(g:howm_dir)
! let idx = matchend(filepath, howm_dir)
if idx != -1
" 存在しないディレクトリ下のファイルを指定されたら,ディレクトリを作る
call s:MakeDirectory(substitute(strpart(filepath, idx), '[^/]*$', '', ''))
--- 440,447 ----
if editing != filepath
let howm_dir = s:HowmExpand(g:howm_dir)
! let g:hoge = howm_dir
! let idx = matchend(filepath, escape(howm_dir, ' \~'))
if idx != -1
" 存在しないディレクトリ下のファイルを指定されたら,ディレクトリを作る
call s:MakeDirectory(substitute(strpart(filepath, idx), '[^/]*$', '', ''))
注意:このパッチは、オリジナルからパッチ作者殿のパッチを当てた物からの差分です。皆さんもメモ取り環境としてhowm_mode.vimを使ってみられてはどうでしょうか。
ちなみに、以前私が使っていた頃のtips。私はmigemoでなくcmigemoを使っているので
let howm_migemoprg='cmigemo'
let howm_migemoopt=' -q -d "'.globpath(&runtimepath,'dict/migemo-dict').'" | nkf -Ew'
としています。また検索で全部出て欲しい場合もあったので、「¥,A」で検索かつ<c-n>,<c-p>で移動、さらに「o」で開ける様
nmap <silent> <leader>,A <leader>,g^=.*<cr>
autocmd BufEnter howm\ Search\ result nmap <buffer> <c-p> kp
autocmd BufEnter howm\ Search\ result nmap <buffer> <c-n> jp
autocmd BufEnter howm\ Search\ result nmap <buffer> o :exec "sp " . b:file{line('.')}<cr>
と設定しています。vimぽいmapleaderや、GNUWin32ツールなんかを組み合わせていますので、howm関連だと全体で
let g:howm_mapleader='\'
if has('win32')
let howm_grepprg='grep'
let howm_findprg='find'
let howm_html2txtcmd='c:/cygwin/bin/w3m -dump -cols 78 %s'
endif
let howm_migemoprg='cmigemo'
let howm_migemoopt=' -q -d "'.globpath(&runtimepath,'dict/migemo-dict').'" | nkf -Ew'
let howm_quotemark='> '
nmap <silent> <leader>,A <leader>,g^=.*<cr>
autocmd BufEnter howm\ Search\ result nmap <buffer> <c-p> kp
autocmd BufEnter howm\ Search\ result nmap <buffer> <c-n> jp
autocmd BufEnter howm\ Search\ result nmap <buffer> o :exec "sp " . b:file{line('.')}<cr>
こんな感じに設定しています。(私はcygwinにはパスを通さない派です)使い始めると、意外とやみつきになりますよ。
追記
パッチ作成者殿へのリンクが間違っていました。
2008/01/31
意外と知られていないvimのtips(CTRL-AやCTRL-Xで日付をインクリメント/デクリメント)
これはすごい
speeddating.vim - Use CTRL-A/X to increment dates, times, and more : vim online
なんと
- 2008-01-31 11:51:31
- I,II,III,IV,V
- 3rd,4th
等いった日付、時刻、数字表記に対して<C-A>や<C-X>で値をインクリメント/デクリメント出来る様にするという凄いスクリプト。
試しに2008-01-31 11:51:31の51の所で30分繰り上げる為に「30<C-A>」とした所、
2008-01-31 12:21:31
と時間まで動くじゃないですか!!!
スバラシス...
そのままでも素晴らしいのですが、このスクリプトの素晴らしいのは、拡張出来る所。例えば
~/.vim/after/plugin/speeddating_japanese.vim
scriptencoding utf-8
SpeedDatingFormat %Y年%m月%d日 %H時%M分%S秒
let s:japanese_number = '0123456789'
function! s:japanized_number(string,offset,increment)
let n = tr(a:string, s:japanese_number, '0123456789') + a:increment
return [tr(n, '0123456789', s:japanese_number), -1]
endfunction
function! s:function(name)
return function(substitute(a:name,'^s:',matchstr(expand('<sfile>'), '<SNR>\d\+_'),''))
endfunction
let g:speeddating_handlers += [{'regexp': '-\=\<[1234567890]\+\>', 'increment': s:function('s:japanized_number')}]
こんなファイル用意すれば、先ほどと同様に
2008年01月31日 11時51分31秒
の51の所で「30<C-A>」とすれば
2008年01月31日 12時21分31秒
となってくれるのです。
さらに↑の拡張スクリプトでは、全角数字の上で<C-A>/<C-X>するとインクリメント/デクリメント出来る様にする処理が入っていますので、「550」<C-A>を押下すると「551」とインクリメントされます。
素晴らしい。
あー、豚まん食べたくなってきた。