2008/02/26


vimのオライリー本が出るようです。

Learning the vi and Vim Editors: Text Processing at Maximum Speed and Power Learning the vi and Vim Editors: Text Processing at Maximum Speed and Power
Robbins, Arnold, Hannah, Elbert, Lamb, Linda
O'Reilly Media ペーパーバック / ¥5,759 (2008年07月29日)
 
発送可能時間:


これまでに私が買ったvi/vim本は

viデスクトップリファレンス viデスクトップリファレンス
Arnold Robbins, 日本ルーセント・テクノロジー株式会社
オライリー・ジャパン 単行本 / ¥179 (1999年06月15日)
 
発送可能時間:


vi (Linux magazine books 2) vi (Linux magazine books 2)
金光 雅夫
アスキー 単行本 / ¥923 (2000年09月01日)
 
発送可能時間:


Vi(ブイアイ) IMprovedーVim(ブイアイエム)完全バイブル Vi(ブイアイ) IMprovedーVim(ブイアイエム)完全バイブル
Steve Oualline, 高橋 則利
技術評論社 単行本 / ¥1,050 (2004年05月01日)
 
発送可能時間:


くらいかな。
誰か翻訳してくれ。

素のviって1冊もあれば基本は網羅出来てしまうんで、vim本には基本部分(viコンパチな部分)って書かなくてもいいよ。
特にvi/vimの歴史とか、もういらんし。
Posted at by



2008/02/18


実はこのサイトは昔、私専用のローカル環境に用意した非公開なウェブサイトでした。
そして、そのサイトは今と同じく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) パッチの公開とそのあてかた
以前からぐずぐず言ってたパッチを公開。ついでに Windows 環境でのパッチのあてかたを書いた。
試しに本体をhowm_vimのサイトから、パッチをパッチ作者殿のページから落とし当ててみました。

始めは動きませんでしたが、少し弄った所すこぶる快適に動き出しました。
日本語での検索や、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にはパスを通さない派です)
使い始めると、意外とやみつきになりますよ。

追記
パッチ作成者殿へのリンクが間違っていました。
Posted at by



2008/01/31


これはすごい

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」とインクリメントされます。

素晴らしい。

あー、豚まん食べたくなってきた。

Posted at by