├── doc ├── howm2html.jpg ├── howm2html.jax ├── howm_schedule.jax ├── qfixmru.jax ├── howm_calendar.jax ├── openuri.jax ├── qfixmemo-keymap.jax └── qfixgrep.jax ├── README.mkd ├── misc ├── holiday │ ├── Sche-Hd-0000-00-00-000000.cp932 │ └── Sche-Hd-0000-00-00-000000.utf8 ├── mrupreview.vim ├── user-func.vim ├── qfixmemo-chenv.vim ├── howm-chenv.vim └── howm-alarm.vim ├── autoload ├── mygrep_msg.vim ├── myhowm_msg.vim ├── qfixmemo_msg.vim ├── agrep.vim ├── openuri.vim ├── qfixgrep.vim └── datelib.vim ├── plugin ├── myqfix.vim ├── qfixmru.vim └── mygrep.vim ├── html ├── peachpuff.css └── howm2html.css ├── syntax ├── ezotl.vim ├── howm_schedule.vim └── qfix_memo.vim └── history.txt /doc/howm2html.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fuenor/qfixhowm/HEAD/doc/howm2html.jpg -------------------------------------------------------------------------------- /README.mkd: -------------------------------------------------------------------------------- 1 | ### QFixHowm 2 | 3 | This is a test version of QFixHowm. 4 | http://sites.google.com/site/fudist/Home/qfixdev (Japanese) 5 | 6 | -------------------------------------------------------------------------------- /misc/holiday/Sche-Hd-0000-00-00-000000.cp932: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fuenor/qfixhowm/HEAD/misc/holiday/Sche-Hd-0000-00-00-000000.cp932 -------------------------------------------------------------------------------- /autoload/mygrep_msg.vim: -------------------------------------------------------------------------------- 1 | if v:version < 700 2 | finish 3 | endif 4 | scriptencoding utf-8 5 | let g:QFixGrepHelpList = [] 6 | 7 | function! mygrep_msg#help() 8 | endfunction 9 | 10 | -------------------------------------------------------------------------------- /plugin/myqfix.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | " プレビュー等のQuickFix拡張機能が不要な場合は、.vimrcでdisable_QFixWinを1に設 4 | " 定してください。 5 | if exists('g:disable_QFixWin') && g:disable_QFixWin 6 | finish 7 | endif 8 | if exists('g:disable_MyQFix') && g:disable_MyQFix 9 | finish 10 | endif 11 | 12 | call qfixwin#init() 13 | 14 | -------------------------------------------------------------------------------- /plugin/qfixmru.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | " デフォルトではqfixmemoコマンド実行時にautoload/qfixmru.vimが読み込まれます。 4 | " qfixmruをqfixmemo専用ではなく汎用的なプラグインとして使用する場合は、.vimrc 5 | " でqfixmru_preload=1を設定して、Vim起動時からQFixMRUを実行してください。 6 | if exists('g:qfixmru_preload') && g:qfixmru_preload 7 | call qfixmru#init() 8 | endif 9 | 10 | -------------------------------------------------------------------------------- /html/peachpuff.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | /* super pre */ 4 | .Comment { color: #608080; } 5 | .Constant { color: #c00058; } 6 | .Directory { color: #0000ff; } 7 | .Error { color: #ffffff; background-color: #ff0000; font-weight: bold; } 8 | .FoldColumn { color: #000080; background-color: #cccccc; } 9 | .Folded { color: #000000; background-color: #ccc; } 10 | .Identifier { color: #008080; } 11 | .Ignore { color: #ffdab9; } 12 | .LineNr { color: #cd0000; } 13 | .lnr { color: #cd0000; } 14 | .NonText { color: #0000ff; font-weight: bold; } 15 | .Normal { color: #000000; } 16 | .PreProc { color: #cd00cd; } 17 | .Question { color: #2e8b57; font-weight: bold; } 18 | .SignColumn { color: #000080; background-color: #c0c0c0; } 19 | .Special { color: #6a5acd; } 20 | .SpecialKey { color: #0000ff; } 21 | .Statement { color: #804040; font-weight: bold; } 22 | .Title { color: #cd1076; font-weight: bold; } 23 | .Todo { color: #0000ff; background-color: #ffff00; } 24 | .Type { color: #2e8b57; font-weight: bold; } 25 | .Underlined { color: #6a5acd; text-decoration: underline; } 26 | .WarningMsg { color: #ff0000; font-weight: bold; } 27 | 28 | -------------------------------------------------------------------------------- /autoload/myhowm_msg.vim: -------------------------------------------------------------------------------- 1 | if v:version < 700 2 | finish 3 | endif 4 | scriptencoding utf-8 5 | 6 | let g:QFixHowmMenuList = [ 7 | \ '= >>> %menu%', 8 | \ '上のファイル名↑にカーソルを合わせてで、ファイル編集可能です。', 9 | \ '', 10 | \ '-------------------------------------', 11 | \ '%"q"[終了] %"i"[プレビュー] %","[menu更新(,)] %"r,"[Menu最新(r,)] %"I"[Help(H)]', 12 | \ '-------------------------------------', 13 | \ '%"."[新規(c)] %"u"[QMem(u)] %" "[日記()]', 14 | \ '%"m"[MRU(m)] %"o"[最近(l)] %"O"[最近(L)]', 15 | \ '%"a"[一覧キャッシュ表示(a)] %"ra"[全エントリ一覧(ra)] %"A"[日記一覧(A)]', 16 | \ '%"s"[固定(s)] %"S"[正規(g)] %"R"[ファイル一覧(rA)] %"rr"[ランダム(rr)]', 17 | \ '%""[予定(y)] %"t"[todo(t)] %"ry"[予定最新(ry)] %"rt"[Todo最新(rt)]', 18 | \ 'リビルド (%"rk"[キーワード(rk)] %"rR"[ランダム(rR)]) %"rN"[リネーム(rN)]', 19 | \ '-------------------------------------', 20 | \ '・デフォルトキーマップは let QFixHowm_MenuKey = 0 で無効化できます。', 21 | \ '・ボタンはカーソルを合わせてかダブルクリック、ショートカットキーで実行します。', 22 | \ ' howm://, sche:// で始まっている行でを押すと対応するファイルを開く事ができます。', 23 | \ ' また32 なら32行目に移動してからを押したのと同じ動作を行います。', 24 | \ '・menu更新とmenu最新の差はキャッシュを無効化して強制再検索するかどうかです。', 25 | \ '', 26 | \ '[予定・TODO]', 27 | \ '%reminder', 28 | \ '', 29 | \ '[最近のメモ]', 30 | \ '%recent', 31 | \ '', 32 | \ '[ランダムセレクト]', 33 | \ '%random', 34 | \ '', 35 | \ '* menuのオプション指定', 36 | \ ' "メニュー画面のプレビュー("i"でOn/Off)', 37 | \ ' let QFixHowm_MenuPreview = 1', 38 | \ ' "メニュー画面で表示する最近のメモの数', 39 | \ ' let QFixHowm_MenuRecent = 5', 40 | \ '', 41 | \ 'メニュー画面ファイルは何処にあってもリンク作成の対象になるので、Wikiスタイルリンクなどを定義しておくと便利かもしれません。', 42 | \ 'その他は普通のhowmファイルと同様の機能が使用可能です。', 43 | \ ''] 44 | 45 | let g:QFixHowmHelpList = [] 46 | function! myhowm_msg#MenuInit() 47 | endfunction 48 | 49 | function! myhowm_msg#HelpInit() 50 | endfunction 51 | 52 | -------------------------------------------------------------------------------- /syntax/ezotl.vim: -------------------------------------------------------------------------------- 1 | " vim syntax file 2 | " 3 | " Language: eazy outline 4 | " Maintainer: fuenor@gmail.com 5 | " Last Modified: 2011-11-02 22:22 6 | scriptencoding utf-8 7 | 8 | hi def link ezotlBullet Type 9 | hi def link ezotlListBullet Type 10 | hi def link ezotlList Constant 11 | hi def link ezotlComment Comment 12 | hi def link ezotlWarningMsg WarningMsg 13 | hi def link ezotlTitle Identifier 14 | 15 | hi def link ezotlTab0 Normal 16 | hi def link ezotlTab1 Special 17 | hi def link ezotlTab2 Statement 18 | hi def link ezotlTab3 Type 19 | hi def link ezotlTab4 PreProc 20 | 21 | if exists("+conceallevel") 22 | syntax conceal on 23 | setlocal conceallevel=3 24 | endif 25 | syn match ezotlBullet /^\t*\zs[.*・]\ze/ contained 26 | if exists("+conceallevel") 27 | syntax conceal off 28 | endif 29 | 30 | syn match ezotlTitle /^\s*[.*・].*/ contains=ezotlBullet 31 | syn match ezotlList /^\s*[-+].*/ contains=ezotlListBullet 32 | syn match ezotlListBullet /^\s*[-+]\+/ contained 33 | syn match ezotlComment /^\s*[#].*/ 34 | syn match ezotlWarningMsg /!!!/ 35 | " syn region ezotlWarningMsg start=+!!!+ end=+!!!+ end=+$+ keepend 36 | 37 | syn match ezotlTab1 /^\t\{1}[^\t].*/ contains=ezotlBullet,ezotlList,ezotlComment,ezotlWarningMsg,ezotlTitle,qfixmemoKeyword,actionlockKeyword 38 | syn match ezotlTab2 /^\t\{2}[^\t].*/ contains=ezotlBullet,ezotlList,ezotlComment,ezotlWarningMsg,ezotlTitle,qfixmemoKeyword,actionlockKeyword 39 | syn match ezotlTab3 /^\t\{3}[^\t].*/ contains=ezotlBullet,ezotlList,ezotlComment,ezotlWarningMsg,ezotlTitle,qfixmemoKeyword,actionlockKeyword 40 | syn match ezotlTab4 /^\t\{4}[^\t].*/ contains=ezotlBullet,ezotlList,ezotlComment,ezotlWarningMsg,ezotlTitle,qfixmemoKeyword,actionlockKeyword 41 | 42 | -------------------------------------------------------------------------------- /misc/holiday/Sche-Hd-0000-00-00-000000.utf8: -------------------------------------------------------------------------------- 1 | [0000-00-00]@0 Sunday=日曜日 2 | [1973-00-00]@0 振替休日=日曜日 3 | [0001-01-07]@@(1*Sun)0 日曜日 4 | [0001-01-07]@@(2*Sun)0 日曜日 5 | [0001-01-07]@@(3*Sun)0 日曜日 6 | [0001-01-07]@@(4*Sun)0 日曜日 7 | [0001-01-07]@@(5*Sun)0 日曜日 8 | 9 | [1948-00-00]@0 春分の日 10 | [1948-00-00]@0 秋分の日 11 | 12 | [1948-01-01]@@@0 元日 13 | [1948-01-15]@@@0 成人の日 &[1999-01-15]. 14 | [2000-01-11]@@@(2*Mon)0 成人の日 15 | [1948-02-11]@@@0 建国記念の日 16 | [2020-02-23]@@@0 天皇誕生日 17 | [1989-02-24]@0 大喪の礼 18 | [1948-04-29]@@@0 天皇誕生日 &[1988-04-29]. 19 | [1989-04-29]@@@0 みどりの日 &[2006-04-29]. 20 | [2007-04-29]@@@0 昭和の日 21 | [2019-05-01]@0 天皇の即位の日 22 | [1948-05-03]@@@0 憲法記念日 23 | [2007-05-04]@@@0 みどりの日 24 | [1948-05-05]@@@0 こどもの日 25 | [1995-07-20]@@@0 海の日 &[2002-07-20]. 26 | [2003-07-19]@@@(3*Mon)0 海の日 &[2019-07-20]. 27 | [2022-07-19]@@@(3*Mon)0 海の日 28 | [2020-07-23]@0 海の日 29 | [2021-07-22]@0 海の日 30 | [2020-07-24]@0 スポーツの日 31 | [2021-07-23]@0 スポーツの日 32 | [2016-08-11]@@@0 山の日 &[2019-08-11]. 33 | [2020-08-10]@0 山の日 34 | [2021-08-08]@@@0 山の日 &[2021-08-08]. 35 | [2022-08-11]@@@0 山の日 36 | [1948-09-15]@@@0 敬老の日 &[2002-09-15]. 37 | [2003-09-20]@@@(3*Mon)0 敬老の日 38 | [1948-10-10]@@@0 体育の日 &[1999-10-10]. 39 | [2000-10-11]@@@(2*Mon)0 体育の日 &[2019-10-14]. 40 | [2022-10-11]@@@(2*Mon)0 スポーツの日 41 | [2019-10-22]@0 即位礼正殿の儀の行われる日 42 | [1948-11-03]@@@0 文化の日 43 | [1948-11-23]@@@0 勤労感謝の日 44 | [1989-12-23]@@@0 天皇誕生日 &[2018-12-23]. 45 | 46 | [1988-05-04]@0 国民の休日 47 | [1989-05-04]@0 国民の休日 48 | [1990-05-04]@0 国民の休日 49 | [1991-05-04]@0 国民の休日 50 | [1993-05-04]@0 国民の休日 51 | [1994-05-04]@0 国民の休日 52 | [1995-05-04]@0 国民の休日 53 | [1996-05-04]@0 国民の休日 54 | [1999-05-04]@0 国民の休日 55 | [2000-05-04]@0 国民の休日 56 | [2001-05-04]@0 国民の休日 57 | [2002-05-04]@0 国民の休日 58 | [2004-05-04]@0 国民の休日 59 | [2005-05-04]@0 国民の休日 60 | [2006-05-04]@0 国民の休日 61 | [2009-09-22]@0 国民の休日 62 | [2015-09-22]@0 国民の休日 63 | [2019-04-30]@0 国民の休日 64 | [2019-05-02]@0 国民の休日 65 | [2026-09-22]@0 国民の休日 66 | [2032-09-21]@0 国民の休日 67 | [2037-09-22]@0 国民の休日 68 | 69 | -------------------------------------------------------------------------------- /plugin/mygrep.vim: -------------------------------------------------------------------------------- 1 | scriptencoding utf-8 2 | 3 | " qfixgrepとしての動作が不要な場合は、.vimrcでdisable_QFixGrepを1に設定してください。 4 | if exists('g:disable_QFixGrep') && g:disable_QFixGrep 5 | finish 6 | endif 7 | if exists('g:disable_MyGrep') && g:disable_MyGrep 8 | finish 9 | endif 10 | 11 | """""""""""""""""""""""""""""" 12 | " コマンドラインコマンド 13 | """""""""""""""""""""""""""""" 14 | " コマンドライン用コマンドを追加する 15 | " let g:MyGrep_Commands = 1 16 | " 以下のように.vimrcへ追加して、必要なコマンドのみ個別に有効化も可能 17 | " command! -nargs=* -bang Vimgrep call qfixgrep#QFixCmdGrep('Vimgrep', ) 18 | 19 | if exists('g:MyGrep_Commands') && g:MyGrep_Commands > 0 20 | command! -nargs=* -bang BGrep call qfixgrep#BGrep(, 0, 0) 21 | command! -nargs=* -bang Vimgrep call qfixgrep#QFixCmdGrep('Vimgrep', ) 22 | command! -nargs=* -bang VGrep call qfixgrep#QFixCmdGrep('Vimgrep', ) 23 | 24 | command! -nargs=* -bang BGrepadd call qfixgrep#BGrep(, 0, 1) 25 | command! -nargs=* -bang VGrepadd call qfixgrep#QFixCmdGrep('Vimgrepadd', ) 26 | command! -nargs=* -bang Vimgrepadd call qfixgrep#QFixCmdGrep('Vimgrepadd', ) 27 | 28 | command! -nargs=* -bang Grep call qfixgrep#QFixCmdGrep('Grep', ) 29 | command! -nargs=* -bang EGrep call qfixgrep#QFixCmdGrep('Grep', ) 30 | command! -nargs=* -bang FGrep call qfixgrep#QFixCmdGrep('FGrep', ) 31 | command! -nargs=* -bang RGrep call qfixgrep#QFixCmdGrep('RGrep', ) 32 | command! -nargs=* -bang REGrep call qfixgrep#QFixCmdGrep('RGrep', ) 33 | command! -nargs=* -bang RFGrep call qfixgrep#QFixCmdGrep('RFGrep', ) 34 | 35 | command! -nargs=* -bang Grepadd call qfixgrep#QFixCmdGrep('Grepadd', ) 36 | command! -nargs=* -bang EGrepadd call qfixgrep#QFixCmdGrep('Grepadd', ) 37 | command! -nargs=* -bang FGrepadd call qfixgrep#QFixCmdGrep('FGrepadd', ) 38 | command! -nargs=* -bang RGrepadd call qfixgrep#QFixCmdGrep('RGrepadd', ) 39 | command! -nargs=* -bang REGrepadd call qfixgrep#QFixCmdGrep('RGrepadd', ) 40 | command! -nargs=* -bang RFGrepadd call qfixgrep#QFixCmdGrep('RFGrepadd', ) 41 | endif 42 | 43 | call qfixgrep#init() 44 | 45 | -------------------------------------------------------------------------------- /autoload/qfixmemo_msg.vim: -------------------------------------------------------------------------------- 1 | if v:version < 700 2 | finish 3 | endif 4 | scriptencoding utf-8 5 | 6 | let s:qfixmemo_submenu_msg = [ 7 | \ '------------------------', 8 | \ '= サブメニュー', 9 | \ 'このバッファの変更は', 10 | \ '自動的に保存されます。', 11 | \ ' q : 終了', 12 | \ '------------------------', 13 | \ '= カレンダー', 14 | \ '< i 前月 | 次月 o > ', 15 | \ 't . 今日の日付へ', 16 | \ '(数値) 指定日の日記', 17 | \ '------------------------', 18 | \ '= アウトライン機能', 19 | \ '!!! 折り畳まれた行は !!!', 20 | \ '!!! l で開きます。 !!!', 21 | \ '*レベル', 22 | \ ' タブでインデントすると', 23 | \ ' レベルが変更されます。', 24 | \ ' レベルは4段階あります。', 25 | \ ' レベルに応じて', 26 | \ ' 異なるシンタックスで', 27 | \ ' 強調表示されます。', 28 | \ ' レベルが違う', 29 | \ ' レベルが違う', 30 | \ ' レベルが違う', 31 | \ ' レベルが違う', 32 | \ ' レベルが違う', 33 | \ ' レベルが違う', 34 | \ '*フォールディング', 35 | \ ' インデントを利用して、', 36 | \ ' 折り畳みが使用可能です。', 37 | \ ' この行で zc を', 38 | \ ' 実行してください。 ', 39 | \ ' 行が折り畳まれたら、', 40 | \ ' l で閉じられた', 41 | \ ' 折り畳みを開けます。', 42 | \ '*タイトル', 43 | \ ' 行頭が . * ・ だと', 44 | \ ' タイトル行として', 45 | \ ' .タイトル行', 46 | \ ' 強調表示されます。', 47 | \ '*ラベル', 48 | \ ' 行頭が - + だと', 49 | \ ' ラベルとして', 50 | \ ' 強調表示されます。', 51 | \ ' -りんご', 52 | \ ' +ごりら', 53 | \ ' +らっぱ', 54 | \ '*コメント', 55 | \ ' # 行頭が # だと', 56 | \ ' # コメントとして', 57 | \ ' # 強調表示されます。', 58 | \ ' # コメント行は', 59 | \ ' # 折り畳まれません。', 60 | \ '', 61 | \ '------------------------', 62 | \ '= オプション', 63 | \ '------------------------', 64 | \ '', 65 | \ '*サブメニュー', 66 | \ '# ウィンドウ幅', 67 | \ 'let SubWindow_Width = 30', 68 | \ '', 69 | \ '# タイトル指定', 70 | \ '# タイトル名はユニークなものを指定してください。', 71 | \ '# タイトル名ではなくパスを含めてファイル指定も行えます。', 72 | \ '# (相対パスも使用可能です)', 73 | \ 'let SubWindow_Title = "__submenu__"', 74 | \ 'let SubWindow_Title = "../__submenu__"', 75 | \ '', 76 | \ '# 複数のサブメニュー指定', 77 | \ '# (デフォルトでは未設定)', 78 | \ 'let SubWindow_Title1 = "__submenu1__"', 79 | \ 'let SubWindow_Title2 = "__submenu2__"', 80 | \ 'let SubWindow_Title3 = "__submenu3__"', 81 | \ '...', 82 | \ '', 83 | \ '*アウトライン', 84 | \ '# 起動時から折り畳みを有効', 85 | \ 'let qfixmemo_outline_foldenable = 1', 86 | \ '', 87 | \ '# wrap表示', 88 | \ 'let qfixmemo_outline_wrap = 1', 89 | \ '', 90 | \ '------------------------', 91 | \ '= キーワード', 92 | \ '------------------------', 93 | \ 'このバッファはキーワードリンク作成の対象です。', 94 | \ '[[keyword]]', 95 | \ ' g,w で保存すると、', 96 | \ '"keyword"がリンク化されます。', 97 | \ '', 98 | \ '------------------------', 99 | \ '= その他', 100 | \ '------------------------', 101 | \ 'その他は普通のメモファイルとして使用可能です。', 102 | \ '', 103 | \ '詳細は doc/qfixmemo.jaxを参照してください', 104 | \ ''] 105 | 106 | function! qfixmemo_msg#submenu() 107 | if !exists('g:loaded_qfixmemo') || (exists('g:QFixHowm_Convert') && g:QFixHowm_Convert) 108 | call map(s:qfixmemo_submenu_msg, 'substitute(v:val, "qfixmemo_submenu_width", "SubWindow_Width", "g")') 109 | call map(s:qfixmemo_submenu_msg, 'substitute(v:val, "qfixmemo_submenu_title", "SubWindow_Title", "g")') 110 | endif 111 | call setline(1, s:qfixmemo_submenu_msg) 112 | endfunction 113 | -------------------------------------------------------------------------------- /misc/mrupreview.vim: -------------------------------------------------------------------------------- 1 | "============================================================================= 2 | " Description: Preview for mru.vim 3 | " (myqfix.vim required) 4 | " このプラグインはmru.vimにプレビュー表示を追加します。 5 | " 任意のバッファにプレビューを追加したい場合のテンプレートとし 6 | " て使用してください。 7 | " Author: fuenor 8 | " Version: 2.00 9 | "============================================================================= 10 | scriptencoding utf-8 11 | if exists('g:loaded_MRUpreview') && !exists('g:fudist') 12 | finish 13 | endif 14 | let g:loaded_MRUpreview = 1 15 | if v:version < 700 16 | finish 17 | endif 18 | 19 | " プレビューの初期値 20 | if !exists('g:QFix_MRUPreviewEnable') 21 | let g:QFix_MRUPreviewEnable = 1 22 | endif 23 | 24 | augroup MRUPreview 25 | au! 26 | autocmd BufWinEnter -RecentFiles- call BufWinEnter(g:QFix_MRUPreviewEnable) 27 | autocmd BufLeave -RecentFiles- call BufLeave() 28 | autocmd CursorHold -RecentFiles- call Preview() 29 | augroup END 30 | 31 | let s:esc_filename_chars = ' *?[{`$%#"|!<>();&' . "'\t\n" 32 | function! s:Preview() 33 | if !g:QFix_MRUPreviewEnable 34 | return 35 | endif 36 | " ファイル名と行番号を取得してプレビューウィンドウを表示 37 | let lnum = 1 38 | let str = getline('.') 39 | if str =~ '^:' 40 | let bnum = matchstr(str, '|\s*\zs\d\+\ze') 41 | let file = '|'.bnum.'|' 42 | let lnum = matchstr(str, '.*[^[:digit:]]\zs\d\+\ze\s*$') + 0 43 | else 44 | let file = matchstr(str, g:MRU_Filename_Format.parser) 45 | endif 46 | call QFixPreviewOpen(file, lnum) 47 | endfunction 48 | 49 | function! s:BufWinEnter(preview) 50 | " プレビューを使用するならQFixAltWincmdMap()は必ず実行 51 | " 単にCursorHold用に updatetimeを設定したいだけなら 52 | " let b:qfixwin_updatetime = 1 だけでもよい 53 | call QFixAltWincmdMap() 54 | nnoremap i :call TogglePreview() 55 | endfunction 56 | 57 | function! s:BufLeave() 58 | call QFixPclose('force') 59 | endfunction 60 | 61 | function! s:TogglePreview() 62 | let g:QFix_MRUPreviewEnable = !g:QFix_MRUPreviewEnable 63 | call QFixPclose('force') 64 | endfunction 65 | 66 | " myqfix.vimが存在しない場合のエラー対策 67 | if !exists('*QFixPclose') 68 | function QFixPclose(...) 69 | endfunction 70 | endif 71 | 72 | if !exists('*QFixPreviewOpen') 73 | function! QFixPreviewOpen(...) 74 | endfunction 75 | endif 76 | 77 | if !exists('*QFixAltWincmdMap') 78 | function! QFixAltWincmdMap(...) 79 | endfunction 80 | endif 81 | 82 | "----------------------------------------------------------------------------- 83 | " ここから先は 改変版mru.vim用の特殊処理で、単に任意バッファにプレビューを追加 84 | " する場合には不要です。 85 | " https://sites.google.com/site/fudist/Home/modify 86 | " mru.vim+プレビューの終了時に呼び出し元バッファへ戻ってウィンドウサイズを復元 87 | " するようにしています。 88 | function! MRUPre() 89 | let s:pbuf = bufnr('%') 90 | let s:wh = winheight(0) 91 | let s:ww = winwidth(0) 92 | endfunction 93 | 94 | function! MRUPost() 95 | let @/=b:saved_mru_search 96 | noh 97 | call QFixPclose(1) 98 | close 99 | let winnr = bufwinnr(s:pbuf) 100 | if winnr != -1 101 | exe winnr.'wincmd w' 102 | let w = &lines - winheight(0) - &cmdheight - (&laststatus > 0 ? 1 : 0) 103 | if w > 0 104 | exe 'resize '. s:wh 105 | endif 106 | exe 'vertical resize '. s:ww 107 | endif 108 | endfunction 109 | 110 | -------------------------------------------------------------------------------- /misc/user-func.vim: -------------------------------------------------------------------------------- 1 | "============================================================================= 2 | " Description: QFixMemo user functon 3 | " Last Modified: 0000-00-00 00:00 4 | "============================================================================= 5 | scriptencoding UTF-8 6 | 7 | """""""""""""""""""""""""""""" 8 | " このファイルはQFixMemoのpluginディレクトリなどruntimepathの通った場所へコピー 9 | " して使います。 10 | " 必要なイベント処理関数をfinishの前に設定して好みの処理を加えてください。 11 | " イベント処理関数は.vimrc等で設定してもかまいません。 12 | " 全てのイベントはQFixMemoファイルに対してのみ実行されます。 13 | " 14 | " QFixMemoBufWritePre() はデフォルトの整形処理で使用されているので必要な処理を 15 | " 削除しないよう気をつけてください。 16 | " 17 | " NOTE: QFixHowm Ver.3として使用する場合 18 | " コマンド実行前にはenv-cnv.vimの QFixHowmSetup() が実行されQFixMemoオプションと 19 | " QFixHowmオプションの値が同一であることが保証されます。 20 | " しかしユーザーがオプションを直接書き換えている直後のイベントでは同一性は保証 21 | " されません。 22 | " したがって(対応するQFixHowmオプションが実際に存在するなら)設定値のコピーを行 23 | " うか QFixHowmSetup() を呼び出す必要があります。 24 | " 25 | " なおデフォルトではQFixHowmのオプションはユーザーが設定していない限りほとんど 26 | " 存在しないので、基本的に処理自体はQFixMemoオプションを使用して行う必要があり 27 | " ます。 28 | " QFixMemo/QFixHowmのオプション対応関係についてはenv-cnv.vimの QFixHowmSetup() 29 | " を参照してみてください。 30 | " QFixHowm Ver.3では QFixMemoInit()をデフォルトで使用しています。 31 | """""""""""""""""""""""""""""" 32 | 33 | finish 34 | 35 | " コマンド実行前処理 36 | function! QFixMemoInit() 37 | endfunction 38 | 39 | " VimEnter 40 | function! QFixMemoVimEnter() 41 | endfunction 42 | 43 | " BufNewFile,BufRead 44 | function! QFixMemoBufRead() 45 | endfunction 46 | 47 | " BufEnter 48 | function! QFixMemoBufEnter() 49 | endfunction 50 | 51 | " BufWinEnter 52 | function! QFixMemoBufWinEnter() 53 | endfunction 54 | 55 | " BufLeave 56 | function! QFixMemoBufLeave() 57 | endfunction 58 | 59 | " BufWritePre 60 | " let g:qfixmemo_use_addtitle = 1 61 | " let g:qfixmemo_use_addtime = 1 62 | " let g:qfixmemo_use_updatetime = 0 63 | " let g:qfixmemo_use_deletenulllines = 1 64 | " let g:qfixmemo_use_keyword = 1 65 | " 66 | " 各関数は call qfixmemo#AddTitle(1) のように1を指定すると 67 | " qfixmemo_use_addtitle の値にかかわらず強制処理します。 68 | function! QFixMemoBufWritePre() 69 | " タイトル行付加 70 | call qfixmemo#AddTitle() 71 | " タイムスタンプ付加 72 | call qfixmemo#AddTime() 73 | " タイムスタンプアップデート 74 | call qfixmemo#UpdateTime() 75 | " ファイル末の空行を削除 76 | call qfixmemo#DeleteNullLines() 77 | " キーワードリンク作成 78 | call qfixmemo#AddKeyword() 79 | endfunction 80 | 81 | " BufWritePost 82 | function! QFixMemoBufWritePost() 83 | endfunction 84 | 85 | " キーマップ 86 | " キーマップを変更した場合は必要ならメニューバー定義も変更してください。 87 | 88 | " グローバルキーマップ(デフォルト) 89 | function! QFixMemoKeymap() 90 | " QFixMemoKeymap()を設定するとデフォルトのキーマップ自体が定義されなくなります。 91 | " グローバルキーマップの全てを設定したい場合に使います 92 | " nnoremap a :call qfixmemo#ListCache('open') 93 | endfunction 94 | 95 | " グローバルキーマップ変更 96 | " キーマップを変更した場合はメニューバー定義を好みのものに変更してください。 97 | function! QFixMemoKeymapPost() 98 | " グローバルキーマップを一部変更したい場合に使います 99 | " nnoremap a :call qfixmemo#ListCache('open') 100 | endfunction 101 | 102 | " バッファローカルキーマップ(デフォルト) 103 | function! QFixMemoLocalKeymap() 104 | " QFixMemoLocalKeymap()を設定するとデフォルトのバッファローカルキーマップ自体が定義されなくなります。 105 | " バッファローカルキーマップの全てを設定したい場合に使います 106 | " nnoremap f :call qfixmemo#FGrep() 107 | endfunction 108 | 109 | " バッファローカルキーマップ変更 110 | function! QFixMemoLocalKeymapPost() 111 | " バッファローカルキーマップを一部変更したい場合に使います 112 | " nnoremap f :call qfixmemo#FGrep() 113 | endfunction 114 | 115 | " メニューバー 116 | function! QFixMemoMenubar(menu, leader) 117 | " g:qfixmemo_menubar が非0の場合に呼び出されます。 118 | " デフォルトのメニューバーアイテムはすべて作成されなくなります。 119 | endfunction 120 | 121 | " メニューバー変更 122 | function! QFixMemoMenubarPost(menu, leader) 123 | " g:qfixmemo_menubar が非0の場合に呼び出されます。 124 | " メニューバーアイテムを一部変更したい場合に使用してください。 125 | endfunction 126 | 127 | -------------------------------------------------------------------------------- /doc/howm2html.jax: -------------------------------------------------------------------------------- 1 | = はじめに 2 | 3 | `:Howm2html!` (QFixMemoの場合は`g,hi`でも起動)を実行すると、カレントバッファがHTMLファイルに変換され、ブラウザで開かれます。 4 | 5 | ## シンタックスハイライト 6 | 7 | `:set filetype=qfix_memo` (または`set syntax=qfix_memo`) を実行すると専用のシンタックスハイライトが適用されます。 8 | また拡張子 "txt"のファイルにシンタックスハイライトを適用するには、.vimrcに次の行を追加します。 9 | ```vim 10 | au BufRead,BufNewFile *.txt set filetype=qfix_memo 11 | ``` 12 | 13 | なおシンタックスハイライトに`markdown`を指定することでも、ある程度はハイライトされます。 14 | 15 | = 見出し 16 | 17 | 見出しを作成するには、見出しテキストの前に `#`を追加します。 `#`の数で見出しのレベルが決まります。 18 | 19 | ## Level 2 20 | ### Level 3 21 | #### Level 4 22 | ##### Level 5 23 | 24 | = リンク 25 | 26 | URLは自動的にリンクに変換されます。 27 | [Internet] http://example.com 28 | [Local file] ./howm2html.txt 29 | 30 | ".jpg", ".png", ".gif", ".bmp"の画像ファイルはサムネイルとして表示されます。 31 | [Internet] https://droidterm-e8a40.firebaseapp.com/droidvim/src/md2html.png 32 | [Local file] ./howm2html.jpg 33 | QFixMemoのファイルではリンク上で``を押すとリンクを開くことができます。 34 | 35 | イメージファイル名の先頭に `&`をつけると実際のサイズで表示することができます。 36 | &./howm2html.png 37 | 38 | = テキストの強調表示 39 | 40 | テキストの強調表示や意味付けには「HTMLタグ」を使用できます。 41 | 42 | 「重要性、重大性、または緊急性のある内容」を示します。 43 | "文脈的に強調される内容" を示します。 44 | 「通常と異なる声や気分のテキスト」を示します。 45 | 46 | "太字テキスト" としてレンダリングします。 47 | "下線付きテキスト" としてレンダリングします。 48 | 49 | 文書から削除されたことを示します。 50 | "間違っている、すでに正確でない、もはや関連性のない内容" を示します。 51 | 52 | ## その他のHTMLタグ 53 | 54 | &その他のHTMLタグは通常の文字として表示されますが、 `<`の前に `&`を追加するとHTMLタグとして扱われます。& 55 | 56 | = リスト 57 | 58 | ## 順序のないリスト 59 | 60 | あなたが有名ユーチューバーになるために必要なもの。 61 | 62 | - ペン 63 | - パイナップル 64 | - アップル 65 | 66 | ## 順序付きリスト 67 | 68 | キリンを冷蔵庫に入れる方法。 69 | 70 | + 冷蔵庫のドアを開けます。 71 | + キリンを入れます。 72 | + ドアを閉じます。 73 | 74 | ## 複数行の文章 75 | 76 | - 場合によっては、複数の行を使用する必要があります。 77 | その場合、次の行の先頭に "タブ"または "4つのスペース"を使用して複数行の文章を使用することができます。 78 | - HTMLタグを使用して改行を追加&
することもできます。 79 | 80 | ## 定義リスト 81 | 82 | : Term1 | これは"Term1"の定義です。 83 | : Term2 | 場合によっては、複数の行を使用する必要があります。 84 | その場合、次の行の先頭に "タブ"または "4つのスペース"を使用して複数行の文章を使用することができます。 85 | 86 | = テーブル 87 | 88 | | #月 | #略語 |: #text-align:| 89 | | January | Jan. |: 左 | 90 | | Febrary | Feb. |: 中央 :| 91 | | March | Mar. | 右 :| 92 | 93 | = 水平線 94 | 95 | 3個以上のハイフン。 96 | 97 | --- 98 | 99 | = テキストの引用 100 | 101 | 引用するテキストの前に `>`を追加してください。 102 | 103 | > All work and no play makes Jack a dull boy. 104 | > All work and no play makes Jack a dull boy. 105 | > All work and no play makes Jack a dull boy. 106 | > All work and no play makes Jack a dull boy. 107 | > All work and no play makes Jack a dull boy. 108 | 109 | = インラインコード 110 | 111 | インライン`コード`はテキストの周りを`バッククォート`で囲みます。 112 | 113 | = テキストブロック 114 | 115 | ## 整形済みテキスト 116 | 117 | 前後に「3個のバッククォートの行」を配置することで、整形済みテキストブロックを作成できます。 118 | 119 | ``` 120 | The quick brown fox jumps over the lazy dog. 121 | The quick brown fox jumps over the lazy dog. 122 | The quick brown fox jumps over the lazy dog. 123 | The quick brown fox jumps over the lazy dog. 124 | ``` 125 | 126 | ## コードのシンタックスハイライト 127 | 128 | 「言語識別子」を追加すると、テキストブロックで言語のシンタックスハイライトを有効にすることができます。 129 | (言語識別子には`:set filetype?`の値を設定する) 130 | 131 | ```sh 132 | #!/system/bin/sh 133 | echo "Hello World!" 134 | ``` 135 | 136 | `:`を使って「タイトル」も追加できます。 137 | 138 | ```cpp:Syntax highlighting and title. 139 | // helloworld.cpp 140 | #include 141 | 142 | int main(void) { 143 | printf("Hello Wold!\n"); 144 | return 0; 145 | } 146 | ``` 147 | 148 | = 行のエスケープ 149 | 150 | ## HTMLコードの埋め込み 151 | 152 | `&&`を使用してHTMLコードの埋め込みが行えます。 153 | 154 | (例) Youtube 155 | && 156 | 157 | ## 行を削除または隠す 158 | 159 | 行頭と行末に`&&`を追加すると行を削除することができます。 160 | 161 | && 国家機密 && 162 | && 王様の耳はロバの耳! && 163 | 164 | HTMLのコメントタグを使用すると、削除するのではなく隠すことも可能です。 165 | && 168 | 169 | これはVimのモードラインを表示したくない場合に便利です。 170 | && vim: set ft=qfix_memo syn=qfix_memo norl: && 171 | 172 | -------------------------------------------------------------------------------- /syntax/howm_schedule.vim: -------------------------------------------------------------------------------- 1 | " Vim syntax file 2 | " 3 | " Language: howm schedule 4 | " Maintainer: fuenor@gmail.com 5 | " Last Change: 2011-09-04 22:11 6 | 7 | if exists("b:howm_schedule_syntax") 8 | " finish 9 | endif 10 | 11 | if &background == 'dark' 12 | hi howmTodo ctermfg=Yellow guifg=Yellow 13 | hi howmTodoUD ctermfg=Magenta guifg=LightRed 14 | hi howmSchedule ctermfg=Green guifg=Green 15 | hi howmReminder ctermfg=Cyan guifg=Cyan 16 | hi howmFinished ctermfg=DarkGrey guifg=DarkGrey 17 | else 18 | hi howmTodo ctermfg=DarkYellow guifg=DarkGoldenrod 19 | hi howmTodoUD ctermfg=DarkMagenta guifg=DarkMagenta 20 | hi howmSchedule ctermfg=DarkGreen guifg=DarkGreen 21 | hi howmReminder ctermfg=Blue guifg=Blue 22 | hi howmFinished ctermfg=DarkGrey guifg=Grey 23 | endif 24 | hi howmDeadline ctermfg=Red guifg=Red 25 | hi howmHoliday ctermfg=Magenta guifg=Magenta 26 | hi howmSpecial ctermfg=Red guifg=Red 27 | hi def link howmNormal Normal 28 | 29 | hi def link actionlockDate Underlined 30 | hi def link actionlockTime Number 31 | 32 | if exists('g:QFixHowm_Date') 33 | exec 'syn match actionlockDate contained "'.g:QFixHowm_Date.'" ' 34 | else 35 | syn match actionlockDate contained "\d\{4}-\d\{2}-\d\{2}" 36 | endif 37 | syn match actionlockTime contained "\d\d:\d\d\(:\d\d\)\?" 38 | 39 | let s:pattern = '\[\d\{4}-\d\{2}-\d\{2}\( \d\{2}:\d\{2}\)\?]' 40 | if exists('g:QFixHowm_Date') 41 | let s:pattern = '\['.g:QFixHowm_Date.'\( \d\{2}:\d\{2}\)\?]' 42 | endif 43 | let s:epat = '\{1,3}\((\([0-9]\+\)\?\([-+*]\?\c\(\(Sun\|Mon\|Tue\|Wed\|Thu\|Fri\|Sat\|Hol\|Hdy\|Holiday\|\|Wdy\|Weekday\)\?\([-+]\d\+\)\?\)\?\))\)\?\d*' 44 | exe 'syn match howmNormal "^' .s:pattern.'" contains=actionlockDate,actionlockTime' 45 | exe 'syn match howmSchedule "^\s*'.s:pattern.'@' . s:epat .'" contains=actionlockDate,actionlockTime' 46 | exe 'syn match howmDeadline "^\s*'.s:pattern.'!' . s:epat .'" contains=actionlockDate,actionlockTime' 47 | exe 'syn match howmTodo "^\s*'.s:pattern.'+' . s:epat .'" contains=actionlockDate,actionlockTime' 48 | exe 'syn match howmReminder "^\s*'.s:pattern.'-' . s:epat .'" contains=actionlockDate,actionlockTime' 49 | exe 'syn match howmTodoUD "^\s*'.s:pattern.'\~'. s:epat .'" contains=actionlockDate,actionlockTime' 50 | exe 'syn match howmFinished "^\s*'.s:pattern.'\."' 51 | let s:pattern = '&\[\d\{4}-\d\{2}-\d\{2}\( \d\{2}:\d\{2}\)\?]\.' 52 | if exists('g:QFixHowm_Date') 53 | let s:pattern = '&\['.g:QFixHowm_Date.'\( \d\{2}:\d\{2}\)\?]\.' 54 | endif 55 | exe 'syn match howmFinished "'.s:pattern.'"' 56 | 57 | syn match txtUrl '\(http\|https\|ftp\|git\)://[-0-9a-zA-Z!#$%&'*+,./:;=?@_~]*' 58 | syn match txtFile '\(file\|rel\|memo\|howm\)://[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\]\\]*' 59 | syn match txtFile '\zs\([A-Za-z]:[/\\]\|\~[/\\]\|[\\][\\]\|\.\.\?[/\\]\)[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\]\\]\+\ze[^\])[:blank:]]\?' 60 | if !exists('g:openuri_unix_style_path') || g:openuri_unix_style_path 61 | syn match txtFile '\zs\(/[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\]\\]\+\)\{2,}\ze[^\])[:blank:]]\?' 62 | endif 63 | syn match txtFile '\[:\?&\?\zs\(memo\|rel\|howm\|https\|http\|file\|ftp\|git\)://\([a-zA-Z]:\)\?[^:]\+\ze:[^\]]*]' 64 | syn match txtFile '\[:\?&\?\zs\([A-Za-z]:[/\\]\|\~[/\\]\|\.\.\?[/\\]\|[/\\]\)[^:]\+\ze:[^\]]*]' 65 | 66 | hi def link txtFile Underlined 67 | hi def link txtUrl Underlined 68 | 69 | if exists('g:howm_glink_pattern') && g:howm_glink_pattern != '' 70 | exe "syn match howmLink '" . g:howm_glink_pattern . ".*'" . '"' 71 | endif 72 | if exists('g:howm_clink_pattern') && g:howm_clink_pattern != '' 73 | exe "syn match howmLink '" . g:howm_clink_pattern . ".*'" . '"' 74 | endif 75 | 76 | hi def link howmLink Underlined 77 | 78 | " macro action 79 | if exists('g:QFixHowm_MacroActionKey') && exists('g:QFixHowm_MacroActionPattern') 80 | if g:QFixHowm_MacroActionKey != '' && g:QFixHowm_MacroActionPattern != '' 81 | exe 'syn match actionlockMacroAction "^.*'.g:QFixHowm_MacroActionPattern.'.*$" contains=actionlockMacroActionDefine' 82 | exe 'syn match actionlockMacroActionDefine "'.g:QFixHowm_MacroActionPattern.'.*$"' 83 | endif 84 | endif 85 | hi def link actionlockMacroActionDefine howmFinished 86 | hi def link actionlockMacroAction Underlined 87 | 88 | syn match actionlockList "\s*{[- +!$%&?*_<>=.\\]}" 89 | hi def link actionlockList Type 90 | 91 | " for changelog 92 | if exists('b:current_syntax') && b:current_syntax == "changelog" 93 | syn region changelogFiles start="^\s\+[+*]\s" end=":\s" end="^$" contains=changelogBullet,changelogColon,changelogError,howmSchedule,howmDeadline,howmTodo,howmReminder,howmTodoUD,howmFinished keepend 94 | endif 95 | 96 | let b:howm_schedule_syntax = 1 97 | 98 | -------------------------------------------------------------------------------- /doc/howm_schedule.jax: -------------------------------------------------------------------------------- 1 | *howm-schedule.jax* For Vim バージョン 7.2 Last change: 2011 October 26 2 | ============================================================================== 3 | Description: howm style scheduler 4 | Author: fuenor 5 | Web(Japanese): 6 | http://sites.google.com/site/fudist/Home/qfixhowm 7 | http://sites.google.com/site/fudist/Home/qfixdev/ver3 8 | ============================================================================== 9 | 10 | CONTENTS *howm_schedule_contents* 11 | 1. Intro |howm_schedule_intro| 12 | 2. インストール |howm_schedule_settings| 13 | 3. コマンド |howm_schedule_command| 14 | 3.1 キーマップ |howm_schedule_keymap| 15 | 4. シンタックス |howm_schedule_syntax| 16 | 17 | ============================================================================== 18 | 1. Intro *howm_schedule_intro* 19 | 20 | howm_schedule.vimはhowmスタイルの予定・TODOを表示するためのプラグインです。 21 | QFixHowm用の予定・TODOコマンドを独立動作するようにしたものでオプションは 22 | QFixHowmと同一です。 23 | 24 | howmスタイルの予定・TODO、オプションについては以下を参照してください。 25 | http://sites.google.com/site/fudist/Home/qfixhowm/howm-reminder 26 | 27 | このヘルプでは主にQFixHowm以外のドキュメントに対してhowmスタイルの予定・TODOを 28 | 使用するための方法について記します。 29 | 30 | ============================================================================== 31 | 2. インストール *howm_schedule_settings* 32 | howm_schedule.vimをruntimepathの通った場所へコピーしてください。 33 | 34 | 動作に必要なその他のファイル 35 | 36 | syntax/howm_schedule.vim (シンタックスファイル) 37 | http://sites.google.com/site/fudist/Home/qfixhowm 38 | プラグイン本体と同名のシンタックスファイルです。 39 | howmスタイルの予定・TODOのシンタックス(色分け)表示が有効になります。 40 | なくても動作しますが、色分け表示は有効になりません。 41 | 42 | mygrep.vim 43 | https://sites.google.com/site/fudist/Home/grep 44 | ファイルをgrepで検索します。 45 | ないと動作しません。 46 | 47 | myqfix.vim 48 | https://sites.google.com/site/fudist/Home/grep 49 | QuickFixウィンドウにプレビューや絞り込みを追加します。 50 | なくても動作しますが連携機能もあるため同時使用を推奨します。 51 | 52 | すべてのファイルはQFixHowmに同梱されています。 53 | http://sites.google.com/site/fudist/Home/qfixhowm 54 | 55 | NOTE: 56 | howm_schedule.vimはautoloadでの読み込みにも対応しています。 57 | ただしautoloadディレクトリに置いていると起動直後にはコマンドやキーマップは設定 58 | されません。必要に応じて初期化関数を呼び出してください。 59 | :call howm_schedule#init() 60 | 61 | ============================================================================== 62 | 3. コマンド *howm_schedule_command* 63 | 64 | コマンドラインから実行してQuickFixウィンドウに予定・TODOを表示することができま 65 | す。 66 | 67 | :call QFixHowmSchedule('schedule', howm_dir, howm_fileencoding) 68 | :call QFixHowmSchedule('todo', howm_dir, howm_fileencoding) 69 | 70 | (実行例) > 71 | :call QFixHowmSchedule('schedule', 'c:/temp', 'utf-8') 72 | 73 | howm_dirは検索対象ディレクトリ、howm_fileencodingはディレクトリ内のファイルエ 74 | ンコーディングです。 75 | 'schedule'と'todo'は後述するコマンド ,y ,tと対応しています。 76 | 77 | QuicFixウィンドウを表示せずにQuicFixリスト取得も可能です。 78 | > 79 | " 検索してQuicFixリスト取得 (qflistはgetqflist()、timeはlocaltime()を参照) 80 | let [qflist, time] = QFixHowmScheduleQFList('schedule', 'c:/temp', 'utf-8') 81 | " キャッシュされたQuicFixリスト取得 (参照) 82 | let [qflist, time] = QFixHowmScheduleCachedQFList('schedule') 83 | 84 | ------------------------------------------------------------------------------ 85 | 3.1 キーマップ *howm_schedule_keymap* 86 | 87 | 最低限 howm_dir, howm_fileencodingが設定されていれば動作します。 88 | 89 | ,y 予定 90 | ,ry 予定(更新) 91 | ,t Todo 92 | ,rt Todo(更新) 93 | ,d 日付の挿入 94 | ,T 日付と時刻の挿入 95 | ,rd 繰り返しの展開 96 | 97 | NOTE: 98 | は QFixHowm_Keyで定義されます。 99 | デフォルトは g なので、,c は g,c になります。 100 | を読み替えてください。 101 | 102 | 詳しい使い方は以下のサイトを参照してください。 103 | http://sites.google.com/site/fudist/Home/qfixhowm/howm-reminder 104 | 105 | にアクションロックが必要な場合はマップしてください。 106 | などで分けておくのも良いかもしれません。 107 | > 108 | nnoremap :call MyCR() 109 | 110 | function! MyCR() 111 | call howm_schedule#Init() 112 | if QFixHowmScheduleAction() 113 | return 114 | endif 115 | exe "normal! \" 116 | endfunction 117 | 118 | ============================================================================== 119 | 4. シンタックス *howm_schedule_syntax* 120 | 121 | 予定・TODOのシンタックスはsyntax/howm_schedule.vimで定義されています。 122 | ファイルタイプやシンタックス指定等でhowm_schedule.vimを適用してください。 123 | 最も簡単なのは適用したいファイルタイプと同名のファイルにリネームして、 124 | ユーザーランタイムディレクトリの /syntaxへコピーすることです。 125 | 読み込みの順番が問題になるときは /after/syntaxも良いかもしれません。 126 | 127 | コマンドモードから実行しても有効になります。 128 | > 129 | :runtime! syntax/howm_schedule.vim 130 | < 131 | 132 | vim:tw=78:ts=8:ft=howm_schedule.help:norl:et: 133 | 134 | -------------------------------------------------------------------------------- /autoload/agrep.vim: -------------------------------------------------------------------------------- 1 | "============================================================================= 2 | " Description: Vim Script grep 3 | " Vimスクリプトによるgrep 4 | " Vimで正常に開けるエンコーディングなら、異なるエンコーディン 5 | " グが混在していてもgrep可能 6 | " Author: fuenor 7 | "============================================================================= 8 | scriptencoding utf-8 9 | 10 | " fuenor@gmail.com 11 | " 12 | " 検索関数 13 | " agrep#MyGrepScript(searchWord, to_encoding, searchPath, options) 14 | " searchWord : 検索文字列 15 | " エンコーディングは内部エンコーディングと同じ 16 | " to_encoding : 検索対象のファイルエンコーディング 17 | " searchPath : 検索パス 18 | " 現在 *.txt などのファイル名指定には対応していない 19 | " options : オプション 20 | " -F -i -R (固定文字列検索、大小文字の同一視、再帰検索) 21 | " 22 | " 戻り値 23 | " 該当行を file:lnum:text で返す 24 | " 25 | " file : ファイル名 26 | " g:MyGrep_ShellEncodingで指定されたエンコーディングに変換 27 | " lnum : 該当行番号 28 | " text : 該当行の内容 29 | " to_encodingで指定されたエンコーディングに変換 30 | " 31 | " 異なるエンコーディングが混在していてもgrep可能にする 32 | " let g:MyGrep_MultiEncodingGrepScript = 1 33 | " 34 | " QFixGrep/QFixHowm/QFixMemo 35 | " 次を設定するとqfixlistで使用される。 36 | " let mygrepprg='agrep.vim' 37 | " 日本語を含む場合のみ使用するなら次のように設定する 38 | " let myjpgrepprg='agrep.vim' 39 | " 40 | 41 | " 検索対象外のファイル指定 42 | if !exists('g:MyGrep_ExcludeReg') 43 | if exists('g:QFix_PreviewExclude') 44 | let g:MyGrep_ExcludeReg = '[~#]$\|'.g:QFix_PreviewExclude 45 | else 46 | let g:MyGrep_ExcludeReg = '[~#]$\|\.pdf$\|\.xls$\|\.mp3$\|\.mpg$\|\.avi$\|\.wmv$\|\.jpg$\|\.bmp$\|\.png$\|\.gif$\|\.zip$\|\.rar$\|\.exe$\|\.dll$\|\.o$\|\.obj$\|\.lnk$' 47 | endif 48 | endif 49 | " 使用するgrep(shell)のエンコーディング指定 50 | let s:MSWindows = has('win95') || has('win16') || has('win32') || has('win64') 51 | if !exists('g:MyGrep_ShellEncoding') 52 | let g:MyGrep_ShellEncoding = 'utf-8' 53 | if s:MSWindows && !has('win32unix') 54 | let g:MyGrep_ShellEncoding = 'cp932' 55 | endif 56 | endif 57 | " 異なるエンコーディングが混在していてもgrep可能にする 58 | if !exists('g:MyGrep_MultiEncodingGrepScript') 59 | let g:MyGrep_MultiEncodingGrepScript = 0 60 | endif 61 | if !exists('g:qfixtempname') 62 | let g:qfixtempname = tempname() 63 | endif 64 | let s:tempfile = g:qfixtempname 65 | 66 | function! agrep#MyGrepScript(searchWord, to_encoding, searchPath, options) 67 | let globfile = a:options =~ "\\C-[a-zA-Z]*R" ? '**/*' : '*' 68 | let qflist = s:glob(fnamemodify(a:searchPath, ':p'), globfile) 69 | if qflist == [] 70 | return '' 71 | endif 72 | redraw | echo 'agrep.vim : searching...' 73 | let searchWord = escape(a:searchWord, "~@=") 74 | if a:options =~ "\\C-[a-zA-Z]*F" 75 | let searchWord = "\\V".escape(searchWord, "\\") 76 | else 77 | let searchWord = "\\v".searchWord 78 | endif 79 | if a:options !~ "\\C-[a-zA-Z]*i" 80 | let searchWord = "\\C".searchWord 81 | endif 82 | " 高速化のためテンポラリバッファを使用 83 | let prevPath = s:escape(getcwd(), ' ') 84 | silent! exe 'chdir ' . s:escape(path, ' ') 85 | silent! exe 'silent! botright split '.s:tempfile 86 | silent! setlocal bt=nofile bh=hide noswf nobl 87 | 88 | let retval = '' 89 | let path = substitute(fnamemodify(a:searchPath, ':p'), '\\', '/', 'g') 90 | let path = substitute(path, '[\\/]$', '', '') 91 | for file in qflist 92 | if file =~ g:MyGrep_ExcludeReg 93 | continue 94 | endif 95 | let filename = iconv(substitute(file, '\\', '/', 'g'), &enc, g:MyGrep_ShellEncoding) 96 | let lnum = 1 97 | if g:MyGrep_MultiEncodingGrepScript 98 | let tlist = s:readfile(path.'/'.file, '') 99 | else 100 | let tlist = readfile(path.'/'.file, '') 101 | call map(tlist, "iconv(v:val, a:to_encoding, &enc)") 102 | endif 103 | for text in tlist 104 | if match(text, searchWord) > -1 105 | let text = iconv(text, &enc, a:to_encoding) 106 | let retval = retval.filename.':'.lnum.':'.text."\" 107 | endif 108 | let lnum += 1 109 | endfor 110 | endfor 111 | silent! close 112 | exe 'chdir ' . prevPath 113 | redraw | echo '' 114 | return retval 115 | endfunction 116 | 117 | function! s:readfile(mfile, ...) 118 | let tlist = [] 119 | silent! 1,$delete _ 120 | let mfile = a:mfile 121 | let cmd = '0read ' 122 | let opt = '' 123 | silent! exe cmd . ' ' . opt .' '. s:escape(mfile, ' ') 124 | let tlist = getline(1, '$') 125 | return tlist 126 | endfunction 127 | 128 | function! s:glob(path, file) 129 | let prevPath = s:escape(getcwd(), ' ') 130 | let path = expand(a:path) 131 | if !isdirectory(path) 132 | let mes = printf('"%s" is not directory.', a:path) 133 | let choice = confirm(mes, "&OK", 1, "W") 134 | return [] 135 | endif 136 | exe 'chdir ' . s:escape(path, ' ') 137 | redraw | echo 'agrep.vim : glob...' 138 | let files = split(glob(a:file), '\n') 139 | let qflist = [] 140 | for n in files 141 | if !isdirectory(n) 142 | call add(qflist, n) 143 | endif 144 | endfor 145 | exe 'chdir ' . prevPath 146 | return qflist 147 | endfunction 148 | 149 | function! s:escape(str, chars) 150 | return escape(a:str, a:chars.((has('win32')|| has('win64')) ? '#%&' : '#%$')) 151 | endfunction 152 | 153 | -------------------------------------------------------------------------------- /doc/qfixmru.jax: -------------------------------------------------------------------------------- 1 | *qfixmru.jax* For Vim バージョン 7.2 Last change: 2011 August 23 2 | ============================================================================== 3 | Description: QFixMRU 4 | Author: fuenor 5 | Web(Japanese): 6 | http://sites.google.com/site/fudist/Home 7 | http://sites.google.com/site/fudist/Home/qfixdev/ver3 8 | ============================================================================== 9 | CONTENTS *qfixmru_contents* 10 | 1. Intro |qfixmru_intro| 11 | 2. インストール |qfixmru_install| 12 | 3. 設定 |qfixmru_settings| 13 | 4. MRUの表示 |qfixmru_command| 14 | 5. オプション |qfixmru_option| 15 | 5.1 基準ディレクトリ(相対パス) |qfixmru_relative_path| 16 | 5.2 保存時の相対パス |qfixmru_basedir| 17 | 18 | ============================================================================== 19 | 1. Intro *qfixmru_intro* 20 | 21 | QFixMRUはQuickfixウィンドウを使用してMRUリストを表示するプラグインです。 22 | 通常のMRUとは違い正規表現で指定した行をタイトルとしてMRUリストを作成するため、 23 | ソースファイルではファイル単位でなく最近編集した関数単位でMRUリストにしたり、 24 | 構造化したメモファイルではエントリ単位でMRUリストを作成する事ができます。 25 | 26 | ============================================================================== 27 | 2. インストール *qfixmru_install* 28 | 29 | qfixmru.vimをruntimepathの通った場所へコピーして下さい。 30 | QFixHowm/QFixMemoを使用している場合はインストール不要です。 31 | 32 | ============================================================================== 33 | 3. 設定 *qfixmru_settings* 34 | 35 | デフォルトでは通常のMRUのようにカレント行が登録されますが、タイトル単位でMRU登 36 | 録する際は「タイトル行の正規表現」を指定する必要があります。 37 | 拡張子が txt で、行頭が = で始まる行がタイトル行なら次のようにします。 38 | > 39 | " MRUでエントリタイトルと見なす正規表現(Vimの正規表現) 40 | let g:QFixMRU_Title['txt'] = '^=\([^=]\|$\)' 41 | 42 | もしもtxt専用のMRUとするなら登録するファイル名も設定してください。 43 | > 44 | " MRUに登録するファイル名(Vimの正規表現) 45 | let g:QFixMRU_RegisterFile = '\.txt$' 46 | 47 | QFixMRUは一時的に無効化可能です。 > 48 | " QFixMRUを無効化 49 | let g:QFixMRU_Disable = 1 50 | 51 | NOTE: !!! 重要 !!! 52 | QFixMRUは起動時からMRU処理を行なっていますが、QFixMRUコマンドが実行されないと 53 | ファイルから前回起動時のMRUを読み込まず終了時に保存もしません。 54 | 55 | これはMRUの読込/保存でVimの起動・終了の体感時間を増やさないための仕様で、 56 | QFixMRUが主に他のプラグインのライブラリとして使用されることを想定しているから 57 | です。 58 | 59 | Vim終了時に常にMRUを保存するには以下を設定します。 > 60 | " QFixMRUコマンドが呼び出されていなくてもVim終了時に保存 61 | let QFixMRU_VimLeaveWrite = 1 62 | 63 | なおQFixMRUコマンドが実行された場合には QFixMRU_VimLeaveWrite の値にかかわら 64 | ず終了前保存処理が行われます。 65 | 66 | ============================================================================== 67 | 4. MRUの表示 *qfixmru_command* 68 | 69 | MRUを表示するにはQFixMRUを実行します。 70 | デフォルトではカレントディレクトリ以下のファイルが対象になりますが、表示対象ディ 71 | レクトリを指定する事もできます。 72 | :QFixMRU {basedir} 73 | 74 | パス指定するときの空白は \ でエスケープしてください。 75 | > 76 | :QFixMRU D:/usr/My\ Dropbox/howm 77 | 78 | 登録されている全MRUリストを表示するにはallを指定します。 79 | :QFixMRU /:all 80 | 81 | ------------------------------------------------------------------------------ 82 | 4.1 使用例 83 | 84 | g,hlを実行すると最近編集した関数のMRUリストを表示したいとします。 85 | .vimrc > 86 | " キーマップ 87 | nnoremap g,hl :QFixMRU 88 | 89 | " カレントディレクトリをファイルと同じ場所へ移動 90 | if exists('+autochdir') 91 | set autochdir 92 | else 93 | au BufEnter * execute ":silent! lcd " . escape(expand("%:p:h"), ' ') 94 | endif 95 | 96 | " MRUに登録するファイル名の正規表現 97 | let QFixMRU_RegisterFile = '\.\(java\|js\|py\|rb\|vim)$' 98 | 99 | " MRUでエントリタイトルと見なす正規表現 100 | function! QixMRUAddEntryRegxp() 101 | let g:QFixMRU_Title['java'] = '^\s*public.*(.*).*{' 102 | let g:QFixMRU_Title['js'] = '^\s*function' 103 | let g:QFixMRU_Title['py'] = '^def' 104 | let g:QFixMRU_Title['rb'] = '^\s*def' 105 | let g:QFixMRU_Title['vim'] = '^\s*\(silent!\?\)\?\s*function' 106 | endfunction 107 | 108 | 上記の設定を.vimrcに追加してから、Vimスクリプト(たとえばqfixmru.vim等)の 109 | ファイルを開き「いろんな場所へ移動してバッファ切替」を繰り返してみてください。 110 | こうしておいてVimスクリプトを開き g,hl を実行すると行頭が function で始まる行 111 | をタイトルとしたMRU(関数)リストが表示されます。 112 | 113 | ============================================================================== 114 | 5. MRUリストのリビルド *qfixmru_rebuild* 115 | 116 | Windows(cp932)とLinux(utf-8)でMRUリストを共有していると、MRUリストの保存ファイ 117 | ルが文字化けして、日本語ファイル名が扱えなくなることがあります。 118 | このような場合はMRUリストをリビルドしてください。 119 | 存在しないファイルエントリは削除され、タイトル行は再取得されます。 120 | > 121 | :QFixMRU /:rebuild 122 | 123 | WindowsとLinuxでMRUリストを共有するような場合は、Windowsで使用するVimの内部エ 124 | ンコーディングをUTF-8に設定することをおすすめします。 125 | 126 | ============================================================================== 127 | 6. オプション *qfixmru_option* 128 | 129 | MRUリストのオプション > 130 | 131 | " MRUの保存ファイル名 132 | let QFixMRU_Filename = '~/.qfixmru' 133 | " MRUに登録しないファイル名(正規表現) 134 | let QFixMRU_IgnoreFile = '' 135 | " MRUに登録するファイルの正規表現(設定すると指定ファイル以外登録されない) 136 | let QFixMRU_RegisterFile = '' 137 | " MRUに登録しないタイトル(正規表現) 138 | let QFixMRU_IgnoreTitle = '' 139 | " MRU表示数 140 | let g:QFixMRU_Entries = 20 141 | " MRU内部のエントリ最大保持数 142 | let QFixMRU_EntryMax = 300 143 | " MRUエントリのコードブロック正規表現 (デフォルトでは設定されていません) 144 | let QFixMRU_CodeBlock = [ 145 | \ {'start':'^\s*```', 'end':'^\s*```'}, 146 | \ {'start':'^>|.\{-}|$', 'end':'^||<$'}, 147 | \] 148 | 149 | ・比較するファイル名はフルパスで ~ は展開され¥記号は/に正規化されます。 150 | ・エントリタイトル正規表現が無指定なら一ファイルにつき一箇所登録されます。 151 | 152 | ------------------------------------------------------------------------------ 153 | 6.1 基準ディレクトリ(相対パス) *qfixmru_relative_path* 154 | 155 | 異なる環境でMRUリストを共有可能です。 156 | QFixMRU_RootDir が存在すると、相対パス部分をQFixMRU_RootDirを基準とした絶対パ 157 | スに置換して読み込みます。 158 | 159 | .vimrc > 160 | " 相対パスで保存する基準ディレクトリ 161 | let QFixMRU_RootDir = '~/mruroot' 162 | 163 | 例えばWindowsでは c:/mruroot Linuxでは ~/mruroot に対して同じMRUファイルを使用 164 | したい場合は次のようにします。 165 | .vimrc > 166 | " 相対パスで保存する基準ディレクトリ 167 | if has('unix') 168 | let QFixMRU_RootDir = '~/mruroot' 169 | else 170 | let QFixMRU_RootDir = 'c:/mruroot' 171 | endif 172 | 173 | ------------------------------------------------------------------------------ 174 | 6.2 保存時の相対パス *qfixmru_basedir* 175 | 176 | QFixMRU_BaseDirをMRUファイル読込後に書き換えるとQFixMRU_BaseDirを基準とする相 177 | 対パスで保存されます。 178 | 179 | vim:tw=78:ts=8:ft=help:norl:et: 180 | 181 | -------------------------------------------------------------------------------- /doc/howm_calendar.jax: -------------------------------------------------------------------------------- 1 | *howm_calendar.jax* For Vim バージョン 7.2 Last change: 2011 November 6 2 | ============================================================================== 3 | Description: howm style calendarr 4 | Author: fuenor 5 | Web(Japanese): 6 | http://sites.google.com/site/fudist/Home/qfixhowm 7 | http://sites.google.com/site/fudist/Home/qfixdev/ver3 8 | ============================================================================== 9 | 10 | CONTENTS *howm_calendar_contents* 11 | 1. Intro |howm_calendar_intro| 12 | 2. インストール |howm_calendar_install| 13 | 3. 設定 |howm_calendar_settings| 14 | 15 | ============================================================================== 16 | 1. Intro *howm_calendar_intro* 17 | 18 | howm_calendar.vimはQFixHowm/QFixMemoでカレンダーを表示するためのプラグインです。 19 | QFixHowmの休日定義ファイルを利用してカレンダー上で休日が強調表示されます。 20 | 21 | ============================================================================== 22 | 2. インストール *howm_calendar_install* 23 | 24 | howm_calendar.vimとdatelib.vimをruntimepathの通った場所へコピーしてください。 25 | この状態でも :Calendar または :CalendarH でカレンダーが表示されます。 26 | 27 | ============================================================================== 28 | 3. 設定 *howm_calendar_settings* 29 | 30 | :Calendar コマンドのオプションは次のとおりです。 31 | > 32 | " 表示するウィンドウ(Calendar) 33 | let howm_calendar_wincmd = 'vertical topleft' 34 | " 表示する月数 35 | let howm_calendar_count = 3 36 | 37 | " 表示するウィンドウ(CalendarH) 38 | let howm_calendarh_wincmd = 'rightbelow' 39 | " 表示する月数 40 | let howm_calendarh_count = 4 41 | 42 | QFixHowm/QFixMemoのカレンダーでは次の設定が有効です。 43 | > 44 | " 表示するウィンドウ 45 | let qfixmemo_calendar_wincmd = 'vertical topleft' 46 | " 表示する月数 47 | let qfixmemo_calendar_count = 3 48 | 49 | ------------------------------------------------------------------------------ 50 | 3.1 休日定義ファイル *howm_calendar_holiday* 51 | 52 | カレンダーに表示する休日を定義するファイルにはQFixHowmの休日定義ファイルを使用 53 | します。 54 | QFixHowm/QFixMemoを使用している場合は自動設定されるので問題なければ設定不要で 55 | す。 56 | 57 | 休日定義ファイルはアーカイブの中の misc/holidayの中にあります。 58 | https://github.com/fuenor/qfixhowm/tree/master/misc/holiday 59 | > 60 | " 休日定義ファイル(パスは環境に合わせてください) 61 | let calendar_holidayfile = '~/howm/Sche-Hd-0000-00-00-000000.txt' 62 | 63 | 以降はサインが次の表のように表示されます。 64 | 65 | | | 普通日 | 66 | | + | 日記が存在する | 67 | | @ | 休日 | 68 | | # | 休日で日記が存在する | 69 | 70 | ------------------------------------------------------------------------------ 71 | * 休日定義のフォーマット 72 | 73 | 休日定義ファイルで使用可能な定義はQFixHowmの予定・TODOのサブセットです。 74 | 詳しくは同梱のhowm_reminder.jax (|howm_reminder_contents|)を参照してください。 75 | 基本的に@予定であれば使用可能です。 76 | > 77 | [2010-01-11]@@@(2*Mon)0 成人の日 78 | [1989-04-29]@@@0 みどりの日 &[2006-04-29]. 79 | [2010-02-11]@0 建国記念の日 80 | < 81 | @@@ は年単位の繰り返しで、第2水曜を指定したい場合は(2*Wed)のように曜日指 82 | 定オプションを使用します。 83 | みどりの日の例のように &[yyyy-mm-dd]. で終了日を指定することも出来ます。 84 | @@ は毎月、 @ は一回限りの指定です。 85 | 86 | デフォルトでは日曜日が5個定義されていますが、鬱陶しい場合は週(7日)単位の繰り返 87 | しにしてやると予定表示した時に最も近い日曜日のみが表示されるようになります。 88 | > 89 | " 7日ごとの繰り返し 90 | [0001-01-07]@(7)0 日曜日 91 | 92 | * 振替休日と春分/秋分の日 93 | 94 | 日曜が祝日なら次の平日が振替休日となりますが、これを自動で生成することが出来ま 95 | す。 96 | > 97 | [0000-00-00]@0 Sunday=日曜日 98 | [1973-00-00]@0 振替休日=日曜日 99 | [0001-01-07]@(7)0 日曜日 100 | 101 | [1973-00-00]@0 振替休日=日曜日 のように月と日を00にして「日曜日」の表記を指定 102 | してやると祝日が「日曜日」と重なった場合に自動で振替休日を生成します。 103 | 振替休日の定義は定義ファイルの一番最初にある必要があります。 104 | 105 | また「春分の日」と「秋分の日」も自動生成が可能です。 106 | > 107 | [1948-00-00]@0 春分の日 108 | [1948-00-00]@0 秋分の日 109 | 110 | ------------------------------------------------------------------------------ 111 | 休日定義ファイルのファイルエンコーディング 112 | 113 | 休日定義ファイルのfileencoding は自動判定されますがBOMは扱えません。 114 | 基本的にはUTF-8かcp932等のBOMなしファイルエンコーディングを使用してください。 115 | BOM付きファイルエンコーディングはおすすめしませんが、どうしても使用したい場合 116 | は次のように指定します。 117 | > 118 | let g:calendar_holidayfile_fileencoding = 'utf-16' 119 | 120 | ------------------------------------------------------------------------------ 121 | 3.2 サインとアクション *howm_calendar_customize* 122 | 123 | 日付上でを押すと日記を書くなどのアクションが実行可能です。 124 | QFixHowm/QFixMemoを使用している場合は自動設定されるので設定不要です。 125 | 126 | サインは howm_calendar_sign 、日付のアクションには howm_calendar_actionで設定 127 | された関数が呼び出されるので任意の関数を実行することが可能です。 128 | サインとアクションのQFixHowm/QFixMemoでの設定と同じ物は以下の通りですので、好 129 | みに改変してください。 130 | 131 | サイン 132 | サインは +!#$%&@? が使用可能ですが #@ は休日としてハイライトされます。 133 | > 134 | let howm_calendar_sign = "MyCalendarSign" 135 | 136 | " カレンダーのサインを返す 137 | " NOTE: @ # は休日としてハイライトされる 138 | let howm_calendar_flag=['', '+', '@', '#'] 139 | function! MyCalendarSign(day, month, year) 140 | " holiday : 日曜以外の休日かどうか 141 | let holiday = datelib#HolidayCheck(a:year, a:month, a:day, 'Sun') 142 | " file : フルパスの日記ファイル名 143 | let file = QFixMemoCalendarFile(a:year, a:month, a:day) 144 | let id = filereadable(expand(file)) + holiday*2 145 | return g:howm_calendar_flag[id] 146 | endfunction 147 | 148 | アクション 149 | > 150 | let howm_calendar_action = "MyCalendarDiary" 151 | " カレンダーの日付上でを押した場合に呼び出される 152 | " CAUTION: weekは calendar_vimとの整合性を保つためのもので使用不可 153 | " NOTE: dir には現在のqfixmemo_dir(howm_dir)がコピーされている 154 | function! MyCalendarDiary(day, month, year, week, dir) 155 | let year = printf("%4.4d", a:year) 156 | let month = printf("%2.2d", a:month) 157 | let day = printf("%2.2d", a:day) 158 | " NOTE: QFixHowmとして使用している場合は qfixmemo_diaryに QFixHowm_DiaryFileがコピーされている 159 | let file = g:qfixmemo_diary 160 | let file = substitute(file, '%Y', year, 'g') 161 | let file = substitute(file, '%m', month, 'g') 162 | let file = substitute(file, '%d', day, 'g') 163 | call qfixmemo#Edit(file) 164 | endfunction 165 | 166 | 改変例 167 | 日付で日記を開く代わりに日付を検索 168 | > 169 | function! MyCalendarDiary(day, month, year, week, dir) 170 | let year = printf("%4.4d", a:year) 171 | let month = printf("%2.2d", a:month) 172 | let day = printf("%2.2d", a:day) 173 | let pattern = printf('^\[%s-%s-%s ', year, month, day) 174 | call qfixlist#GrepCopen(pattern, g:qfixmemo_dir, '**/*', g:qfixmemo_fileencoding) 175 | endfunction 176 | 177 | ------------------------------------------------------------------------------ 178 | 4. 他のプラグイン等で利用する(datelib.vim) *howm_calendar_datelib* 179 | 実際の日付処理はdatelib.vimでライブラリ化されています。 180 | > 181 | " 指定日が休日かチェック 182 | :echo datelib#HolidayCheck(year, month, day) 183 | 184 | " 指定日が日曜以外の休日かチェック 185 | :echo datelib#HolidayCheck(year, month, day, 'Sun') 186 | 187 | " 少なくとも指定年の休日定義が含まれる辞書を取得 188 | :let tbl = datelib#GetHolidayTable(2012) 189 | 190 | :echo tbl['20121123'] " 「文化の日」と表示される 191 | " NOTE: calendar_holidayfileのファイルエンコーディングは考慮していないので 192 | " 呼び出し側が処理する必要がある。 193 | 194 | vim:tw=78:ts=8:ft=help:norl 195 | -------------------------------------------------------------------------------- /misc/qfixmemo-chenv.vim: -------------------------------------------------------------------------------- 1 | "============================================================================= 2 | " Description: QFixMemo環境変更スクリプト 3 | " 4 | " CAUTION: このスクリプトは "QFixMemo" 専用です。 5 | " "QFixHowm"として使用している場合は 6 | " "howm-chenv.vim"を使用してください。 7 | " 8 | " Author: fuenor 9 | " http://sites.google.com/site/fudist/Home/qfixhowm 10 | " Last Modified: 2013-07-29 18:23 11 | " Version: 1.01 12 | "============================================================================= 13 | scriptencoding UTF-8 14 | 15 | if exists('disable_qfixmemo') && disable_qfixmemo 16 | finish 17 | endif 18 | if exists("disable_QFixMemoChEnv") && disable_QFixMemoChEnv == 1 19 | finish 20 | endif 21 | if exists("loaded_QFixMemoChEnv") 22 | finish 23 | endif 24 | let loaded_QFixMemoChEnv = 1 25 | if v:version < 700 26 | finish 27 | endif 28 | 29 | " (設定例) 30 | " 以下を .vimrcへ追加 31 | " 32 | " " 現メモディレクトリ表示 33 | " nnoremap g,hh :echo qfixmemo_dir 34 | " " 環境変更コマンド 35 | " nnoremap g,ha :call QFixMemoChEnv('', 'time', '=') 36 | " nnoremap g,hm :call QFixMemoChEnv('main', 'time', '=') 37 | " nnoremap g,hw :call QFixMemoChEnv('work', 'day', '=') 38 | " nnoremap g,hc :call QFixMemoChEnv('pc', 'time', '= [:pc]') 39 | " nnoremap g,hd :call QFixMemoChEnv('memo-mkd', 'time', '#') 40 | " nnoremap g,hd :call QFixMemoChEnv('memo-org', 'time', '.') 41 | " nnoremap g,hv :call QFixMemoChEnv('vimwiki', 'time', '=') 42 | " 43 | " (オプション解説) 44 | " :call QFixMemoChEnv(dir, fileformat, title) 45 | " 46 | " dir 47 | " 使用するディレクトリ指定 48 | " 基準ディレクトリ下の dir が付加されたディレクトリを使用する 49 | " 基準ディレクトリは以下の順番で決定される 50 | " 1. qfixmemo_chenv_dir 51 | " 2. qfixmemo_root 52 | " 3. qfixmemo_dir 53 | " 54 | " なおdirの最後に -mkd がつくとファイルタイプが markdown、-org ならorg、 55 | " vimwikiなら vimwikiに設定される。 56 | " 57 | " format 58 | " 生成するファイル名指定 59 | " | month | 月単位 | 60 | " | day | 日単位 | 61 | " | time | 時刻単位 | 62 | " 63 | " title 64 | " 最初の空白までをタイトル記号として qfixmemo_title へ設定。 65 | " 空白以降はタグとして qfixmemo_template_tag へ登録される 66 | " 67 | " NOTE: 68 | " キーマップ定義にQFixMemoKeymapPost() を使用するとキーマップリーダーが自動変更される 69 | " function! QFixMemoKeymapPost() 70 | " nnoremap ha :call QFixMemoChEnv('', 'time', '=') 71 | " nnoremap hm :call QFixMemoChEnv('main', 'time', '=') 72 | " nnoremap hw :call QFixMemoChEnv('work', 'day', '=') 73 | " nnoremap hc :call QFixMemoChEnv('pc', 'time', '= [:pc]') 74 | " endfunction 75 | 76 | " NOTE: 77 | " 通常MRUリストは qfixmemo_dirを基準とする相対パスで保持するがqfixmemo_dirを切 78 | " り替える場合には基準ディレクトリが異なるためパスを維持できなくなる。 79 | " 対処として本プラグインではMRUの基準ディレクトリQFixMRU_RootDirに 80 | " 本プラグインの基準ディレクトリ qfixmemo_chenv_dirを設定する。 81 | " ユーザーが独自にQFixMRU_RootDirを指定する場合は QFixMemoの基準ディレクトリよ 82 | " り上位のディレクトリを指定する必要がある。 83 | " 84 | """""""""""""""""""""""""""""" 85 | " スクリプトファイル名 86 | if !exists('g:qfixmemo_chenv_file') 87 | let g:qfixmemo_chenv_file = '~/.qfixmemoenv.vim' 88 | endif 89 | " 基準ディレクトリ 90 | if !exists('g:qfixmemo_chenv_dir') 91 | let g:qfixmemo_chenv_dir = '~/qfixmemo' 92 | if exists('g:qfixmemo_root') 93 | let g:qfixmemo_chenv_dir = g:qfixmemo_root 94 | elseif exists('g:qfixmemo_dir') 95 | let g:qfixmemo_chenv_dir = g:qfixmemo_dir 96 | endif 97 | endif 98 | " MRUの基準ディレクトリを設定する 99 | if !exists('g:QFixMRU_RootDir') 100 | let g:QFixMRU_RootDir = g:qfixmemo_chenv_dir 101 | endif 102 | " デフォルト拡張子設定(qfixmemo-chenv.vimのみ有効) 103 | if !exists('g:qfixmemo_chenv_ext') 104 | let g:qfixmemo_chenv_ext = '' 105 | if exists('g:qfixmemo_filename') 106 | let g:qfixmemo_chenv_ext = fnamemodify(g:qfixmemo_filename, ':e') 107 | endif 108 | if exists('g:qfixmemo_ext') 109 | let g:qfixmemo_chenv_ext = g:qfixmemo_ext 110 | endif 111 | if g:qfixmemo_chenv_ext == '' 112 | let g:qfixmemo_chenv_ext = 'txt' 113 | endif 114 | endif 115 | " デフォルトファイルタイプ(qfixmemo-chenv.vimのみ有効) 116 | if !exists('g:qfixmemo_chenv_filetype') 117 | let g:qfixmemo_chenv_filetype = '' 118 | if exists('g:qfixmemo_filetype') 119 | let g:qfixmemo_chenv_filetype = g:qfixmemo_filetype 120 | endif 121 | if g:qfixmemo_chenv_filetype == '' 122 | let g:qfixmemo_chenv_filetype = 'qfix_memo' 123 | endif 124 | endif 125 | 126 | " ランダム表示保存ファイル 127 | if !exists('g:qfixmemo_random_file') 128 | let g:qfixmemo_random_file = '~/.qfixmemo-random' 129 | endif 130 | let s:qfixmemo_random_file = g:qfixmemo_random_file 131 | 132 | command! -nargs=1 QFixMemoChdir let qfixmemo_dir = qfixmemo_chenv_dir. |echo "qfixmemo_dir = ".qfixmemo_dir 133 | function! QFixMemoChEnv(dir, fname, title) 134 | if exists('g:QFixMRU_state') && g:QFixMRU_state == 1 135 | call QFixMRUWrite(0) 136 | call QFixMRUWrite(1) 137 | endif 138 | 139 | let g:qfixmemo_dir = g:qfixmemo_chenv_dir . '/' . a:dir 140 | let g:qfixmemo_dir = substitute(g:qfixmemo_dir, '[/\\]$', '', '') 141 | 142 | " ファイル拡張子とファイルタイプの指定 143 | if a:dir =~ '-mkd$' 144 | let g:qfixmemo_ext = 'mkd' 145 | let g:qfixmemo_filetype = 'markdown' 146 | elseif a:dir =~ '-org$' 147 | let g:qfixmemo_ext = 'org' 148 | let g:qfixmemo_filetype = 'org' 149 | elseif a:dir =~ 'vimwiki$' 150 | let g:qfixmemo_ext = 'wiki' 151 | let g:qfixmemo_filetype = 'vimwiki' 152 | else 153 | let g:qfixmemo_ext = g:qfixmemo_chenv_ext 154 | let g:qfixmemo_filetype = g:qfixmemo_chenv_filetype 155 | endif 156 | let g:qfixmemo_random_dir = g:qfixmemo_dir 157 | let g:qfixmemo_random_file = s:qfixmemo_random_file . '-' . a:dir 158 | 159 | " タイトルマーカーとタイトル行のタグ設定 160 | let g:qfixmemo_title = matchstr(a:title, '^[^[:space:]]\+') 161 | let title = strpart(a:title, strlen(g:qfixmemo_title)) 162 | let title = substitute(title, '^\s*\|\s*$', '', 'g') 163 | let g:qfixmemo_template_tag = title 164 | 165 | " ファイル名設定 166 | if a:fname == 'month' 167 | let g:qfixmemo_filename = '%Y/%Y-%m' 168 | elseif a:fname == 'day' 169 | let g:qfixmemo_filename = '%Y/%m/%Y-%m-%d' 170 | elseif a:fname == 'time' 171 | let g:qfixmemo_filename = '%Y/%m/%Y-%m-%d-%H%M%S' 172 | else 173 | " do nothing 174 | endif 175 | 176 | echo "qfixmemo : ". (a:dir != "" ? a:dir : 'all') 177 | 178 | " スクリプト作成 179 | let file = expand(g:qfixmemo_chenv_file) 180 | let dir = fnamemodify(file, ':p:h') 181 | if (isdirectory(dir) == 0) 182 | silent! call mkdir(dir, 'p') 183 | endif 184 | let str = [] 185 | let cmd = 'silent call QFixMemoChEnv('."'".a:dir."', '".a:fname."', '".a:title."')" 186 | call add(str, cmd) 187 | let ostr = readfile(file) 188 | if str != ostr 189 | call writefile(str, file) 190 | endif 191 | endfunction 192 | 193 | silent! exec 'silent! source '.g:qfixmemo_chenv_file 194 | if !filereadable(expand(g:qfixmemo_chenv_file)) 195 | silent! call QFixMemoChEnv('', 'time', '=') 196 | endif 197 | 198 | " for keymap compatibility 199 | function! HowmChEnv(dir, fname, title) 200 | return QFixMemoChEnv(a:dir, a:fname, a:title) 201 | endfunction 202 | 203 | -------------------------------------------------------------------------------- /misc/howm-chenv.vim: -------------------------------------------------------------------------------- 1 | "============================================================================= 2 | " Description: QFixHowm環境変更スクリプト 3 | " 4 | " CAUTION: このスクリプトは "QFixHowm" 専用です。 5 | " "QFixMemo"として使用している場合は 6 | " "qfixmemo-chenv.vim"を使用してください。 7 | " 8 | " Author: fuenor 9 | " http://sites.google.com/site/fudist/Home/qfixhowm 10 | " Last Modified: 2013-07-29 18:23 11 | " Version: 1.08 12 | "============================================================================= 13 | scriptencoding utf-8 14 | 15 | if exists('disable_MyHowm') && disable_MyHowm 16 | finish 17 | endif 18 | if exists("disable_QFixHowmChEnv") && disable_QFixHowmChEnv 19 | finish 20 | endif 21 | if exists("disable_MyHowmChEnv") && disable_MyHowmChEnv 22 | finish 23 | endif 24 | if exists("loaded_QFixHowmChEnv") 25 | finish 26 | endif 27 | let loaded_QFixHowmChEnv = 1 28 | if v:version < 700 29 | finish 30 | endif 31 | 32 | " (設定例) 33 | " 以下を .vimrcへ追加 34 | " 35 | " " 現メモディレクトリ表示 36 | " nnoremap g,hh :echo howm_dir 37 | " " 環境変更コマンド 38 | " nnoremap g,ha :call HowmChEnv('', 'time', '=') 39 | " nnoremap g,hm :call HowmChEnv('main', 'time', '=') 40 | " nnoremap g,hw :call HowmChEnv('work', 'day', '=') 41 | " nnoremap g,hc :call HowmChEnv('pc', 'time', '= [:pc]') 42 | " nnoremap g,hd :call HowmChEnv('howm-mkd', 'time', '#') 43 | " nnoremap g,hd :call HowmChEnv('howm-org', 'time', '.') 44 | " nnoremap g,hv :call HowmChEnv('vimwiki', 'time', '=') 45 | " 46 | " (オプション解説) 47 | " :call HowmChEnv(dir, fileformat, title) 48 | " 49 | " dir 50 | " 使用するディレクトリ指定 51 | " 基準ディレクトリ下の dir が付加されたディレクトリを使用する 52 | " 基準ディレクトリは以下の順番で決定される 53 | " 1. QFixHowm_ChDir 54 | " 2. QFixHowm_RootDir 55 | " 3. qfixmemo_dir 56 | " 4. howm_dir 57 | " 58 | " なおdirの最後に -mkd がつくとファイルタイプが markdown、-org ならorg、 59 | " vimwikiなら vimwikiに設定される。 60 | " 61 | " format 62 | " 生成するファイル名指定 63 | " | month | 月単位 | 64 | " | day | 日単位 | 65 | " | time | 時刻単位 | 66 | " 67 | " title 68 | " 最初の空白までをタイトル記号として QFixHowm_Title へ設定。 69 | " 空白以降はタグとして QFixHowm_DefaultTag へ登録される 70 | 71 | " NOTE: 72 | " 通常MRUリストは howm_dirを基準とする相対パスで保持するがhowm_dirを切り替える 73 | " 場合には基準ディレクトリが異なるためパスを維持できなくなる。 74 | " 対処として本プラグインではMRUの基準ディレクトリQFixMRU_RootDirに 75 | " 本プラグインの基準ディレクトリ QFixHowm_ChDirを設定する。 76 | " ユーザーが独自にQFixMRU_RootDirを指定する場合は QFixHowmの基準ディレクトリよ 77 | " り上位のディレクトリを指定する必要がある。 78 | 79 | " スクリプトファイル名 80 | if !exists('g:QFixHowmChEnvFile') 81 | let g:QFixHowmChEnvFile = '~/.howmenv.vim' 82 | endif 83 | " 基準ディレクトリ 84 | if !exists('g:QFixHowm_ChDir') 85 | let g:QFixHowm_ChDir = '~/howm' 86 | if exists('g:QFixHowm_RootDir') 87 | let g:QFixHowm_ChDir = g:QFixHowm_ChDir 88 | elseif exists('g:qfixmemo_dir') 89 | let g:QFixHowm_ChDir = g:qfixmemo_dir 90 | elseif exists('g:howm_dir') 91 | let g:QFixHowm_ChDir = g:howm_dir 92 | endif 93 | endif 94 | " MRUの基準ディレクトリを設定する 95 | if !exists('g:QFixMRU_RootDir') 96 | let g:QFixMRU_RootDir = g:QFixHowm_ChDir 97 | if exists('g:QFixHowm_RootDir') 98 | let g:QFixMRU_RootDir = g:QFixHowm_RootDir 99 | endif 100 | endif 101 | " デフォルト拡張子設定(howm-chenv.vimのみ有効) 102 | if !exists('g:QFixHowmChEnv_FileExt') 103 | let g:QFixHowmChEnv_FileExt = '' 104 | if exists('g:howm_filename') 105 | let g:QFixHowmChEnv_FileExt = fnamemodify(g:howm_filename, ':e') 106 | endif 107 | if exists('g:QFixHowm_FileExt') 108 | let g:QFixHowmChEnv_FileExt = g:QFixHowm_FileExt 109 | endif 110 | if g:QFixHowmChEnv_FileExt == '' 111 | let g:QFixHowmChEnv_FileExt = 'txt' 112 | endif 113 | endif 114 | " デフォルトファイルタイプ(howm-chenv.vimのみ有効) 115 | if !exists('g:QFixHowmChEnv_FileType') 116 | let g:QFixHowmChEnv_FileType = '' 117 | if exists('g:QFixHowm_FileType') 118 | let g:QFixHowmChEnv_FileType = g:QFixHowm_FileType 119 | endif 120 | if g:QFixHowmChEnv_FileType == '' 121 | let g:QFixHowmChEnv_FileType = 'howm_memo' 122 | endif 123 | endif 124 | 125 | " デフォルト設定 126 | if !exists('g:howm_filename') 127 | let g:howm_filename = '%Y/%m/%Y-%m-%d-%H%M%S.'.g:QFixHowmChEnv_FileExt 128 | endif 129 | if !exists('g:QFixHowm_FileExt') 130 | let g:QFixHowm_FileExt = fnamemodify(g:howm_filename,':e') 131 | endif 132 | 133 | " ランダム表示保存ファイル 134 | if !exists('g:QFixHowm_RandomWalkFile') 135 | let g:QFixHowm_RandomWalkFile = '~/.howm-random' 136 | endif 137 | let s:QFixHowm_RandomWalkFile = g:QFixHowm_RandomWalkFile 138 | 139 | command! -nargs=1 HowmChdir let howm_dir = QFixHowm_ChDir. |echo "howm_dir = ".howm_dir 140 | function! HowmChEnv(dir, fname, title) 141 | if exists('g:QFixMRU_state') && g:QFixMRU_state == 1 142 | call QFixMRUWrite(0) 143 | call QFixMRUWrite(1) 144 | endif 145 | if a:dir =~ 'vimwiki$' 146 | let g:QFixHowm_HowmMode = 0 147 | let suffix = 'wiki' 148 | let g:QFixHowm_UserFileType = 'vimwiki' 149 | let g:QFixHowm_UserFileExt = suffix 150 | let g:QFixHowm_RandomWalkFile = s:QFixHowm_RandomWalkFile . '-' . suffix 151 | elseif a:dir =~ '-mkd$' 152 | let g:QFixHowm_HowmMode = 0 153 | let suffix = 'mkd' 154 | let g:QFixHowm_UserFileType = 'markdown' 155 | let g:QFixHowm_UserFileExt = suffix 156 | let g:QFixHowm_RandomWalkFile = s:QFixHowm_RandomWalkFile . '-' . suffix 157 | elseif a:dir =~ '-org$' 158 | let g:QFixHowm_HowmMode = 0 159 | let suffix = 'org' 160 | let g:QFixHowm_UserFileType = 'org' 161 | let g:QFixHowm_UserFileExt = suffix 162 | let g:QFixHowm_RandomWalkFile = s:QFixHowm_RandomWalkFile . '-' . suffix 163 | else 164 | let g:QFixHowm_HowmMode = 1 165 | let suffix = g:QFixHowmChEnv_FileExt 166 | let g:QFixHowm_FileType = g:QFixHowmChEnv_FileType 167 | let g:QFixHowm_FileExt = suffix 168 | let g:QFixHowm_RandomWalkFile = s:QFixHowm_RandomWalkFile . '-' . a:dir 169 | endif 170 | 171 | let g:QFixHowm_Title = matchstr(a:title, '^[^[:space:]]\+') 172 | let title = strpart(a:title, strlen(g:QFixHowm_Title)) 173 | let title = substitute(title, '^\s*\|\s*$', '', 'g') 174 | let g:QFixHowm_DefaultTag = title 175 | 176 | let g:howm_dir = g:QFixHowm_ChDir . '/' . a:dir 177 | let g:howm_dir = substitute(g:howm_dir, '[/\\]$', '', '') 178 | if a:fname == 'month' 179 | let g:howm_filename = '%Y/%Y-%m.'.suffix 180 | elseif a:fname == 'day' 181 | let g:howm_filename = '%Y/%m/%Y-%m-%d.'.suffix 182 | elseif a:fname == 'time' 183 | let g:howm_filename = '%Y/%m/%Y-%m-%d-%H%M%S.'.suffix 184 | endif 185 | 186 | let g:howm_filename = fnamemodify(g:howm_filename, ':r').'.'.suffix 187 | if exists('g:QFixHowm_DiaryFile') 188 | let g:QFixHowm_DiaryFile = fnamemodify(g:QFixHowm_DiaryFile, ':r').'.'.suffix 189 | endif 190 | if exists('g:QFixHowm_QuickMemoFile') 191 | let g:QFixHowm_QuickMemoFile = fnamemodify(g:QFixHowm_QuickMemoFile, ':r').'.'.suffix 192 | endif 193 | 194 | " QFixMemoオプションへ変換 195 | if exists('*QFixHowmSetup') 196 | call QFixHowmSetup() 197 | endif 198 | echo "howm_dir : ". (a:dir != "" ? a:dir : 'all') 199 | 200 | " スクリプト作成 201 | let file = expand(g:QFixHowmChEnvFile) 202 | let dir = fnamemodify(file, ':p:h') 203 | if (isdirectory(dir) == 0) 204 | silent! call mkdir(dir, 'p') 205 | endif 206 | let str = [] 207 | let cmd = 'silent call HowmChEnv('."'".a:dir."', '".a:fname."', '".a:title."')" 208 | cal add(str, cmd) 209 | let ostr = readfile(file) 210 | if str != ostr 211 | call writefile(str, file) 212 | endif 213 | if exists('g:fudist') && g:fudist 214 | let g:qfixmemo_random_dir = g:qfixmemo_dir 215 | endif 216 | endfunction 217 | 218 | silent! exec 'silent! source '.g:QFixHowmChEnvFile 219 | if !filereadable(expand(g:QFixHowmChEnvFile)) 220 | silent! call HowmChEnv('', 'time', '=') 221 | endif 222 | 223 | " for keymap compatibility 224 | function! QFixMemoChEnv(dir, fname, title) 225 | return HowmChEnv(a:dir, a:fname, a:title) 226 | endfunction 227 | 228 | -------------------------------------------------------------------------------- /doc/openuri.jax: -------------------------------------------------------------------------------- 1 | *openuri.jax* For Vim バージョン 7.2 Last change: 2011 November 14 2 | ============================================================================== 3 | Description: open URI 4 | Author: fuenor 5 | Web(Japanese): 6 | http://sites.google.com/site/fudist/Home 7 | http://sites.google.com/site/fudist/Home/qfixdev/ver3 8 | ============================================================================== 9 | CONTENTS *openuri_contents* 10 | 1. Intro |openuri_intro| 11 | 2. インストール |openuri_settings| 12 | 3. コマンド |openuri_command| 13 | 4. URI記述のフォーマット |openuri_uri| 14 | 4.1 特殊なパスのテキストリンク |openuri_path| 15 | 4.2 基準ディレクトリ |openuri_basedir| 16 | 5. オプション |openuri_option| 17 | 5.1 独自ブラウザ起動オプション |openuri_alt_option| 18 | 5.2 QFixHowmブラウザ起動オプション |openuri_qfixhowm| 19 | 5.3 netrwブラウザ起動オプション |openuri_netrw| 20 | 6. シンタックスハイライト |openuri_syntax| 21 | 22 | ============================================================================== 23 | 1. Intro *openuri_intro* 24 | 25 | openuri.vimはURIや画像ファイル等のテキストリンクをVimや外部ブラウザで開くため 26 | のプラグインです。 27 | openuri.vimでは直接パスや相対パスはもちろん、空白や日本語を含むパスも開くこと 28 | が可能です。 29 | 30 | ============================================================================== 31 | 2. インストール *openuri_settings* 32 | openuri.vimをruntimepathの通った場所へコピーしてください。 33 | autoloadでの読み込みにも対応しています。 34 | 35 | ============================================================================== 36 | 3. コマンド *openuri_command* 37 | 38 | コマンドモードからURIを開きたい場合は直接実行可能です。 39 | :Openuri 40 | :Openuri http://www.example.com 41 | :call openuri#open('http://www.example.com') 42 | 43 | NOTE: openuri.vimをautoloadで読み込むと、起動直後は :Openuri コマンドがロード 44 | されていません。 45 | そのような場合は初期化関数を呼び出すとロードされます。 46 | :call openuri#init() 47 | 48 | 適当なバッファを開いてURIを記述してから、カーソルをURI上に移動し Openuri 49 | を実行するとURIを開きます。 50 | (例) カーソルを http://www.example.com 上に移動しコマンドを実行します。 51 | :Openuri 52 | 53 | `gx`にopenuriをキーマップすることも可能です。 > 54 | nnoremap gx :call openuri#open() 55 | vnoremap gx :call openuri#openVis() 56 | 57 | openuri.vimで開くことが可能なURIは以下のシンタックスで強調表示できます。 > 58 | " URIのシンタックス定義 59 | syn match txtUrl '\(http\|https\|file\|ftp\)://[-0-9a-zA-Z;/?:@&=+$,_.!~*'()%#]*' 60 | syn match txtFile '\(memo\|rel\|howm\)://[-0-9a-zA-Z;/?:@&=+$,_.!~*'()%#}[\]\\]*' 61 | syn match txtFile '\([A-Za-z]:[/\\]\|\~[/\\]\)[-0-9a-zA-Z;/?:@&=+$,_.!~*'()%{}[\]\\]\+' 62 | syn match txtFile '\[:\?&\?\zs\(memo\|rel\|howm\|https\|http\|file\|ftp\)://[^:]\+\ze:[^\]]*]' 63 | syn match txtFile '\[:\?&\?\zs\([A-Za-z]:[/\\]\|\~[/\\]\|\.\.\?[/\\]\|[/\\]\)[^:]\+\ze:[^\]]*]' 64 | 65 | hi link txtUrl Underlined 66 | hi link txtFile Underlined 67 | 68 | ============================================================================== 69 | 4. URI記述のフォーマット *openuri_uri* 70 | 71 | openuriで使用可能なスキームは以下のとおりです。 72 | | *スキーム | *基準ディレクトリ | 73 | | http:// | | 74 | | https:// | | 75 | | ftp:// | | 76 | | file:// | | 77 | | howm:// | howm_dir | 78 | | memo:// | openuri_memopath | 79 | | rel:// | openuri_relpath | 80 | 81 | (記述例) 82 | http://www.example.com 83 | http://www.example.com:80 84 | 85 | ファイルパスを直接記述してもURIとして認識されます。 86 | ~/hoge.txt 87 | c:\temp\hoge.txt 88 | 89 | ------------------------------------------------------------------------------ 90 | 4.1 特殊なパスのテキストリンク *openuri_path* 91 | 92 | パスに空白や日本語を含んでいたり、 / や \ で始まるパスは [ と :] で囲むことで 93 | 使用可能です。 94 | [C:/temp\ho ge.txt:] [/temp/ふが.txt:] 95 | 96 | 相対パスやUNCパス(Windowsの\\で表されるネットワークパス)も使用可能です。 97 | 相対パスは現バッファと関連付けられているファイルのパスを基準ディレクトリとして 98 | 変換されます。 99 | 相対パス 100 | [./hoge.txt:] 101 | [../hoge/puyo.txt:] 102 | UNCパス 103 | [\\hmsv\share\fuga.txt:] 104 | 105 | http:// や画像ファイル等はVimではなくブラウザを起動して開きます。 106 | [C:\temp/テスト.jpg:] 107 | 108 | NOTE: 記述上の意味はありませんが [ と :] ではなく [: と :]で囲んでも構いません。 109 | 110 | ------------------------------------------------------------------------------ 111 | 4.2 基準ディレクトリ *openuri_basedir* 112 | 113 | openuri.vim独自の基準ディレクトリを指定してファイルパスを記述できます。 114 | 基準ディレクトリを使用するとメモファイルをディレクトリごと移動しても、メモファ 115 | イル中のファイルパスを書き換える必要なくファイルを参照可能になります。 116 | 117 | 例えば rel:// を使用したファイルパス rel://puyo.txt は openuri_relpath が 118 | c:/temp/rel だとすると c:/temp/rel/puyo.txt として扱われます。 119 | 120 | .vimrc > 121 | " rel:// の基準ディレクトリ 122 | let openuri_relpath = 'c:/temp/rel' 123 | 124 | | *スキーム | *基準ディレクトリ | 125 | | howm:// | howm_dir | 126 | | memo:// | openuri_memopath | 127 | | rel:// | openuri_relpath | 128 | 129 | NOTE: openuri_memopathを設定しない場合は memo://の変換にhowm_dir(qfixmemo_dir) 130 | がデフォルトとして使用されます。 131 | 132 | NOTE: ユーザー独自スキームも追加可能です。たとえば user:// を追加したい場合は 133 | openuri#AddSchemeで追加してください。 134 | :call openuri#AddScheme('user', "c:/temp/user") 135 | 136 | ============================================================================== 137 | 5. オプション *openuri_option* 138 | 139 | Vimで開くファイルの拡張子とopenuriで開くブラウザをオプションで設定可能です。 140 | 141 | .vimrc > 142 | " Vimで開く拡張子の正規表現 143 | let openuri_vimextreg = '\.\(txt\|mkd\|wiki\|rd\|vim\|js\|java\|py\|rb\|h\|c\|cpp\|ini\|conf\)$' 144 | 145 | ------------------------------------------------------------------------------ 146 | 5.1 ブラウザ起動オプション *openuri_alt_option* 147 | 148 | テキストリンクをを開くブラウザ指定を独自に行うことも可能です。 149 | > 150 | " リンクを開くブラウザ指定 151 | if has('mac') 152 | let g:openuri_cmd = "call system('open %s')" 153 | elseif has('unix') 154 | let openuri_cmd = "call system('firefox %s &')" 155 | else 156 | " let openuri_cmd = '!start "rundll32.exe" url.dll,FileProtocolHandler %s' 157 | " Internet explorer 158 | let openuri_cmd = '!start "C:/Program Files/Internet Explorer/iexplore.exe" %s' 159 | " firefox 160 | " let openuri_cmd = '!start "C:/Program Files/Mozilla Firefox/firefox.exe" %s' 161 | endif 162 | 163 | 特定の拡張子だけユーザ指定のプログラムで開く事も出来ます。 164 | たとえば pdfファイルを外部プログラムを指定して開きたい場合は、openuri_pdf のよ 165 | うに openuri_ の後に拡張子を付加した環境オプションを設定します。 166 | 167 | .vimrc > 168 | " 拡張子別の起動プログラムを指定する 169 | " pdfの指定 170 | if has('unix') 171 | " Linux(Ubuntu)は evince で開く 172 | let openuri_pdf = "call system('evince %s &')" 173 | else 174 | " Windowsは Acrobat Reader で開く 175 | let openuri_pdf = '!start "C:/Program Files/Adobe/Reader 10.0/Reader/AcroRd32.exe" %s' 176 | endif 177 | < 178 | NOTE: WindowsのChromeではcmd /c をつけないと起動できないことがあります。 179 | 将来的にChromeのバージョンアップで起動できるようになった場合は cmd /cを削除し 180 | てください。 > 181 | let openuri_cmd = '!start cmd /c "'.$USERPROFILE.'\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" %s' 182 | 183 | NOTE: Windowsの関連付けで開くようにするには rundll32を使用します。 184 | > 185 | let openuri_cmd = '!start "rundll32.exe" url.dll,FileProtocolHandler %s' 186 | 187 | ------------------------------------------------------------------------------ 188 | 5.2 QFixHowmブラウザ起動オプション *openuri_qfixhowm* 189 | 190 | 開発経緯の関係でQFixHowmのURIオプションがある場合は、QFixHowmオプションが優先 191 | されます。 192 | オプションの対応関係は以下のとおりです。 193 | 194 | | openuri_vimextreg | QFixHowm_OpenVimExtReg | 195 | | openuri_cmd | QFixHowm_OpenURIcmd | 196 | | openuri_ | QFixHowm_Opencmd_ | 197 | 198 | ------------------------------------------------------------------------------ 199 | 5.3 netrwブラウザ起動オプション *openuri_netrw* 200 | 201 | netrwを利用して openuri_vimextreg 以外のファイルを開きます。 202 | > 203 | " テキストリンクを開くブラウザ指定 204 | let openuri_cmd = 'netrw' 205 | 206 | |netrw|はVimに標準添付されているブラウジングプラグインで|gx|コマンドの実体です。 207 | ブラウザや拡張子ごとの起動プログラム指定は|gx|を参照してください。 208 | 209 | OSやnetrwのバージョンによって挙動が異なることがあります。 210 | 211 | ------------------------------------------------------------------------------ 212 | 6. シンタックスハイライト *openuri_syntax* 213 | 214 | openuri.vimと対応したURIのシンタックスハイライトは以下の通りです。 215 | > 216 | " URLとファイル 217 | 218 | syn match qfixmemoTextUrl '\(http\|https\|ftp\|git\)://[-0-9a-zA-Z!#$%&'*+,./:;=?@_~]*' 219 | syn match qfixmemoTextFile '\(file\|rel\|memo\|howm\)://[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\]\\]*' 220 | syn match qfixmemoTextFile '\zs\([A-Za-z]:[/\\]\|\~[/\\]\|[\\][\\]\|\.\.\?[/\\]\)[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\]\\]\+\ze[^\])[:blank:]]\?' 221 | if !exists('g:openuri_unix_style_path') || g:openuri_unix_style_path 222 | syn match qfixmemoTextFile '\zs\(/[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\]\\]\+\)\{2,}\ze[^\])[:blank:]]\?' 223 | endif 224 | syn match qfixmemoTextFile '\[:\?&\?\zs\(memo\|rel\|howm\|https\|http\|file\|ftp\|git\)://\([a-zA-Z]:\)\?[^:]\+\ze:[^\]]*]' 225 | syn match qfixmemoTextFile '\[:\?&\?\zs\([A-Za-z]:[/\\]\|\~[/\\]\|\.\.\?[/\\]\|[/\\]\)[^:]\+\ze:[^\]]*]' 226 | hi def link qfixmemoTexFile Underlined 227 | hi def link qfixmemoTexUrl Underlined 228 | 229 | QFixMemoのqfix_memoファイルタイプで同じものが設定されているので、QFixMemoを使 230 | 用してる場合は:set ft=qfix_memoを設定しても良いかもしれません。 231 | 232 | なおopenuri_unix_style_path = 0 に設定すると /で始まる文字列をパスとして扱わな 233 | くなります。 234 | 235 | vim:tw=78:ts=8:ft=help:syn=qfixmemo.help:norl 236 | 237 | -------------------------------------------------------------------------------- /syntax/qfix_memo.vim: -------------------------------------------------------------------------------- 1 | " Vim syntax file 2 | " Language: qfix_memo 3 | 4 | if exists("b:current_syntax") 5 | finish 6 | endif 7 | 8 | if !exists('g:qfixmemo_markdown_syntax') 9 | let g:qfixmemo_markdown_syntax = 1 10 | endif 11 | if g:qfixmemo_markdown_syntax 12 | runtime! syntax/markdown.vim 13 | syn match qfixmemoError "\w\@<=_\w\@=" 14 | silent! syn clear markdownLineStart 15 | if !exists('g:qfixmemo_markdown_emphasis') || g:qfixmemo_markdown_emphasis == 0 16 | silent! syntax clear markdownBold 17 | silent! syntax clear markdownItalic 18 | endif 19 | endif 20 | let b:current_syntax = "qfix_memo" 21 | 22 | "---------- 23 | " qfixmemo highlight link 24 | "---------- 25 | hi def link qfixmemoTitle Title 26 | hi def link qfixmemoTitleBullet Special 27 | hi def link qfixmemoTitleCategory Identifier 28 | 29 | hi def link qfixmemoDate Underlined 30 | hi def link qfixmemoTime Constant 31 | 32 | hi def link txtFile Underlined 33 | hi def link txtUrl Underlined 34 | 35 | "---------- 36 | " contains markdown.vim 37 | "---------- 38 | " syn region qfixmemoCodeBlock start="^\( \|\t\)" end="$" 39 | " hi def link qfixmemoQuote Comment 40 | 41 | "---------- 42 | " default 43 | "---------- 44 | " qfixmemo title 45 | if exists('g:qfixmemo_title') 46 | exe 'syn region qfixmemoTitle start="^['.g:qfixmemo_title.']" end="$" keepend contains=qfixmemoTitleBullet,qfixmemoTitleCategory' 47 | exe 'syn match qfixmemoTitleBullet contained "^['.g:qfixmemo_title.']\{1,6}"' 48 | syn match qfixmemoTitleCategory contained '\[.\{-}\]' 49 | endif 50 | 51 | " qfixmemo timestamp 52 | syn match qfixmemoDateTime '\s*\[\d\{4}[-/]\d\{2}[-/]\d\{2}\( \d\{2}\(:\d\{2}\)\{1,2}\)\?\]' contains=qfixmemoDate,qfixmemoTime 53 | syn match qfixmemoDate contained '\d\{4}[-/]\d\{2}[-/]\d\{2}' 54 | syn match qfixmemoTime contained '\d\{2}\(:\d\{2}\)\{1,2}' 55 | 56 | " " qfixmemo link 57 | syn match txtUrl '\(http\|https\|ftp\|git\)://[-0-9a-zA-Z!#$%&'*+,./:;=?@_~]*' 58 | syn match txtFile '\(file\|rel\|memo\|howm\)://[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\]\\]*' 59 | syn match txtFile '\zs\([A-Za-z]:[/\\]\|\~[/\\]\|[\\][\\]\|\.\.\?[/\\]\)[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\]\\]\+\ze[^\])[:blank:]]\?' 60 | if !exists('g:openuri_unix_style_path') || g:openuri_unix_style_path 61 | syn match txtFile '\zs\(/[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\]\\]\+\)\{2,}\ze[^\])[:blank:]]\?' 62 | endif 63 | syn match txtFile '\[:\?&\?\zs\(memo\|rel\|howm\|https\|http\|file\|ftp\|git\)://\([a-zA-Z]:\)\?[^:]\+\ze:[^\]]*]' 64 | syn match txtFile '\[:\?&\?\zs\([A-Za-z]:[/\\]\|\~[/\\]\|\.\.\?[/\\]\|[/\\]\)[^:]\+\ze:[^\]]*]' 65 | 66 | " definition list (:define | explanation) 67 | syn match qfixmemoDefinition '^:.\{-}\(\s:\||\)' contains=qfixmemoDefColon 68 | syn match qfixmemoDefColon contained '^:\|\s:\||' 69 | 70 | hi def link qfixmemoDefinition Identifier 71 | hi def link qfixmemoDefColon Label 72 | 73 | "---------- 74 | " chapter 75 | "---------- 76 | if !exists('g:qfixmemo_title') || g:qfixmemo_title != '.' 77 | syn region qfixmemoChapter start='^\.\{1,6}\(\s\|$\)' end='$' contains=qfixmemoChapterBullet,qfixmemoChapterCategory keepend 78 | endif 79 | 80 | syn region qfixmemoChapter start='^\s*\(\*\|\d\+\)\.\(\(\*\|\d\+\)\.\)*\(\*\|\d\+\.\?\)\(\s\|$\)' end='$' contains=qfixmemoChapterBullet,qfixmemoChapterCategory keepend 81 | syn region qfixmemoChapter start='^\s*\(\*\|\d\+\)\.\(\s\|$\)' end='$' contains=qfixmemoChapterBullet,qfixmemoChapterCategory keepend 82 | 83 | syn match qfixmemoChapterCategory contained '\[.\{-}\]' 84 | syn match qfixmemoChapterBullet contained '^\s*\(\*\.\)\+\*\?$' 85 | syn match qfixmemoChapterBullet contained '^\s*[0-9][0-9.]* $' 86 | syn match qfixmemoChapterBullet contained '^\s*\([0-9.*]\+\|[.*]\+\)' 87 | 88 | hi def link qfixmemoChapter Title 89 | hi def link qfixmemoChapterCategory Identifier 90 | hi def link qfixmemoChapterBullet Label 91 | 92 | " Table 93 | syn match qfixmemoTextTable +^\s*|.*|$+ contains=qfixmemoTextTableSeparator,qfixmemoTextTableHeader,qfixmemoTextUrl,qfixmemoTextFile,qfixmemoEscapeTag 94 | syn match qfixmemoTextTableSeparator contained +|+ 95 | syn match qfixmemoTextTableHeader contained '|:\?\s*[*#][^|]\+' contains=qfixmemoTextTableSeparator 96 | hi def link qfixmemoTextTableHeader Title 97 | hi def link qfixmemoTextTableSeparator Statement 98 | 99 | "---------- 100 | " markdown style 101 | "---------- 102 | " title 103 | if !exists('g:qfixmemo_title') || g:qfixmemo_title != '#' 104 | syn region qfixmemoSubTitle start="^#" end="$" keepend contains=qfixmemoSubTitleBullet,qfixmemoSubTitleCategory 105 | syn match qfixmemoSubTitleBullet contained '^#\{1,6}' 106 | syn match qfixmemoSubTitleCategory contained '\[.\{-}\]' 107 | hi def link qfixmemoSubTitle qfixmemoTitle 108 | hi def link qfixmemoSubTitleBullet qfixmemoTitleBullet 109 | hi def link qfixmemoSubTitleCategory qfixmemoTitleCategory 110 | endif 111 | 112 | " styling text 113 | syn region htmlStrike start="" end="" contains=htmlTag,htmlEndTag keepend 114 | if exists("$APPBASE") 115 | hi! link htmlStrike NonText 116 | endif 117 | 118 | " list 119 | if !exists('g:qfixmemo_title') || g:qfixmemo_title != '*' 120 | syn region qfixmemoMarkdownList start='^\s*\* ' end='$' contains=qfixmemoMarkdownBullet,qfixmemoChapterCategory keepend 121 | syn match qfixmemoMarkdownBullet contained '^\s*\*' 122 | 123 | hi def link qfixmemoMarkdownList Normal 124 | hi def link qfixmemoMarkdownBullet Number 125 | endif 126 | 127 | syn region qfixmemoList start='^\s*[-+]\+\s' end='$' contains=qfixmemoListBullet,qfixmemoListDefinition,htmlTag,htmlEndTag,qfixmemoEscapeTag keepend 128 | syn match qfixmemoListBullet contained '^\s*+\+' 129 | syn match qfixmemoListBullet contained '^\s*-\+' 130 | 131 | hi def link qfixmemoList Normal 132 | hi def link qfixmemoListBullet Number 133 | 134 | " fenced language 135 | syn region qfixmemoBlock matchgroup=qfixmemoBlockDelimiter start=+^\s*```.*+ end=+^\s*```$+ 136 | hi def link qfixmemoBlockDelimiter Delimiter 137 | syn match markdownBlockDelimiter '^```.\+$' 138 | syn region markdownSuperPre matchgroup=markdownBlockDelimiter start=+^```.*$+ end=+^```+ 139 | 140 | " hi def link markdownSuperPre Comment 141 | hi def link markdownBlockDelimiter Delimiter 142 | 143 | " block quote 144 | syn region qfixmemoBlockQuote start='^>\s*' end='$' contains=qfixmemoBlockQuoteDelimiter,howmLink,hatenaSuperPre 145 | syn match qfixmemoBlockQuoteDelimiter contained '^>[>[:space:]]*' 146 | hi def link qfixmemoBlockQuote Comment 147 | hi def link qfixmemoBlockQuoteDelimiter Comment 148 | 149 | " horizontal rule 150 | syn match qfixmemoHRule '^\(-\|- \)\{3,}[- ]*' 151 | syn match qfixmemoHRule '^\(\*\|\* \)\{3,}[* ]*' 152 | syn match qfixmemoHRule '^=\{7,}' 153 | 154 | hi def link qfixmemoHRule Type 155 | 156 | " code 157 | syn match qfixmemoCode display '`.\{-}\(`\|$\)' contains=qfixmemoCodeDelimiter 158 | syn match qfixmemoCodeDelimiter contained '`' 159 | 160 | hi def link qfixmemoCode Define 161 | hi def link qfixmemoCodeDelimiter Delimiter 162 | 163 | "---------- 164 | " hatena 165 | "---------- 166 | " pre, quote 167 | syn match hatenaBlockDelimiter '^>|.\{-}|$\|^||<$' 168 | syn region hatenaSuperPre matchgroup=hatenaBlockDelimiter start=+^>|[^|]*|$+ end=+^||<$+ 169 | 170 | hi def link hatenaSuperPre Comment 171 | hi def link hatenaBlockDelimiter Delimiter 172 | 173 | "---------- 174 | " howm2html.vim 175 | "---------- 176 | syn match qfixmemoEscapeTag '^&&.*$' 177 | syn match qfixmemoEscapeTag '&<[^>]\+>' contains=txtUrl,txtFile 178 | hi def link qfixmemoEscapeTag NonText 179 | 180 | if !exists('g:qfixmemo_wiki_syntax') || g:qfixmemo_wiki_syntax == 0 181 | finish 182 | endif 183 | 184 | "---------- 185 | " Wiki style syntax 186 | "---------- 187 | let QFixHowm_WikiBold = '\*' 188 | let QFixHowm_WikiItalic = '_' 189 | let QFixHowm_WikiDel = '\~\~' 190 | let QFixHowm_WikiSuper = '\^' 191 | let QFixHowm_WikiSub = ',,' 192 | 193 | let QFixHowm_WikiBoldItalic = '\*_' 194 | let QFixHowm_WikiItalicBold = '_\*' 195 | 196 | let QFixHowm_WikiRegxp = '\(^\|\s\)%s\([^[:space:]]'.'.\{-}'.'[^[:space:]]\)%s\($\|\s\)' 197 | let QFixHowm_WikiRegxpC = '%s\([^[:space:]]'.'.\{-}'.'[^[:space:]]\)%s' 198 | 199 | if exists("+conceallevel") 200 | syntax conceal on 201 | endif 202 | setlocal conceallevel=3 203 | 204 | exe 'syn match WikiBoldConceal contained /'.QFixHowm_WikiBold.'/' 205 | exe 'syn match WikiItalicConceal contained /'.QFixHowm_WikiItalic.'/' 206 | exe 'syn match WikiDelConceal contained /'.QFixHowm_WikiDel.'/' 207 | exe 'syn match WikiSuperConceal contained /'.QFixHowm_WikiSuper.'/' 208 | exe 'syn match WikiSubConceal contained /'.QFixHowm_WikiSub.'/' 209 | 210 | exe 'syn match WikiBoldItalicConceal contained /'.QFixHowm_WikiBoldItalic.'/' 211 | exe 'syn match WikiItalicBoldConceal contained /'.QFixHowm_WikiItalicBold.'/' 212 | 213 | if exists("+conceallevel") 214 | syntax conceal off 215 | endif 216 | 217 | let regxp = printf(QFixHowm_WikiRegxp, QFixHowm_WikiBold, QFixHowm_WikiBold) 218 | " let g:vimwiki_rxBold 219 | exe 'syntax match WikiBold /'.regxp.'/ contains=WikiBoldConceal,WikiBoldItalic' 220 | let regxp = printf(QFixHowm_WikiRegxp, QFixHowm_WikiItalic, QFixHowm_WikiItalic) 221 | exe 'syntax match WikiItalic /'.regxp.'/ contains=WikiItalicConceal,WikiItalicBold' 222 | let regxp = printf(QFixHowm_WikiRegxp, QFixHowm_WikiBoldItalic, QFixHowm_WikiItalicBold) 223 | exe 'syntax match WikiBoldItalic /'.regxp.'/ contains=WikiBoldItalicConceal,WikiItalicBoldConceal ' 224 | let regxp = printf(QFixHowm_WikiRegxp, QFixHowm_WikiItalicBold, QFixHowm_WikiBoldItalic) 225 | exe 'syntax match WikiItalicBold /'.regxp.'/ contains=WikiBoldItalicConceal,WikiItalicBoldConceal ' 226 | 227 | let regxp = printf(QFixHowm_WikiRegxpC, QFixHowm_WikiDel, QFixHowm_WikiDel) 228 | exe 'syntax match WikiDel /'.regxp.'/ contains=WikiDelConceal' 229 | let regxp = printf(QFixHowm_WikiRegxpC, QFixHowm_WikiSuper, QFixHowm_WikiSuper) 230 | exe 'syntax match WikiSuper /'.regxp.'/ contains=WikiSuperConceal' 231 | let regxp = printf(QFixHowm_WikiRegxpC, QFixHowm_WikiSub, QFixHowm_WikiSub) 232 | exe 'syntax match WikiSub /'.regxp.'/ contains=WikiSubConceal' 233 | 234 | hi WikiBold term=bold cterm=bold gui=bold 235 | hi WikiItalic term=italic cterm=italic gui=italic 236 | hi WikiBoldItalic term=bold cterm=bold gui=bold,italic 237 | hi WikiItalicBold term=bold cterm=bold gui=bold,italic 238 | 239 | hi def link WikiDel Folded 240 | hi def link WikiSuper SpellRare 241 | hi def link WikiSub SpellLocal 242 | hi def link WikiPre PreProc 243 | hi def link WikiCode PreProc 244 | 245 | hi def link WikiBoldConceal WikiIgnore 246 | hi def link WikiItalicConceal WikiIgnore 247 | hi def link WikiItalicBoldConceal WikiIgnore 248 | hi def link WikiBoldItalicConceal WikiIgnore 249 | 250 | hi def link WikiDelConceal WikiIgnore 251 | hi def link WikiSuperConceal WikiIgnore 252 | hi def link WikiSubConceal WikiIgnore 253 | 254 | " runtime! syntax/howm_memo.vim 255 | 256 | -------------------------------------------------------------------------------- /doc/qfixmemo-keymap.jax: -------------------------------------------------------------------------------- 1 | *qfixmemo-keymap.jax* For Vim バージョン 7.2 Last change: 2012 January 27 2 | ============================================================================== 3 | Description: QFixMemo keymap 4 | Author: fuenor 5 | Web(Japanese): 6 | http://sites.google.com/site/fudist/Home/qfixdev/ver3 7 | ============================================================================== 8 | CONTENT *qfixhowm* *qfixmemo* *qfixmemo_help* *qfixmemo_keymap_contents* 9 | 1. Intro |qfixmemo_key_intro| 10 | 2. クイックスタート |qfixmemo_key_start| 11 | 3. エントリ作成 |qfixmemo_key_entry| 12 | 4. エントリ一覧 |qfixmemo_key_list| 13 | 5. バッファローカルコマンド |qfixmemo_key_local| 14 | 6. メモファイル検索 |qfixmemo_key_search| 15 | 7. メニュー・カレンダー |qfixmemo_key_menu| 16 | 8. その他 |qfixmemo_key_misc| 17 | 9. QuickFixウィンドウ |qfixmemo_key_quickfix| 18 | 10. 予定・TODO |qfixmemo_key_reminder| 19 | 11. Grep |qfixgrep_key| 20 | 21 | ============================================================================== 22 | 1. Intro *qfixmemo_key_intro* 23 | 24 | QFixMemoはメモを簡単に取り、アクセスするためのプラグインです。 25 | このヘルプではQFixMemoデフォルトキーマップについてのみ解説しているので、機能詳 26 | 細については|qfixmemo_intro|を参照してください。 27 | 28 | NOTE: 29 | は qfixmemo_mapleaderで定義されます。 30 | デフォルトは g, なので c は g,c というように、以降はを読み替え 31 | てください。 32 | の場合はQFixMemoのバッファでのみ有効なローカルキーマップです。 33 | 34 | NOTE: 35 | 多くのコマンドではカウント指定がサポートされています。 36 | 例えばmではMRUリストが20件表示されますが 30m を実行すると最大 37 | 30件表示され、以降は30件表示がデフォルトになります。 38 | 39 | ============================================================================== 40 | 2. クイックスタート *qfixmemo_key_start* 41 | 42 | とりあえず以下のコマンドだけ覚えれば、メモ取りとして十分に使えます。 43 | 44 | c 新規ファイル作成 45 | 現在時刻から生成されたファイル名で新規ファイルを開く 46 | u クイックメモを開く 47 | クイックメモでは常に同じファイルが開かれる 48 | 49 | m MRUリストを表示 50 | 最近"更新"、"閲覧"した「エントリ」をアクセス順に表示 51 | l 最近"更新"した「ファイル内のエントリ」一覧 52 | ファイルタイムスタンプが過去5日間のファイルに含まれるエン 53 | トリをすべて表示する 54 | 55 | a エントリ一覧(キャッシュ表示) 56 | メモディレクトリのファイルからタイトル記号をgrep表示。 57 | 一度検索すると結果がキャッシュされるので、最新の状態に更 58 | 新するにはraで再検索。 59 | ra 全エントリ一覧(再検索) 60 | 61 | , QuickFixウィンドウのオープン/クローズ 62 | . QuickFixウィンドウへ移動 63 | 64 | 日記 65 | 66 | 日記を開く 67 | q カレンダー 68 | |qfixmemo_submenu_calendar| 69 | 70 | 以降は機能別のキーマップと簡単な解説になります。 71 | 72 | ============================================================================== 73 | 3. エントリ作成 *qfixmemo_key_entry* 74 | 75 | c 新規ファイル作成 76 | |qfixmemo_newfile| 77 | C ファイル名指定で新規ファイル作成 78 | |qfixmemo_miscmemo| 79 | 80 | u クイックメモ 81 | U デフォルトクイックメモを開く 82 | |qfixmemo_quickmemo| 83 | 84 | 日記 85 | 86 | j 現バッファのファイルと対になるペアファイルを開く 87 | |qfixmemo_pairfile| 88 | 89 | ============================================================================== 90 | 4. エントリ一覧 *qfixmemo_key_list* 91 | 92 | |qfixmemo_entry_list_mru| 93 | m MRUリスト 94 | 95 | |qfixmemo_entry_list| 96 | l 最近"更新"したエントリの検索 97 | (デフォルトでは過去5日間) 98 | L 最近"作成"したエントリの検索 99 | 実際にはタイムスタンプ行の日付を検索する 100 | (デフォルト検索日数はlと共用) 101 | a エントリ一覧(キャッシュ表示) 102 | ra 全エントリ一覧(再検索) 103 | A 日記エントリ一覧 104 | rA メモディレクトリ内の全ファイル一覧 105 | globを使用しているのでタイトル行のないメモファイルやメモ 106 | ファイル以外も一覧表示される 107 | 108 | |qfixmemo_random| 109 | rr ランダム表示 110 | rR ランダム表示用リストファイルをリビルド 111 | 112 | ============================================================================== 113 | 5. バッファローカルコマンド *qfixmemo_key_local* 114 | 115 | メモバッファでのみ有効なコマンド 116 | 117 | P 現バッファの先頭に新規エントリを追加 118 | p 現エントリの前に新規エントリを追加 119 | n 現エントリの次に新規エントリを追加 120 | N 現バッファの最後に新規エントリを追加 121 | 122 | d 現在日付を挿入 123 | T 現在時刻を挿入 124 | S 現在位置のエントリのタイムスタンプを更新 125 | 126 | o アウトラインモード 127 | |qfixmemo_folding| 128 | 129 | x 現在位置のエントリを削除 130 | X 現在位置のエントリを新規ファイルへ移動 131 | rs 現バッファのエントリをタイムスタンプの新しい順番でソート 132 | rS 現バッファのエントリをタイムスタンプの古い順番でソート 133 | 134 | w 強制保存 135 | @の連結表示のようなスクラッチバッファでも強制保存する 136 | 通常バッファではタイムスタンプ付加等の特殊処理は行われない 137 | W 一ファイル複数エントリや連結表示バッファを分割して保存 138 | ファイルはqfixmemo_dir(howm_dir)へ作成される 139 | 140 | ------------------------------------------------------------------------------ 141 | HTML作成 142 | (実際にはグローバルコマンドで、メモ以外のファイルもHTML変換可能) 143 | 144 | |qfixmemo_html| 145 | hi HTMLを作成して表示 146 | hr HTMLを作成(作成のみ) 147 | hI 静的HTMLを作成して表示 148 | hR 静的HTMLを作成(作成のみ) 149 | 150 | ============================================================================== 151 | 6. メモファイル検索 *qfixmemo_key_search* 152 | 153 | メモディレクトリ内のみをgrepで検索。 154 | 汎用grepのキーマップについては|qfixgrep_key|を参照。 155 | 156 | |qfixmemo_grep| 157 | s エントリを固定文字列(正規表現を使わない)検索 158 | fgrep 159 | g エントリをgrep 160 | 161 | メモバッファでは以下のキーマップも使用可能。 162 | 163 | f エントリを固定文字列(正規表現を使わない)検索 164 | fgrep 165 | e エントリをgrep 166 | 167 | ============================================================================== 168 | 7. メニュー・カレンダー *qfixmemo_key_menu* 169 | 170 | , メニュー 171 | 172 | |qfixmemo_submenu| 173 | i サブメニュー 174 | I デフォルトサブメニュー 175 | 176 | |qfixmemo_submenu_calendar| 177 | q カレンダー 178 | Q カレンダー 179 | 180 | ============================================================================== 181 | 8. その他 *qfixmemo_key_misc* 182 | 183 | rk オートリンクを再作成 184 | 185 | rn 現バッファのファイル名をリネーム 186 | rN メモディレクトリのすべてのファイル名をタイトル行から生成 187 | してリネーム 188 | |qfixmemo_rename| 189 | 190 | ============================================================================== 191 | 9. QuickFixウィンドウ *qfixmemo_key_quickfix* 192 | 193 | , Quickfixウィンドウのオープン/クローズ 194 | . Quickfixウィンドウへ移動 195 | q Quickfixウィンドウのクローズ 196 | 197 | ファイルを開く 198 | ビジュアルモードで選択している場合は選択ファイルをすべて 199 | 開く 200 | 201 | s 指定文字列を"含む"行に絞り込み 202 | r 指定文字列を"含まない"行に絞り込み 203 | u アンドゥ 204 | U 全てアンドゥ 205 | S ソート 206 | 207 | # 検索結果の同一エントリのものは一つにまとめる 208 | % 検索結果のサマリーをエントリタイトルにする 209 | @ 表示中(選択中)のファイルを連結表示 210 | ランダム表示 211 | 212 | R (選択中の)ファイルをqfixmemo_dir(howm_dir)へ移動 213 | D (選択中の)ファイルを削除 214 | x エントリを削除 215 | X エントリを新規ファイルへ移動 216 | 217 | K MRUリストから削除(ファイル自体は削除されない) 218 | 219 | i プレビュー表示ON/OFF 220 | I ファイルタイプのハイライト表示ON/OFF 221 | J ジャンプ後にQuickfixウィンドウを閉じる/閉じない 222 | ハイスピードプレビューON/OFF 223 | QuickFix上でのパスを最短表示にする 224 | 225 | QuickFixウィンドウの編集 226 | QuickFix上で通常のバッファのように編集可能でu Uのアンドゥも有効。 227 | @の連結表示で不要なエントリを削除するような場合に使用する。 228 | 229 | dd 削除 230 | d 削除(ビジュアルモード) 231 | p 貼り付け 232 | P 貼り付け 233 | 234 | ============================================================================== 235 | 10. 予定・TODO *qfixmemo_key_reminder* 236 | 237 | 予定・TODOの詳細については以下を参照。 238 | |howm_reminder_intro| 239 | http://sites.google.com/site/fudist/Home/qfixhowm/howm-reminder 240 | 241 | y 予定 242 | ry 予定(再検索) 243 | t Todo 244 | rt Todo(再検索) 245 | d 日付の挿入 246 | T 日付と時刻の挿入 247 | rd 予定の展開 248 | 予定・TODOの定義行で指定カウント分の予定・TODOに展開 249 | 250 | ============================================================================== 251 | 11. Grep *qfixgrep_key* 252 | 253 | 詳細は|qfixgrep_contents|を参照 254 | f 正規表現を使わない検索(fgrep) 255 | e grep 256 | v vimgrep 257 | b 現在開いている全バッファのみ対象 258 | 259 | 再帰検索はファイル指定として**/*のように**/を指定することで可能。 260 | 検索ディレクトリの基点は「カレントディレクトリ」 > 261 | " 検索ディレクトリはカレントディレクトリを基点にする 262 | " 0なら現在開いているファイルの存在するディレクトリを基点 263 | let MyGrep_CurrentDirMode = 1 264 | 265 | 再帰検索専用コマンド 266 | rf 現編集バッファと同じディレクトリで固定文字列検索 267 | re 現編集バッファと同じディレクトリでgrep 268 | rv 現編集バッファと同じディレクトリでvimgrep 269 | 270 | 前回の結果を削除せず検索結果を追加 271 | E grep 272 | rE 再帰検索grep 273 | F 正規表現を使わない検索 274 | rF 正規表現を使わない再帰検索 275 | B 現在開いている全てのバッファのみを対象にgrep 276 | 277 | 検索の基点ディレクトリとファイルエンコーディングの変更 278 | rM 検索基点ディレクトリをカレントディレクトリ/ファイル基点 279 | でトグル 280 | rG 検索するファイルエンコーディング指定 281 | rD 常に再帰検索 282 | 283 | コマンドライン 284 | > 285 | :Grep 検索文字列 *.txt 286 | 287 | 再帰検索は **/*.txtのように **/ を使用するか、使用するgrepのオプションを指定 288 | (空白を含む検索文字は "空白 を含む検索"のように""を使用する) 289 | 290 | :Grep 正規表現検索 291 | :FGrep 固定文字列検索 292 | :RGrep 再帰検索 293 | :RFGrep 再帰検索 294 | :BGrep 現在開いてる全バッファのみ対象 295 | 296 | vim:tw=78:ts=8:ft=help:norl:et: 297 | 298 | -------------------------------------------------------------------------------- /misc/howm-alarm.vim: -------------------------------------------------------------------------------- 1 | "============================================================================= 2 | " Description: howm形式の予定・TODOアラーム 3 | " QFixHowmのプラグインとしても使用できます。 4 | " Maintainer: fuenor@gmail.com 5 | " http://sites.google.com/site/fudist/Home/qfixhowm 6 | "============================================================================= 7 | scriptencoding utf-8 8 | 9 | " 指定時間になるとアラームメッセージを表示します。 10 | " Vim 7.4.1578以降であれば非同期タイマーを利用しますが、それ以前ではCursorHold 11 | " を利用するので、トリガはキー入力後から updatetimeが経過した時になります。 12 | " 13 | " (!!! CursorHold使用時の注意 !!!) 14 | " 15 | " CursorHoldで利用する場合は予定時間を超えた後、何かキータイプやウィンドウ切替 16 | " などの操作を行っている事が必要になります。 17 | " 放置しっぱなしでは、CursorHold イベントが呼び出されないので呼び出されません。 18 | " そういうわけで、CursorHold使用時は基本Vimでずっと作業しているような人向けです。 19 | " 当然タイミングによってはアラームが表示されないので、動作を理解した上であまり 20 | " 信用せずに使用してください。 21 | " 22 | " またCursorHoldで使用する場合はupdatetimeを適切に設定してください。 23 | " 24 | " set updatetime=4000 25 | " 26 | " # 使用方法 27 | " 28 | " デフォルトでは'~/alarm.howm' (HowmAlarmFileで指定)に書かれた予定が使用されます。 29 | " 書式はhowm形式になります。 30 | " 31 | " (例) 32 | " [2009-07-07 18:00]@ 表示される予定。今日の日付で近い時間に設定してみてください。 33 | " 34 | " この例だと2009年7月7日の18:00を過ぎた後に、Vimを起動しているとアラーム表示さ 35 | " れます。 36 | " ファイルエンコーディングは let howm_fileencoding で、未指定時はencoding (内 37 | " 部エンコーディング)が使用されます。 38 | " 39 | " # アラーム形式 40 | " 41 | " [2000-01-01 18:00]@ なんか予定を書きます [T:-30] 42 | " 43 | " 実際に必要なのは行頭の [2000-01-01 18:00]だけです。 44 | " 予定の中に以下の文字列があると、表示形式と時間のオフセットを選べます。 45 | " [T:+10] 指定時間の10分後に表示(時間のオフセット指定) 46 | " [N:] 指定時間にコマンドラインにノーマル表示 47 | " [S:-30] 指定時間の30分前にコマンドラインに強調表示 48 | " [D:+10] 指定時間の10分後にダイアログを出して表示 49 | " [R:+10] 指定時間から10分ごとに表示します。 50 | " 51 | " 毎日の繰り返し予定も使えます 52 | " [0000-00-00 18:00]@ 毎日18:00に繰り返す予定 53 | " この場合表示形式は選べますが、時間のオフセットは無視されます。 54 | " 55 | " 再読込は :HowmAlarmReadFile <ファイル名(省略可)> です。 56 | " 57 | " # QFixHowmとの連携 58 | " 59 | " QFixHowmを使用しているなら、HowmAlarmUseQFixHowmを設定すると起動時にQFixHowm 60 | " の予定を取り込みます。 61 | " 62 | " 0 : QFixHowmと連携しない(g:HowmAlarmFileのみ読み込み) 63 | " 1 : 起動時に前回作成したQFixHowmの予定を取り込み 64 | " 2 : 一日一回、起動時にQFixHowm予定を更新 65 | " 3 : 起動時に毎回QFixHowm予定を更新 66 | " 4 : 一日一回、起動時にQFixHowm予定を更新(実行後に予定を表示) 67 | " 5 : 起動時に毎回QFixHowm予定を更新(実行後に予定を表示) 68 | " 69 | " おすすめは2です。 70 | " let g:HowmAlarmUseQFixHowm = 2 71 | " 72 | " g,yで表示されるうち [2000-01-01 18:00]@ のように時刻まで含まれた予定が登録さ 73 | " れます。 74 | " 再作成したい場合は g,ry で予定ファイルを再作成します。 75 | " 76 | " なお、QFixHowmの予定を取り込んでも HowmAlarmFileの予定も有効です。 77 | " 78 | 79 | if exists("loaded_HowmAlarm") && !exists('fudist') 80 | finish 81 | endif 82 | if exists('disable_HowmAlarm') && disable_HowmAlarm 83 | finish 84 | endif 85 | let loaded_HowmAlarm = 1 86 | 87 | " 使用する定義ファイル 88 | if !exists('g:HowmAlarmFile') 89 | let g:HowmAlarmFile = '~/.alarm.howm' 90 | endif 91 | 92 | " QFixHowmの予定保存ファイル 93 | if !exists('g:QFixHowmAlarmFile') 94 | let g:QFixHowmAlarmFile = '~/.howm-alarm.howm' 95 | endif 96 | 97 | " 予定の表示形式 98 | " 0:表示しない 1:ノーマル 2:強調表示 3:ダイアログ 99 | if !exists('g:HowmAlarmDispMode') 100 | let g:HowmAlarmDispMode = 3 101 | endif 102 | 103 | " Vim起動時の処理 104 | " 0 : QFixHowmと連携しない(g:HowmAlarmFileのみ読み込み) 105 | " 1 : 起動時に前回作成したQFixHowmの予定を取り込み 106 | " 2 : 一日一回、起動時にQFixHowm予定を更新 107 | " 3 : 起動時に毎回QFixHowm予定を更新 108 | " 4 : 一日一回、起動時にQFixHowm予定を更新 109 | " 5 : 起動時に毎回QFixHowm予定を更新 110 | if !exists('g:HowmAlarmUseQFixHowm') 111 | let g:HowmAlarmUseQFixHowm = 2 112 | endif 113 | 114 | " QFixHowmからの取り込みでHowmAlarmに登録しない正規表現 115 | if !exists('g:QFixHowmAlarmFilterReg') 116 | let g:QFixHowmAlarmFilterReg = '' 117 | endif 118 | 119 | " アラームが表示される時間のデフォルトオフセット 120 | " 10なら10分前に表示される 121 | if !exists('g:HowmAlarmTimeOffset') 122 | let g:HowmAlarmTimeOffset = 0 123 | endif 124 | 125 | " 時間オフセットが定義されている時、予定時間にもアラーム表示する 126 | " (一つの予定に付き二回表示される) 127 | if !exists('g:HowmAlarmDefaultAlarm') 128 | let g:HowmAlarmDefaultAlarm = 0 129 | endif 130 | 131 | " 起動時に指定分前の予定も表示する 132 | " 10なら起動時に現時刻から10分前までの予定が表示される。 133 | if !exists('g:HowmAlarmRegOffset') 134 | let g:HowmAlarmRegOffset = 0 135 | endif 136 | 137 | " アラーム表示 138 | " .vimrc等で定義されている場合はそちらが優先される 139 | if !exists('*DoHowmAlarm') 140 | function DoHowmAlarm(alarm) 141 | let alarm = a:alarm 142 | let dmode = '' 143 | if alarm['cmd'] != '' 144 | let dmode = alarm['cmd'][1] 145 | endif 146 | if g:HowmAlarmDispMode == 3 || dmode == 'D' 147 | call confirm(alarm['text'], "&OK") 148 | else 149 | if g:HowmAlarmDispMode == 2 || dmode == 'S' 150 | echohl ErrorMsg 151 | endif 152 | if dmode == 'N' 153 | echohl None 154 | endif 155 | redraw| echom alarm['text'] 156 | echohl None 157 | endif 158 | endfunction 159 | endif 160 | 161 | " ------------------------- 162 | " 正規表現パーツ 163 | if !exists('g:QFixHowm_DatePattern') 164 | let g:QFixHowm_DatePattern = '%Y-%m-%d' 165 | endif 166 | let s:hts_date = g:QFixHowm_DatePattern 167 | let s:hts_time = '%H:%M' 168 | let s:hts_dateTime = g:QFixHowm_DatePattern . ' '. s:hts_time 169 | 170 | let s:sch_dateTime = s:hts_dateTime 171 | let s:sch_dateTime = substitute(s:sch_dateTime, '%Y', '\\d\\{4}', '') 172 | let s:sch_dateTime = substitute(s:sch_dateTime, '%m', '\\d\\{2}', '') 173 | let s:sch_dateTime = substitute(s:sch_dateTime, '%d', '\\d\\{2}', '') 174 | let s:sch_dateTime = substitute(s:sch_dateTime, '%H', '\\d\\{2}', '') 175 | let s:sch_dateTime = substitute(s:sch_dateTime, '%M', '\\d\\{2}', '') 176 | let s:sch_rdate = s:hts_date 177 | let s:sch_rdate = substitute(s:sch_rdate, '%Y', '0000', '') 178 | let s:sch_rdate = substitute(s:sch_rdate, '%m', '00', '') 179 | let s:sch_rdate = substitute(s:sch_rdate, '%d', '00', '') 180 | let s:HowmAlarm = [] 181 | let s:HowmAlarmId = -1 182 | 183 | function! s:HowmAlarmSet() 184 | " timer_startはpatch 7.4.1578以降 185 | if v:version > 704 || (v:version == 704 && has('patch1578')) 186 | if g:HowmAlarmDispMode == 0 || len(s:HowmAlarm) == 0 187 | return 188 | endif 189 | if (s:HowmAlarmId != -1) 190 | call timer_stop(s:HowmAlarmId) 191 | let s:HowmAlarmId = -1 192 | endif 193 | let time = (s:HowmAlarm[0]['time'] - localtime()) * 1000 194 | let s:HowmAlarmId = timer_start(time, 'HowmAlarmHandler') 195 | else 196 | augroup HowmAlarm 197 | autocmd! 198 | autocmd CursorHold * call CursorHold() 199 | autocmd CursorHoldI * call CursorHold() 200 | augroup END 201 | endif 202 | endfunction 203 | 204 | if v:version > 704 || (v:version == 704 && has('patch1578')) 205 | function! HowmAlarmHandler(timerId) 206 | if s:Alarm() == 0 207 | return 208 | endif 209 | call s:HowmAlarmSet() 210 | endfunction 211 | endif 212 | 213 | command! -bang -nargs=? QFixHowmAlarmReadFile call QFixHowmAlarmReadFile(0) 214 | 215 | augroup HowmAlarm 216 | autocmd! 217 | autocmd VimEnter * call QFixHowmAlarmReadFileVimEnter(g:HowmAlarmUseQFixHowm) 218 | augroup END 219 | 220 | function! QFixHowmAlarmReadFile_qf(qf) 221 | call s:QFixHowmAlarmReadFile(3, a:qf) 222 | endfunction 223 | 224 | function! s:QFixHowmAlarmReadFileVimEnter(mode, ...) 225 | call s:QFixHowmAlarmReadFile(a:mode) 226 | if (a:mode == 4 || a:mode == 5) && exists('g:loaded_qfixmemo_init') 227 | call feedkeys(g:qfixmemo_mapleader.'y', 't') 228 | endif 229 | endfunction 230 | 231 | function! s:QFixHowmAlarmReadFile(mode, ...) 232 | " strftime()の基準日数 233 | if !exists('g:DateStrftime') 234 | let g:DateStrftime = 719162 235 | endif 236 | " GMTとの時差 237 | if !exists('g:QFixHowm_ST') 238 | let g:QFixHowm_ST = -9 239 | endif 240 | if !exists('g:howm_fileencoding') 241 | let g:howm_fileencoding = &enc 242 | endif 243 | if !exists('g:QFixHowm_TitleFilterReg') 244 | let g:QFixHowm_TitleFilterReg = '' 245 | endif 246 | call s:HowmAlarmReadFile(g:HowmAlarmFile, 0) 247 | if a:mode > 0 && exists('g:loaded_qfixmemo_init') 248 | let elist = [] 249 | let file = expand(g:QFixHowmAlarmFile) 250 | let ftime = getftime(file) 251 | let today = s:HowmDate2Int(strftime(s:hts_date) . ' 00:00') 252 | if (a:mode != 1) && (today > ftime || a:0 || a:mode == 3 || a:mode == 5) 253 | if a:0 254 | let sq = a:1 255 | else 256 | if qfixmemo#Init() 257 | return 258 | endif 259 | call howm_schedule#Init() 260 | let sq = QFixHowmListReminder_qf('schedule') 261 | endif 262 | if len(sq) > 0 263 | let tfmt = '^\s*\['.s:sch_dateTime.'][-@!+~.]' 264 | for d in sq 265 | if d['text'] =~ tfmt 266 | if g:QFixHowmAlarmFilterReg == '' 267 | call add(elist, d['text']) 268 | elseif d['text'] !~ g:QFixHowmAlarmFilterReg 269 | call add(elist, d['text']) 270 | endif 271 | endif 272 | endfor 273 | call writefile(elist, file) 274 | endif 275 | elseif filereadable(file) 276 | let elist = readfile(file) 277 | endif 278 | if len(elist) 279 | call s:_HowmAlarmSet(elist) 280 | endif 281 | endif 282 | call s:HowmAlarmSet() 283 | endfunction 284 | 285 | command! -bang -nargs=* HowmAlarmReadFile call HowmAlarmReadFile(, 0) 286 | " modeは登録済みのアラームを削除しないで追加するフラグ 287 | function! s:HowmAlarmReadFile(file, mode) 288 | let file = a:file 289 | if file == '' 290 | let file = g:HowmAlarmFile 291 | endif 292 | let file = expand(file) 293 | if !filereadable(file) 294 | return 295 | endif 296 | " readfileはエンコーディング判定も行わないことに注意。 297 | let retval = readfile(file) 298 | if a:mode == 0 299 | let s:HowmAlarm = [] 300 | endif 301 | return s:_HowmAlarmSet(retval) 302 | endfunction 303 | 304 | function! s:_HowmAlarmSet(retval) 305 | let cmdfmt = '\[[TNSDR]:\([-+]\?\d\+\)\?\]' 306 | let tfmt = '^\s*\['.s:sch_dateTime.'][-@!+~.]' 307 | let rfmt = '^\s*\['.s:sch_rdate.' \d\{2}:\d\{2}][-@!~+.]' 308 | for d in a:retval 309 | let text = d 310 | if text == '' || text !~ tfmt 311 | continue 312 | endif 313 | let text = substitute(text, '^\s*', '', '') 314 | if g:howm_fileencoding != &enc 315 | let text = iconv(text, g:howm_fileencoding, &enc) 316 | endif 317 | let cmd = matchstr(text, cmdfmt) 318 | let text = substitute(text, cmdfmt, '', '') 319 | if text =~ rfmt || cmd[1] == 'R' 320 | call s:RegRepeatAlarm(text, cmd) 321 | else 322 | call s:RegAlarm(text, cmd) 323 | endif 324 | endfor 325 | let s:HowmAlarm = sort(s:HowmAlarm, "CompareTime") 326 | return s:HowmAlarm 327 | endfunction 328 | 329 | function! s:RegAlarm(text, cmd) 330 | let ctime = localtime()-g:HowmAlarmRegOffset*60 331 | let text = a:text 332 | let cmd = a:cmd 333 | let rep = 0 334 | let rep = matchstr(cmd, '\d\+')*60 335 | if match(cmd, 'R:\d\+') == -1 336 | let rep = 0 337 | endif 338 | let ofs = matchstr(cmd, '-\?\d\+') 339 | if ofs == '' 340 | let ofs = - g:HowmAlarmTimeOffset 341 | endif 342 | let sec = s:HowmDate2Int(text) + ofs * 60 343 | if sec >= ctime 344 | let ddat = {"time": sec, "text": text, "cmd":cmd, "repeat":rep, "id": -1} 345 | call add(s:HowmAlarm, ddat) 346 | endif 347 | if ofs != 0 && g:HowmAlarmDefaultAlarm 348 | let sec = s:HowmDate2Int(text) 349 | if sec >= ctime || cmd[1] == 'R' 350 | let ddat = {"time": sec, "text": text, "cmd":cmd, "repeat":rep, "id": -1} 351 | call add(s:HowmAlarm, ddat) 352 | endif 353 | endif 354 | endfunction 355 | 356 | function! s:RegRepeatAlarm(text, cmd) 357 | let text = a:text 358 | let cmd = a:cmd 359 | let ctime = strftime("%H:%M", localtime()-g:HowmAlarmRegOffset*60) 360 | let sctime = localtime()-g:HowmAlarmRegOffset*60 361 | let time = matchstr(text, '\d\{2}:\d\{2}') 362 | let rep = matchstr(cmd, '\d\+')*60 363 | if match(cmd, 'R:+\?\d\+') == -1 364 | let rep = 24*60*60 365 | endif 366 | let stime = s:HowmDate2Int(strftime(s:hts_date). ' '. time ) 367 | if stime >= sctime 368 | let sec = stime 369 | else 370 | let c = 1+(localtime()-stime)/rep 371 | let sec = s:HowmDate2Int(strftime(s:hts_date, localtime()+c*rep) . ' '. time ) 372 | endif 373 | let ddat = {"time": sec, "text": text, "cmd":cmd, "repeat":rep, "id": -1} 374 | call add(s:HowmAlarm, ddat) 375 | endfunction 376 | 377 | function! s:CompareTime(v1, v2) 378 | return (a:v1.time > a:v2.time?1:-1) 379 | endfunction 380 | 381 | function! s:CursorHold() 382 | if g:HowmAlarmDispMode == 0 || s:HowmAlarm == [] || localtime() <= s:HowmAlarm[0]['time'] 383 | return 384 | endif 385 | call s:Alarm() 386 | endfunction 387 | 388 | function! s:Alarm(...) 389 | if g:HowmAlarmDispMode == 0 || len(s:HowmAlarm) == 0 390 | return 0 391 | endif 392 | if s:HowmAlarm[0]['time'] - localtime() < 0 393 | if a:0 == 0 || a:1 !=0 394 | call DoHowmAlarm(s:HowmAlarm[0]) 395 | endif 396 | let re = remove(s:HowmAlarm, 0) 397 | if re['repeat'] > 0 398 | let rep = re['repeat'] 399 | let c = 1+(localtime()-re['time'])/rep 400 | let sec = c*rep 401 | let re['time'] = re['time'] + sec 402 | call add(s:HowmAlarm, re) 403 | let s:HowmAlarm = sort(s:HowmAlarm, "CompareTime") 404 | endif 405 | endif 406 | return len(s:HowmAlarm) 407 | endfunction 408 | 409 | function! s:HowmDate2Int(str) 410 | let str = a:str 411 | let retval = 'time' 412 | " ザ・決め打ち 413 | let str = substitute(str, '[^0-9]','', 'g') 414 | let year = matchstr(str, '\d\{4}') 415 | let str = substitute(str, '\d\{4}-\?','', '') 416 | let month = matchstr(str, '\d\{2}') 417 | let str = substitute(str, '\d\{2}-\?','', '') 418 | let day = matchstr(str, '\d\{2}') 419 | let str = substitute(str, '\d\{2} \?','', '') 420 | let hour = matchstr(str, '\d\{2}') 421 | let str = substitute(str, '\d\{2}:\?','', '') 422 | let min = matchstr(str, '\d\{2}') 423 | if hour == '' || min == '' 424 | let retval = 'date' 425 | let hour = strftime('%H', localtime()) 426 | let min = strftime('%M', localtime()) 427 | endif 428 | 429 | " 1・2月 → 前年の13・14月 430 | if month <= 2 431 | let year = year - 1 432 | let month = month + 12 433 | endif 434 | let dy = 365 * (year - 1) " 経過年数×365日 435 | let c = year / 100 436 | let dl = (year / 4) - c + (c / 4) " うるう年分 437 | let dm = (month * 979 - 1033) / 32 " 1月1日から month 月1日までの日数 438 | let today = dy + dl + dm + day - 1 439 | 440 | if retval =~ 'date' 441 | return today 442 | endif 443 | 444 | let today = today - g:DateStrftime 445 | let sec = today * 24*60*60 + g:QFixHowm_ST * (60 * 60) "JST = -9 446 | let sec = sec + hour * (60 * 60) + min * 60 447 | 448 | return sec 449 | endfunction 450 | 451 | -------------------------------------------------------------------------------- /html/howm2html.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | @import url(peachpuff.css); 3 | 4 | /* 5 | * let HowmHtml_cssname = '%BASEDIR%/howm2html.css' 6 | */ 7 | 8 | * {max-height:999999px} 9 | 10 | body { 11 | font:100% meiryo,arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; 12 | line-height: 1.4em 13 | color: #222; 14 | /* 15 | background-image: url(images/bg_body.png); 16 | background-repeat: repeat; 17 | */ 18 | } 19 | 20 | pre, 21 | code, 22 | var, 23 | samp, 24 | kbd, 25 | tt { 26 | font-family: monospace, serif; 27 | _font-family: 'courier new', monospace; 28 | font-size: 1.0rem; 29 | } 30 | 31 | p.siteName { 32 | display: none !important; 33 | } 34 | p.description { 35 | display: none !important; 36 | } 37 | 38 | /*======================================== 39 | let HowmHtml_BodyClass = 'single' 40 | ┏━━━┓ 41 | ┃━━━┃ 42 | ┗━━━┛ 43 | ========================================*/ 44 | 45 | /*======================================== 46 | let HowmHtml_BodyClass = 'double' 47 | ┏━━━┓┏┓ 48 | ┃━━━┃┃┃ 49 | ┗━━━┛┗┛ 50 | ========================================*/ 51 | 52 | body.double div#main { 53 | width: 75%; 54 | float: left; 55 | margin-right: -1px; 56 | border-right: 1px solid #eee; 57 | border-bottom: 1px solid #eee; 58 | } 59 | 60 | /* Utilities 61 | ---------------*/ 62 | 63 | body.double div#utilities { 64 | width: 25%; 65 | float: left; 66 | clear: right; 67 | } 68 | 69 | /*======================================== 70 | let HowmHtml_BodyClass = 'double-l' 71 | ┏┓┏━━━┓ 72 | ┃┃┃━━━┃ 73 | ┗┛┗━━━┛ 74 | ========================================*/ 75 | 76 | body.double-l div#main { 77 | width: 75%; 78 | float: right; 79 | margin-left: -1px; 80 | border-left: 1px solid #eee; 81 | border-bottom: 1px solid #eee; 82 | } 83 | 84 | /* Utilities 85 | ---------------*/ 86 | 87 | body.double-l div#utilities { 88 | width: 25%; 89 | float: right; 90 | clear: left; 91 | } 92 | 93 | /*======================================== 94 | let HowmHtml_BodyClass = 'single' 95 | ┏━━━┓ 96 | ┃━━━┃ 97 | ┗━━━┛ 98 | ========================================*/ 99 | 100 | body.single div#main { 101 | } 102 | 103 | /* Utilities 104 | ---------------*/ 105 | 106 | body.double-l div#utilities { 107 | } 108 | 109 | /*======================================== 110 | #Elements# 111 | ここから #Decoration#までは基本的な装飾 112 | ========================================*/ 113 | 114 | /* Text 115 | ---------------*/ 116 | h1 { 117 | margin: 0; 118 | padding: 15px 30px; 119 | border-top: 1px solid #eee; 120 | border-bottom: 1px solid #eee; 121 | line-height: 1.5; 122 | font-size: 167%; 123 | color: #333; 124 | background-color: #f5f5f5; 125 | overflow-wrap: break-word; 126 | } 127 | 128 | h1 { 129 | margin: 1em 0; 130 | font-size: 116%; 131 | } 132 | 133 | h2 { 134 | font-size: 108%; 135 | } 136 | 137 | h3 { 138 | font-size: 100%; 139 | } 140 | 141 | p { 142 | margin: 1em 0; 143 | } 144 | 145 | blockquote { 146 | margin: 1em 0 1em 20px; 147 | padding: 8px 10px 5px 40px; 148 | border: 1px solid #eee; 149 | color: #95561b; 150 | } 151 | 152 | blockquote p { 153 | margin-top: 0.5em; 154 | margin-bottom: 0.5em; 155 | } 156 | 157 | pre { 158 | padding: 15px 20px; 159 | border-top: 1px solid #cfe4e8; 160 | border-left: 1px solid #cfe4e8; 161 | color: #086dac; 162 | background-color: #ebf1f2; 163 | overflow: auto; 164 | width: 90%; 165 | _width: 95%; /* for IE6 */ 166 | } 167 | 168 | code { 169 | color: #086dac; 170 | background-color: #ebf1f2; 171 | } 172 | 173 | /* Text area 174 | ---------------*/ 175 | textarea { 176 | font-size: 110%; 177 | } 178 | 179 | /* List 180 | ---------------*/ 181 | 182 | ul, 183 | ol { 184 | margin: 1em 30px; 185 | padding: 0; 186 | list-style-position: outside; 187 | } 188 | 189 | ul ul,ul ol,ul ol,ol ol { 190 | margin: 0.3em 0 0.3em 15px; 191 | } 192 | 193 | /* Table 194 | ---------------*/ 195 | 196 | table { 197 | margin: 1em 0; 198 | border-width: 1px; 199 | border-style: solid; 200 | border-color: #ddd #ccc #ccc #ddd; 201 | background-color: #fff; 202 | } 203 | 204 | caption { 205 | padding-bottom: 0.3em; 206 | } 207 | 208 | th, 209 | td { 210 | padding: 0.3em 10px; 211 | border-collapse: separate; 212 | border-spacing: 1px; 213 | overflow-wrap: break-word; 214 | } 215 | 216 | th { 217 | border-right: 1px solid #ddd; 218 | color: #333; 219 | background-color: #f5f5f5; 220 | overflow-wrap: break-word; 221 | } 222 | 223 | td { 224 | border-right: 1px solid #eee; 225 | border-top: 1px solid #eee; 226 | overflow-wrap: break-word; 227 | } 228 | 229 | th.center { 230 | text-align: center; 231 | } 232 | 233 | td.center { 234 | text-align: center; 235 | } 236 | 237 | th.right { 238 | text-align: right; 239 | } 240 | 241 | td.right { 242 | text-align: right; 243 | } 244 | 245 | th.left { 246 | text-align: left; 247 | } 248 | 249 | td.left { 250 | text-align: left; 251 | } 252 | 253 | /* Others 254 | ---------------*/ 255 | 256 | hr { 257 | margin: 1.5em 0; 258 | border: none; 259 | border-top: 1px dotted #ccc; 260 | } 261 | 262 | /*======================================== 263 | div#header 264 | ========================================*/ 265 | 266 | div#header { 267 | padding: 1px 0; 268 | background-color: #fff; 269 | } 270 | 271 | /* Website Title 272 | ---------------*/ 273 | 274 | div#header p.siteName { 275 | margin: 25px 30px 10px; 276 | line-height: 1; 277 | font-size: 144%; 278 | font-weight: bold; 279 | } 280 | 281 | div#header p.siteName a { 282 | text-decoration: none; 283 | color: #417698; 284 | } 285 | 286 | div#header p.siteName a:hover { 287 | color: #000; 288 | } 289 | 290 | div#header p.description { 291 | margin: 0 30px 25px; 292 | font-size: 92%; 293 | } 294 | 295 | /*======================================== 296 | div#content 297 | ========================================*/ 298 | 299 | div#content { 300 | padding-bottom: 1px; 301 | border-top: 1px solid #eee; 302 | background-color: #fff; 303 | } 304 | 305 | p.topicPath { 306 | margin: 0 30px 10px; 307 | padding-top: 8px; 308 | line-height: 1.6; 309 | text-align: center; 310 | } 311 | 312 | /*========================= 313 | div#main 314 | =========================*/ 315 | 316 | /* > div.entry 317 | ---------------*/ 318 | 319 | div.entry { 320 | margin: 1em 30px; 321 | padding: 1px 0; 322 | _height: 1px; /* for IE6 */ 323 | *min-height: 1px; /* for IE7 */ 324 | overflow-wrap: break-word; 325 | } 326 | 327 | /* body.archives */ 328 | 329 | body.archives div.entry { 330 | margin-top: 0; 331 | } 332 | 333 | /* Entry Title 334 | ---------------*/ 335 | 336 | div.entry h1 { 337 | margin-bottom: 0; 338 | padding: 0.2em 13px 0.4em; 339 | border-left: 5px solid #666; 340 | border-bottom: 1px dotted #ccc; 341 | } 342 | 343 | div.entry h1 a { 344 | text-decoration: none; 345 | } 346 | 347 | div.entry h1 a:link { 348 | color: #333; 349 | } 350 | 351 | div.entry h1 a:visited { 352 | color: #444; 353 | } 354 | 355 | div.entry h1 a:hover { 356 | color: #2091da; 357 | text-decoration: underline; 358 | } 359 | 360 | /* ul.info 361 | ---------------*/ 362 | 363 | div.entry ul.info { 364 | margin: -1em 0 1em 0; 365 | padding: 0.3em 0; 366 | border-left: 5px solid #ccc; 367 | border-bottom: 1px solid #eee; 368 | list-style-type: none; 369 | background-color: #f5f5f5; 370 | } 371 | 372 | div.entry ul.info li { 373 | margin: 0.3em 0; 374 | padding: 0 15px; 375 | border-right: 1px solid #ddd; 376 | color: #444; 377 | float: left; 378 | font-size: 85%; 379 | } 380 | 381 | div.entry ul.info li a { 382 | text-decoration: none; 383 | } 384 | 385 | /* Text Style 386 | ---------------*/ 387 | 388 | div.textBody { 389 | margin-top: 1em; 390 | margin-bottom: 1em; 391 | } 392 | 393 | div.textBody p { 394 | line-height: 1.7; 395 | } 396 | 397 | div.textBody h2 { 398 | margin-top: 2em; 399 | } 400 | 401 | div.textBody dl { 402 | padding: 0.5em 20px; 403 | border: 1px solid #eee; 404 | } 405 | 406 | div.textBody dt { 407 | margin: 0.7em 0; 408 | padding-bottom: 0.3em; 409 | border-bottom: 1px dotted #ccc; 410 | font-weight: bold; 411 | color: #0066CC; 412 | } 413 | 414 | div.textBody dd { 415 | margin: 0.5em 0; 416 | } 417 | 418 | a.folding { 419 | color: #e040c0; 420 | text-decoration: underline; 421 | } 422 | 423 | /*========================= 424 | div#utilities 425 | =========================*/ 426 | 427 | div#utilities p { 428 | margin: 0.2em 10px; 429 | } 430 | 431 | div#utilities dl { 432 | margin: 5px 0; 433 | padding-bottom: 5px; 434 | } 435 | 436 | div#utilities dl dt { 437 | margin: 5px 5px; 438 | padding: 0.4em 13px; 439 | color: #fff; 440 | background-color: #777; 441 | letter-spacing: 1px; 442 | } 443 | 444 | div#utilities dl.others dt { 445 | background-color: #aaa; 446 | } 447 | 448 | div#utilities dl dd { 449 | margin: 0 5px; 450 | padding: 1px 0; 451 | background-color: #f5f5f5; 452 | overflow-wrap: break-word; 453 | } 454 | 455 | div#utilities dl dd ul { 456 | margin: 5px 10px 5px 25px; 457 | } 458 | 459 | div#utilities dl dd ul li { 460 | margin: 0.5em 0; 461 | } 462 | 463 | div#utilities dl dd ul li a { 464 | text-decoration: none; 465 | } 466 | 467 | /*======================================== 468 | div#footer 469 | ========================================*/ 470 | 471 | div#footer { 472 | padding: 1px 0 1em; 473 | } 474 | 475 | div#footer a { 476 | color: #aaa; 477 | text-decoration: none; 478 | } 479 | 480 | div#footer a:hover { 481 | color: #fff; 482 | } 483 | 484 | div#footer ul { 485 | margin: 0.7em 0; 486 | text-align: right; 487 | color: #ddd; 488 | font-size: 85%; 489 | } 490 | 491 | div#footer ul li { 492 | margin-left: 5px; 493 | display: inline; 494 | } 495 | 496 | div#footer address { 497 | text-align: right; 498 | font-style: normal; 499 | color: #eee; 500 | } 501 | 502 | /*======================================== 503 | Class 504 | ========================================*/ 505 | 506 | /* Headline 507 | ---------------*/ 508 | 509 | dl.headline { 510 | margin: 0.5em 0; 511 | } 512 | 513 | dl.headline dt span.date { 514 | font-size: 85%; 515 | } 516 | 517 | dl.headline dd { 518 | margin: 0.5em 0 1.2em; 519 | padding-bottom: 1.2em; 520 | border-bottom: 3px solid #eee; 521 | } 522 | 523 | dl.headline dd ul { 524 | margin: 0; 525 | list-style-type: none; 526 | } 527 | 528 | dl.headline dd ul li { 529 | margin: 0.3em 5px 0.3em 0; 530 | display: inline; 531 | font-size: 92%; 532 | } 533 | 534 | dl.headline dd ul li.textBody { 535 | display: block; 536 | font-size: 100%; 537 | } 538 | 539 | /* Option 540 | ---------------*/ 541 | 542 | .option { 543 | margin: 1em 30px; 544 | padding: 1px 10px; 545 | border: 1px solid #eee; 546 | } 547 | 548 | /* Clearfix 549 | ---------------*/ 550 | 551 | div#content, 552 | div.entry ul.info, 553 | div.entry div.textBody { 554 | _height: 1px; 555 | min-height: 1px; 556 | /*\*//*/ 557 | height: 1px; 558 | overflow: hidden; 559 | /**/ 560 | } 561 | 562 | div#content:after, 563 | div.entry ul.info:after, 564 | div.entry div.textBody:after, 565 | div.entry ul.reaction:after { 566 | height: 0; 567 | visibility: hidden; 568 | content: "."; 569 | display: block; 570 | clear: both; 571 | } 572 | 573 | .clear { 574 | display: block; 575 | clear: both; 576 | } 577 | 578 | /* IE6 - なにがあってもカラム落ちを防ぐ 579 | ---------------*/ 580 | 581 | div#main, 582 | div#utilities dl.navi, 583 | div#utilities dl.others { 584 | _overflow: hidden; 585 | } 586 | 587 | /*======================================== 588 | #Decoration# 589 | ここからは単なる装飾 590 | */ 591 | 592 | div#header { 593 | margin-bottom: 1em; 594 | background-color: #f0f0f0; 595 | border-radius: 10px; 596 | -moz-border-radius: 10px; 597 | -webkit-border-radius: 10px; 598 | } 599 | div#header { 600 | border-radius: 10px; 601 | -moz-border-radius: 10px; 602 | -webkit-border-radius: 10px; 603 | } 604 | div#header p.description { 605 | color: #a0a0a0; 606 | } 607 | div#header p.siteName a { 608 | text-decoration: none; 609 | color: #000; 610 | } 611 | div#header p.siteName a:hover { 612 | color: #417698; 613 | } 614 | div#content { 615 | border-radius: 10px; 616 | -moz-border-radius: 10px; 617 | -webkit-border-radius: 10px; 618 | } 619 | 620 | div.section { 621 | margin: 1em; 622 | padding-left:1.5em; 623 | padding-right:1.5em; 624 | } 625 | 626 | div.section { 627 | border-style: solid; 628 | border-width: thin; 629 | border-color: #c0c0c0; 630 | border-radius: 10px; 631 | -moz-border-radius: 10px; 632 | -webkit-border-radius: 10px; 633 | } 634 | 635 | div.entry h2 { 636 | background-color: #f5f5f5; 637 | overflow-wrap: break-word; 638 | } 639 | 640 | div.entry ul.info { 641 | background-color: #ffffff; 642 | padding: 0 0; 643 | } 644 | H3 { 645 | border-color: #606060; 646 | border-bottom-style: dotted; 647 | border-width: thin; 648 | } 649 | H4 { 650 | border-color: #606060; 651 | } 652 | H5 { 653 | border-color: #606060; 654 | } 655 | H6 { 656 | } 657 | 658 | div.textBody p, div.textBody li { 659 | line-height: 1.5; 660 | letter-spacing: 1px; 661 | } 662 | 663 | blockquote { 664 | /* 665 | background-image: url(images/icon/quote.gif); 666 | background-repeat: no-repeat; 667 | background-position: 5px 5px; 668 | */ 669 | border-radius: 6px; 670 | -webkit-border-radius: 6px; 671 | -moz-border-radius: 6px; 672 | } 673 | 674 | pre { 675 | border-radius: 6px; 676 | -webkit-border-radius: 6px; 677 | -moz-border-radius: 6px; 678 | } 679 | 680 | th, td { 681 | text-align: left; 682 | } 683 | 684 | div#utilities ul { 685 | text-decoration: none; 686 | } 687 | div#utilities dt { 688 | border-radius: 10px; 689 | -moz-border-radius: 10px; 690 | -webkit-border-radius: 10px; 691 | } 692 | div#utilities ul li{ 693 | list-style-type: none; 694 | border-color: #d0d0d0; 695 | border-bottom-style: dotted; 696 | border-width: thin; 697 | } 698 | div#utilities a:link { 699 | color: #333; 700 | } 701 | div#utilities a:visited { 702 | color: #444; 703 | } 704 | div#utilities a:hover { 705 | color: #2091da; 706 | text-decoration: underline; 707 | } 708 | div#footer { 709 | max-width: none; 710 | } 711 | div#footer address { 712 | color: #888; 713 | } 714 | div#utilities dl { 715 | padding-right:1em; 716 | padding-left:1em; 717 | 718 | } 719 | div#utilities dl.navi { 720 | padding-top:1em; 721 | } 722 | div#utilities dl.others dt { 723 | margin-top: 1em; 724 | } 725 | div#utilities dl.others dd, div#utilities dl.navi dd { 726 | border-radius: 6px; 727 | -moz-border-radius: 6px; 728 | -webkit-border-radius: 6px; 729 | } 730 | 731 | span.italic { 732 | font-style: italic; 733 | } 734 | 735 | /* tohtml.vim */ 736 | div#vimCodeElement { 737 | margin-top: -1em; 738 | margin-bottom: -1em; 739 | } 740 | -------------------------------------------------------------------------------- /autoload/openuri.vim: -------------------------------------------------------------------------------- 1 | "============================================================================= 2 | " Description: Open URI 3 | " see doc/openuri.jax 4 | " Author: fuenor 5 | " http://sites.google.com/site/fudist/Home (Japanese) 6 | "============================================================================= 7 | let s:version = 103 8 | scriptencoding utf-8 9 | if exists('g:disable_openuri') && g:disable_openuri == 1 10 | finish 11 | endif 12 | if exists('g:openuri_version') && g:openuri_version < s:version 13 | let g:loaded_openuri = 0 14 | endif 15 | if exists('g:loaded_openuri') && g:loaded_openuri && !exists('fudist') 16 | finish 17 | endif 18 | if v:version < 700 19 | finish 20 | endif 21 | let g:openuri_version = s:version 22 | let g:loaded_openuri = 1 23 | let s:save_cpo = &cpo 24 | set cpo&vim 25 | 26 | if !exists('g:openuri_unix_style_path') 27 | let g:openuri_unix_style_path = 1 28 | endif 29 | if !exists('g:openuri_urichr') 30 | " let g:openuri_urichr = "[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~]" 31 | let g:openuri_urichr = "[-0-9a-zA-Z!#$%&'*+,./:;=?@_~]" 32 | endif 33 | 34 | if !exists('g:openuri_pathchr') 35 | let g:openuri_pathchr = "[-0-9a-zA-Z!#$%&'()*+,./:;=?@_~{}[\\]\\\\]" 36 | endif 37 | 38 | " 文字列指定された場合は文字列をURIとして開く 39 | " カーソル位置のURIを開いたら 1 を返す 40 | function! openuri#open(...) 41 | call openuri#init() 42 | if a:0 && a:1 != '' 43 | let ret = s:openstr(a:1) 44 | else 45 | let ret = s:cursorline() 46 | endif 47 | return ret == 1 48 | endfunction 49 | 50 | function! openuri#openVis() 51 | let akeep = @a 52 | norm! gv"ay 53 | let uri = @a 54 | let @a = akeep 55 | call openuri#open(uri) 56 | endfunction 57 | 58 | """""""""""""""""""""""""""""" 59 | " command! -nargs=? Openuri call openuri#cursorline() 60 | function! openuri#cursorline(...) 61 | let str = a:0 ? a:1 : '' 62 | if !openuri#open(str) 63 | exe "normal! \" 64 | endif 65 | return '' 66 | endfunction 67 | 68 | " default 69 | let s:howmsuffix = 'howm' 70 | 71 | function! openuri#AddScheme(key, path) 72 | call openuri#init() 73 | let g:openuri_scheme[a:key] = a:path 74 | return g:openuri_scheme 75 | endfunction 76 | 77 | function! openuri#init() 78 | let l:howm_dir = '~/howm' 79 | if exists('g:howm_dir') 80 | let l:howm_dir = g:howm_dir 81 | elseif exists('g:qfixmemo_dir') 82 | let l:howm_dir = g:qfixmemo_dir 83 | endif 84 | let l:memo_path = l:howm_dir 85 | if exists('g:qfixmemo_dir') 86 | let l:memo_path = g:qfixmemo_dir 87 | elseif exists('g:howm_dir') 88 | let l:memo_path = g:howm_dir 89 | endif 90 | if exists('g:openuri_memopath') 91 | let l:memo_path = g:openuri_memopath 92 | endif 93 | let l:rel_dir = l:memo_path 94 | if exists('g:openuri_relpath') 95 | let l:rel_dir = g:openuri_relpath 96 | elseif exists('g:QFixHowm_RelPath') 97 | let l:rel_dir = g:QFixHowm_RelPath 98 | endif 99 | 100 | let g:openuri_scheme['howm'] = l:howm_dir 101 | let g:openuri_scheme['memo'] = l:memo_path 102 | let g:openuri_scheme['rel'] = l:rel_dir 103 | let g:openuri_schemereg = '' 104 | for key in keys(g:openuri_scheme) 105 | let g:openuri_schemereg = g:openuri_schemereg.'\|'.key 106 | endfor 107 | 108 | if exists('g:QFixHowm_OpenVimExtReg') 109 | let g:openuri_vimextreg = g:QFixHowm_OpenVimExtReg 110 | endif 111 | if exists('g:QFixHowm_OpenURIcmd') 112 | let g:openuri_cmd = g:QFixHowm_OpenURIcmd 113 | endif 114 | if exists('g:QFixHowm_Edit') 115 | let g:openuri_edit = g:QFixHowm_Edit 116 | endif 117 | endfunction 118 | 119 | """""""""""""""""""""""""""""" 120 | " カーソル位置のファイルを開く 121 | """""""""""""""""""""""""""""" 122 | " Vimで開くファイル指定 123 | if !exists('g:openuri_vimextreg') 124 | let g:openuri_vimextreg = '\.\(txt\|mkd\|wiki\|rd\|vim\|js\|css\|xml\|java\|py\|rb\|h\|c\|cpp\|ini\|conf\)$' 125 | endif 126 | 127 | " カーソル位置のファイルを開くコマンド 128 | if !exists('g:openuri_cmd') 129 | if has('mac') 130 | let g:openuri_cmd = "call system('open %s')" 131 | elseif has('unix') 132 | let g:openuri_cmd = "call system('firefox %s &')" 133 | if exists('$ANDROID_DATA') 134 | let g:openuri_cmd = '!am start --user 0 -a android.intent.action.VIEW -t text/html -d %s' 135 | if !exists("g:netrw_browsex_viewer") 136 | let g:netrw_browsex_viewer = g:openuri_cmd 137 | endif 138 | if exists('$APPBASE') || (system("getprop ro.build.version.sdk") >= 24) 139 | let g:openuri_cmd = "netrw" 140 | else 141 | let g:openuri_bmp = '!am start --user 0 -a android.intent.action.VIEW -t image/* -d %s' 142 | let g:openuri_jpg = g:openuri_bmp 143 | let g:openuri_png = g:openuri_bmp 144 | let g:openuri_gif = g:openuri_bmp 145 | endif 146 | endif 147 | else 148 | " Internet Explorer 149 | " let g:openuri_cmd = '!start "C:/Program Files/Internet Explorer/iexplore.exe" %s' 150 | let g:openuri_cmd = '!start "rundll32.exe" url.dll,FileProtocolHandler %s' 151 | endif 152 | " netrw を使用する場合(:help gx) 153 | " let g:openuri_cmd = 'netrw' 154 | endif 155 | " netrw でリモートを使用 156 | if !exists('g:openuri_netrw_remote') 157 | let g:openuri_netrw_remote = 0 158 | endif 159 | 160 | " scheme:// convert dictionary 161 | if !exists('g:openuri_scheme') 162 | let g:openuri_scheme = {} 163 | endif 164 | 165 | " UNCパスを使用する 166 | if !exists('g:openuri_use_UNC') 167 | let g:openuri_use_UNC = 1 168 | if has('unix') 169 | let g:openuri_use_UNC = 0 170 | endif 171 | endif 172 | 173 | " g:openuri_edit = 'tab' 174 | if !exists('g:openuri_edit') 175 | let g:openuri_edit = '' 176 | endif 177 | 178 | " はてなのhttp記法のゴミ : を取り除く 179 | if !exists('g:openuri_remove_hatenatag') 180 | let g:openuri_remove_hatenatag = 1 181 | endif 182 | 183 | function! s:cursorline() 184 | let prevcol = col('.') 185 | let str = getline('.') 186 | 187 | " >>> 188 | if exists('g:howm_glink_pattern') && g:howm_glink_pattern != '' 189 | let pos = match(str, g:howm_glink_pattern) 190 | if pos > -1 && col('.') >= pos 191 | let str = strpart(str, pos) 192 | let str = substitute(str, '^\s*\|\s*$', '', 'g') 193 | let str = substitute(str, '^'.g:howm_glink_pattern.'\s*', '', '') 194 | let imgsfx = '\.\(jpg\|jpeg\|png\|bmp\|gif\)$' 195 | if str =~ imgsfx 196 | let str = substitute(str, '^&', '', '') 197 | endif 198 | return s:openstr(str) 199 | endif 200 | endif 201 | 202 | " カーソル位置の文字列を拾う[:c:/temp/test.jpg:]や[:http://example.com:(title=hoge)]形式 203 | let col = col('.') 204 | let pathhead = '\([A-Za-z]:[/\\]\|\~[/\\]\|\.\.\?[/\\]\|[/\\]\)' 205 | let urireg = '\(\(http\|https\|file\|ftp'.g:openuri_schemereg.'\)://\|'.pathhead.'\)' 206 | let [lnum, colf] = searchpos('\[:\?&\?'.urireg, 'nbc', line('.')) 207 | if lnum != 0 && colf != 0 208 | let str = strpart(getline('.'), colf-1) 209 | let lstr = substitute(str, '\[:\?&\?'.urireg, '', '') 210 | let len = matchend(lstr, ':[^\]]*]') 211 | if len < 0 212 | let str = '' 213 | else 214 | let len += matchend(str, '\[:\?&\?'.urireg) 215 | let str = strpart(str, 0, len) 216 | endif 217 | if str != '' && col < (colf + len(str)) 218 | if str =~ '^\[:\?' 219 | if str =~ '^\[:\?.*:vim\]$' 220 | let str = substitute(str, '^\[:\?\|:vim\]$', '', 'g') 221 | exe g:openuri_edit.'edit '. escape(str, '%#') 222 | return 1 223 | endif 224 | if g:openuri_remove_hatenatag 225 | let str = substitute(str, ':\(title=\|image[:=]\)\([^\]]*\)\?]$', ':]', '') 226 | endif 227 | let str = substitute(str, ':[^:\]]*]$', '', '') 228 | endif 229 | let str = substitute(str, '^\[:\?&\?', '', '') 230 | return s:openstr(str) 231 | endif 232 | endif 233 | 234 | " カーソル位置の文字列を拾う 235 | let urichr = g:openuri_urichr 236 | let pathchr = g:openuri_pathchr 237 | let pathhead = '\(\([A-Za-z]:[/\\]\|\~[/\\]\|[\\][\\]\|\.\.\?[/\\]\)\)' 238 | let urireg = '\(\(http\|https\|file\|ftp'.g:openuri_schemereg.'\)://\|'.pathhead.'\)' 239 | let [lnum, colf] = searchpos(urireg, 'nbc', line('.')) 240 | if colf == 0 && lnum == 0 && g:openuri_unix_style_path 241 | let urireg = '\(/'.pathchr.'\+\)\{2,}\ze' 242 | let [lnum, colf] = searchpos(urireg, 'nbc', line('.')) 243 | if colf == 0 && lnum == 0 244 | return "\" 245 | endif 246 | let str = strpart(getline('.'), colf-1) 247 | let str = matchstr(str, pathchr.'\+') 248 | if colf <= prevcol && colf + strlen(str) > prevcol 249 | let str = substitute(str, '[)\]]$', '', '') 250 | let str = substitute(str, ':\+$', '', '') 251 | if str != '' 252 | return s:openstr(str) 253 | endif 254 | endif 255 | else 256 | let str = strpart(getline('.'), colf-1) 257 | if str =~ '^https\?:\|^ftp:' 258 | let str = matchstr(str, urichr.'\+') 259 | else 260 | let str = matchstr(str, pathchr.'\+') 261 | endif 262 | if colf <= prevcol && colf + strlen(str) > prevcol 263 | let str = substitute(str, ':\+$', '', '') 264 | let str = substitute(str, '[)\]]$', '', '') 265 | if str != '' 266 | return s:openstr(str) 267 | endif 268 | endif 269 | endif 270 | return "\" 271 | endfunction 272 | 273 | function! s:cnvScheme(dict, str) 274 | let str = a:str 275 | let g:openuri_schemereg = '' 276 | for key in keys(a:dict) 277 | let g:openuri_schemereg = g:openuri_schemereg.'\|'.key 278 | let path = substitute(fnamemodify(a:dict[key], ':p'), '\\', '/', 'g') 279 | let str = substitute(str, '^'.key.'://[/\\]\?', path, '') 280 | endfor 281 | return str 282 | endfunction 283 | 284 | function! s:openstr(str) 285 | let str = a:str 286 | 287 | let str = s:cnvScheme(g:openuri_scheme, str) 288 | if g:openuri_use_UNC == 0 && str =~ '^\\\\' 289 | return "\" 290 | endif 291 | 292 | let str = substitute(str, '[[:space:]]*$', '', '') 293 | let l:vimextreg = '\.'.s:howmsuffix.'$' 294 | if exists('g:QFixHowm_FileExt') 295 | let l:vimextreg = '\.'.g:QFixHowm_FileExt.'$'.'\|'.l:vimextreg 296 | endif 297 | if exists('g:qfixmemo_ext') 298 | let l:vimextreg = '\.'.g:qfixmemo_ext.'$'.'\|'.l:vimextreg 299 | endif 300 | if g:openuri_vimextreg != '' 301 | let l:vimextreg = '\('.l:vimextreg.'\)\|'.g:openuri_vimextreg 302 | endif 303 | 304 | let pathhead = '\([A-Za-z]:[/\\]\|\~[/\\]\|\.\.\?[/\\]\|\\\{2}\|[/\\]\)' 305 | if str =~ '^\(\(https\|http\|file\|ftp\)://\|'.pathhead.'\)$' 306 | return "\" 307 | endif 308 | 309 | " Vimか指定のプログラムで開く 310 | if str =~ '^'.pathhead 311 | if str !~ '^\\\\' 312 | let prevPath = s:escape(getcwd(), ' ') 313 | exe 'chdir ' . s:escape(fnamemodify(expand('%'), ':h'), ' ') 314 | let str = fnamemodify(str, ':p') 315 | silent! exe 'chdir ' . prevPath 316 | endif 317 | if str !~ l:vimextreg 318 | if g:openuri_cmd =~ '\c^'.'netrw' 319 | if has("win32") || has("win95") || has("win64") || has("win16") 320 | if &enc != 'cp932' && str =~ '[^\x00-\xff]' 321 | let str = iconv(str, &enc, 'cp932') 322 | endif 323 | endif 324 | " let str = 'file://'.str 325 | call netrw#BrowseX(str, g:openuri_netrw_remote) 326 | return 1 327 | endif 328 | let ext = tolower(fnamemodify(str, ':e')) 329 | if !exists('g:openuri_'.ext) && exists('g:QFixHowm_Opencmd_'.ext) 330 | exe 'let g:openuri_'.ext.' = g:QFixHowm_Opencmd_'.ext 331 | endif 332 | if exists('g:openuri_'.ext) 333 | let str = expand(str) 334 | if has("win32") || has("win95") || has("win64") || has("win16") 335 | if &enc != 'cp932' && str =~ '[^\x00-\xff]' 336 | let str = iconv(str, &enc, 'cp932') 337 | endif 338 | endif 339 | let str = substitute(str, '\\', '/', 'g') 340 | exe 'let cmd = g:openuri_'.ext 341 | let cmd = substitute(cmd, '["'."'".']\?%s["'."'".']\?', '', '') 342 | let cmd .= shellescape(str, 1) 343 | silent! exe cmd 344 | return 1 345 | endif 346 | else 347 | if str !~ '^\\\\' 348 | let dir = fnamemodify(str, ':h') 349 | if isdirectory(dir) == 0 350 | silent! call mkdir(dir, 'p') 351 | endif 352 | let str = substitute(str, '\\', '/', 'g') 353 | endif 354 | if has('unix') 355 | let str = escape(str, ' ') 356 | endif 357 | exe g:openuri_edit.'edit '. escape(str, '%#') 358 | return 1 359 | endif 360 | if fnamemodify(str, ':e') == '' 361 | let str = substitute(str, '\\', '/', 'g') 362 | if has('unix') 363 | let str = escape(str, ' ') 364 | endif 365 | exe g:openuri_edit.'edit '. escape(str, '%#') 366 | return 1 367 | endif 368 | endif 369 | 370 | let urireg = '\(\(https\|http\|file\|ftp\)://\|'.pathhead.'\)' 371 | if str !~ '^'.urireg 372 | return "\" 373 | endif 374 | " あとはブラウザで開く 375 | let uri = str 376 | if uri =~ '^file://' 377 | let uri = substitute(uri, '^file://', '', '') 378 | let uri = expand(uri) 379 | let uri = 'file://'.uri 380 | endif 381 | if uri =~ '^'.pathhead 382 | let uri = expand(uri) 383 | let uri = 'file://'.uri 384 | endif 385 | let uri = substitute(uri, '\\', '/', 'g') 386 | if uri == '' 387 | return "\" 388 | endif 389 | return s:openuri(uri) 390 | endfunction 391 | 392 | function! s:openuri(uri) 393 | let cmd = '' 394 | let bat = 0 395 | 396 | let uri = substitute(a:uri, '^\s*\|\s*$', '', 'g') 397 | if uri =~ '^\(https\?\|ftp\)://' 398 | let urichr = g:openuri_urichr 399 | let uri = matchstr(uri, urichr.'\+') 400 | endif 401 | if has("win32") || has("win95") || has("win64") || has("win16") 402 | if &enc != 'cp932' && uri =~ '^file://' && uri =~ '[^\x00-\xff]' 403 | let bat = 1 404 | endif 405 | endif 406 | if g:openuri_cmd =~ '\c^'.'netrw$' 407 | let str = uri 408 | if bat 409 | let str = iconv(uri, &enc, 'cp932') 410 | endif 411 | let pathhead = '\([A-Za-z]:[/\\]\|\~[/\\]\|\.\.\?[/\\]\|\\\{2}\|[/\\]\)' 412 | if str =~ '^'.pathhead 413 | " let str = 'file://'.str 414 | endif 415 | call netrw#BrowseX(uri, g:openuri_netrw_remote) 416 | return 1 417 | endif 418 | if g:openuri_cmd != '' 419 | let cmd = substitute(g:openuri_cmd, '^netrw|', '', '') 420 | if g:openuri_cmd =~ '\(rundll32\|iexplore\(\.exe\)\?\)' && uri =~ '^file://' 421 | else 422 | let uri = s:EncodeURL(uri, &enc) 423 | endif 424 | " Windowsで &encが cp932以外か !start cmd /c が指定されていたらバッチ化して実行 425 | if bat || cmd =~ '^!start\s*cmd\(\.exe\)\?\s*/c' 426 | let cmd = substitute(cmd, '^[^"]\+', '', '') 427 | let uri = substitute(uri, '&', '"\&"', 'g') 428 | let uri = substitute(uri, '%', '%%', 'g') 429 | let cmd = substitute(cmd, '%s', escape(uri, '&'), '') 430 | let cmd = iconv(cmd, &enc, 'cp932') 431 | let s:uricmdfile = fnamemodify(s:tempfile, ':p:h') . '/uricmd.bat' 432 | call writefile([cmd], s:uricmdfile) 433 | let cmd = '!start "'.s:uricmdfile.'"' 434 | silent! exe cmd 435 | return 1 436 | endif 437 | 438 | let cmd = substitute(cmd, '%s', escape(uri, '&'), '') 439 | if has("win32") || has("win95") || has("win64") || has("win16") 440 | let cmd = escape(cmd, '%#!') 441 | let cmd = substitute(cmd, '^\\!start','!start', '') 442 | endif 443 | silent! exe cmd 444 | return 1 445 | endif 446 | return "\" 447 | endfunction 448 | 449 | """""""""""""""""""""""""""""" 450 | " URL Encode 451 | """""""""""""""""""""""""""""" 452 | let s:pcte = [ 453 | \ ["'", '%27'], 454 | \ [' ', '%20'], 455 | \ ['!', '%21'], 456 | \ ['(', '%28'], 457 | \ [')', '%29'], 458 | \ [';', '%3B'], 459 | \ ['@', '%40'], 460 | \ ['\$', '%24'], 461 | \ ['\*', '%2A'], 462 | \ ['\[', '%5B'], 463 | \ ['\]', '%5D'] 464 | \ ] 465 | 466 | function! s:EncodeURL(str, ...) 467 | let to_enc = 'utf8' 468 | if a:0 469 | let to_enc = a:1 470 | endif 471 | let str = iconv(a:str, &enc, to_enc) 472 | let save_enc = &enc 473 | let &enc = to_enc 474 | " FIXME:本当は'[^-0-9a-zA-Z._~]'を変換? 475 | let str = substitute(str, '[^\x00-\xff]', '\=s:URLByte2hex(s:URLStr2byte(submatch(0)))', 'g') 476 | for pe in s:pcte 477 | let str = substitute(str, pe[0], pe[1], 'g') 478 | endfor 479 | let &enc = save_enc 480 | return str 481 | endfunction 482 | 483 | function! s:URLStr2byte(str) 484 | return map(range(len(a:str)), 'char2nr(a:str[v:val])') 485 | endfunction 486 | 487 | function! s:URLByte2hex(bytes) 488 | return join(map(copy(a:bytes), 'printf("%%%02X", v:val)'), '') 489 | endfunction 490 | 491 | """""""""""""""""""""""""""""" 492 | " remove tempfile 493 | """""""""""""""""""""""""""""" 494 | if !exists('g:qfixtempname') 495 | let g:qfixtempname = tempname() 496 | endif 497 | let s:tempfile = g:qfixtempname 498 | 499 | augroup OpenURI 500 | au! 501 | au VimLeavePre * call VimLeave() 502 | augroup END 503 | 504 | function! s:VimLeave() 505 | if exists('s:uricmdfile') 506 | call delete(s:uricmdfile) 507 | endif 508 | endfunction 509 | 510 | """""""""""""""""""""""""""""" 511 | function! s:escape(str, chars) 512 | return escape(a:str, a:chars.((has('win32')|| has('win64')) ? '#%&' : '#%$')) 513 | endfunction 514 | 515 | let &cpo = s:save_cpo 516 | unlet s:save_cpo 517 | 518 | -------------------------------------------------------------------------------- /history.txt: -------------------------------------------------------------------------------- 1 | 2 | このファイルはQFixHowmの履歴ページをコピーしたものです。 3 | 4 | [2016-05-05] 5 | * メニュー画面のsche://リンクがQFixHowm_QFixHowm_ScheduleSearchDirの使用時に動作しないのを修正しました。 6 | * QFixHowm_ScheduleSearchFileでフルパス指定されている場合は、指定ファイルを優先して使用するように変更しました。 7 | 8 | [2016-04-30] 9 | * howm-alarm.Vimを/miscに追加しました。 10 | * pluginディレクトリに追加すると、時間指定されている予定の時間にアラーム表示します。 11 | 12 | [2016-03-03] 13 | 14 | * ダウンロード先をgithubに変更しました。 15 | * メニュー画面表示後にディレクトリが変更されないようにしました。 16 | 17 | [2016-01-27] 18 | * ,aの一覧表示バッファ上で,cコマンドを使用するとエラーが出るのを修正しました。 19 | 20 | [2015-12-11] 21 | * Vimの設定によって折りたたみ(フォールディング)が無効化されることがあるのを修正しました。 22 | 23 | [2015-02-13] 24 | * ,zコマンドが無効になっていたのを修正しました。 25 | QuickFixウィンドウ上で,cコマンドを実行するとエラーが出るのを修正しました。 26 | 27 | [2014-10-17] 28 | * 休日に「山の日」を追加しました。 29 | zip内のmisc/holidayかダウンロードから休日定義ファイルをコピーしてください。 30 | * ,Mコマンドを追加しました。 31 | QuickFix/ロケーションリストのうちQFixHowmで使用していない方のウィンドウを開きます。 32 | 33 | [2014-03-15] 34 | * howm_dirにシンボリックリンクを使用可能にしました。 35 | 36 | [2014-02-25] 37 | * 一部キーマップがおかしくなっていたのを修正しました。 38 | 39 | [2014-01-28] 40 | * qfix_memoファイルタイプにマークダウン記法の見出し、コード、水平線を追加しま 41 | した。 42 | また基本的なマークダウン記法であれば「html変換」でも変換可能になります。 43 | 44 | [2014-01-15] 45 | * QFixHowm/QFixGrepのウィンドウをロケーションリストに変更しました。 46 | これに伴いQuickFixウィンドウのプレビューや絞込みは無効化しました。 47 | 以前のようにQuickFixウィンドウでもプレビューや絞り込みを有効にするには以下 48 | を設定してください。 49 | let g:QFixWin_EnableMode = 1 50 | 51 | [2013-11-16] 52 | * 起動後最初のメニュー画面で表示が乱れることがあるのを修正しました。 53 | (「メニュー表示について」さん、ありがとうございます) 54 | 55 | [2013-10-28] 56 | * 予定表示を高速化し、春分/秋分の日と振替休日を自動生成可能にしました。 57 | 自動生成に対応した休日定義ファイルは misc/holiday にあります。 58 | 従来の休日定義ファイルでは休日自動生成は行われませんがそのまま使えます。 59 | 60 | [2013-10-19] 61 | * 一部環境で動作しないことがあるのを修正しました。 62 | * カレンダーのシンタックスハイライトを修正しました。 63 | 64 | [2013-09-27] 65 | * html変換でcolors_nameが存在しない場合defaultに設定するようにしました。 66 | 67 | [2013-08-05] 68 | * Windowsでパスやファイル名が ( で始まると誤動作するのを修正しました。 69 | 70 | [2013-08-05] 71 | * Windowsでパスやファイル名に#%&が含まれていると誤動作するのを修正しました。 72 | 73 | [2013-08-02] 74 | * Vim 7.3.970以降でmyjpgrepprgが動作しないのを修正しました。 75 | 76 | [2013-08-01] 77 | * Gやzにnmap等でコマンドをマップしているとプレビューが誤動作するのを修正しました。 78 | 79 | [2013-07-29] 80 | * howm-chenv.vimドキュメント修正と追加を行いました。 81 | (na4zagin3さん、ありがとうございます) 82 | 83 | [2013-01-29] 84 | * エントリ分割コマンド(g,W)を正常動作するように修正しました。 85 | (noreplyさん、ありがとうございます) 86 | 87 | [2013-01-29] 88 | * マルチエンコーディングgrepモードを追加しました。 89 | 90 | [2012-12-26] 91 | * mygrepprgを明示的に設定していないと、起動直後の,y ,t コマンドが動作しないのを修正しました。 92 | (noreplyさん、ありがとうございます) 93 | 94 | [2012-12-16] 95 | * howm2html のコードハイライタがVimのランタイムライブラリ(tohtml.vim)のバージョンに依存していたのを修正しました。 96 | (「howm2html.vimでの表示について」さん、ありがとうございます) 97 | 98 | [2012-12-14] 99 | * Vimスクリプトで実装したgrep (agrep.vim)を追加しました。 100 | agrep.vimはVimスクリプトで実装されたgrepで、異なるエンコーディングのファイ 101 | ルが混在していてもgrep可能です。 102 | WindowsでUTF-8を扱いたいが外部grep.exeを用意できない場合や同一ディレクトリ 103 | に異なるエンコーディングのファイルが混在している場合などに有用です。 104 | 105 | [2012-12-02] 106 | * キーワードとランダムファイルの出力先ディレクトリが存在しない場合にディレク 107 | トリを作成するようにしました。 108 | 109 | [2012-10-02] 110 | * 出雲市用に神在月の表示を追加しました。 111 | let calendar_jp = 3 112 | 113 | [2012-08-15] 114 | * MyGrep_cygwin17 を追加し、Windowsで一部UTF-8文字列の検索不可を修正しました。 115 | cygwin 1.7以降のgrep.exeを使用している場合のみ 1 に設定します。 116 | let MyGrep_cygwin17 = 1 117 | 118 | * grep実行時のエラーメッセージを表示するようにしました。 119 | 120 | [2012-08-01] 121 | * set relativenumber 設定時にカレンダーの行番号を非表示にしました。 122 | (delphinus35さん、ありがとうございます) 123 | 124 | [2012-03-25] 125 | * QFixHowm_Keyに""等の特殊表記が使えなくなっていたのを修正しました。 126 | 127 | [2012-02-06] 128 | * sessionoptionsにglobalsを含む場合にエラーが出るのを修正しました。 129 | 130 | * オートリンク検索のソートを更新日順になるよう修正しました。 131 | 132 | * g,HのヘルプをVim標準のヘルプに変更しました。 133 | 134 | [2012-01-27] 135 | * 「処理リスト」がおかしくなっていたのを修正しました。 136 | (Tさん、ありがとうございます) 137 | 138 | * MacOSXでランダム表示が出来なかったのを修正し、ユーザー定義関数でも乱数生成可能にしました。 139 | (emanon001さん、ありがとうございます) 140 | 141 | [2012-01-25] 142 | * sessionoptionsにglobalsを含む場合、エラーが出るのを修正しました。 143 | 144 | * 「Markdown形式のHTML変換」を修正して、ドキュメントを追加しました。 145 | 146 | [2012-01-22] 147 | * HTML変換で外部コマンドを使用してHTML変換が行えるようにしました。 148 | Markdownに対応し、markdown.plとpandocで動作確認しました。 149 | 150 | * qfix_memoファイルタイプでWikiスタイルの文字装飾を扱えるようにしました。 151 | doc/howm2html.zip を解凍してできたsyntax.htmlを参照してください。 152 | http://dl.dropbox.com/u/1736409/howm/syntax.html 153 | 154 | * HTML変換のスーパーpreを修正しました。 155 | 156 | [2012-01-16] 157 | * カレンダーのプレビュー表示を修正しました。 158 | 159 | [2012-01-13] 160 | * MRUの起動チェックを高速化しました。 161 | 162 | [2012-01-09] 163 | * MRUの起動時に取りこぼしがあるのを修正しました。 164 | 165 | * カレンダーを水平分割して表示可能にしました。 166 | 「カレンダーのコマンドマーカーとオプション」 167 | 168 | * QuickFixウィンドウ上の K コマンドとして「MRUリストから削除」を追加しました。 169 | MRUリストから削除されるだけなのでファイル自体は削除されません。 170 | 171 | * Windowsのデフォルト設定で howm:// 等が動作しないことがあるのを修正しました。 172 | 173 | * ファイルを外部ブラウザで開く際に日本語が通らないことがあるのを修正しました。 174 | 175 | * カレンダーの動作を修正し、マーカーコマンドに年月指定を追加しました。 176 | 「カレンダーのコマンドマーカーコマンド」 177 | 178 | [2011-12-26] 179 | 180 | * ファイルサイズが0バイトのファイルをプレビューするとエラー表示されるのを修正しました。 181 | 182 | * {_} と <<< のアクションロックを修正しました。 183 | 184 | * 全文検索の後に更新日順ソートを行なっていなかったのを修正しました。 185 | 186 | * HTML変換に「スーパーpreのシンタックスハイライト」を追加しました。 187 | 188 | * 「カーソル位置のURIをブラウザや外部プログラムで開く」でVimで開きたいファイルを [ と :vim] で囲むことでも指定可能にしました。 189 | 「Vimで開くファイルの指定」 190 | 191 | * 「qfix_memoファイルタイプ」のテーブルヘッダのシンタックスを変更しました。 192 | 193 | * howm2html.cssをVicuna互換のサブセットに変更しました。 194 | 195 | * カレンダーのコマンド < > をで実行するときにカーソル位置がずれないようにしました。 196 | 197 | [2011-12-21] 198 | * 「howm2htmlでHTML変換する」のテーブル行判定を修正しました。 199 | 200 | [2011-12-20] 201 | * 「howm2htmlでHTML変換する」のテーブルヘッダで空白を含む・含まない場合の両方を有効にしました。 202 | * 「qfix_memoファイルタイプ」のテーブルヘッダのシンタックスを変更しました。 203 | * howm2html.cssをVicuna互換のサブセットにしました。 204 | * カレンダーのコマンド < > をで実行するときにカーソル位置がずれないようにしました。 205 | 206 | [2011-12-14] 207 | * 各種ドキュメントとcssファイル等を追加しました。 208 | 209 | [2011-12-09] 210 | * HTML変換コマンドを追加しました。 211 | | hi | 現在のバッファをHTML変換して表示(テンポラリ) | 212 | | hI | 現在のバッファをHTML変換して表示 | 213 | | hr | 現在のバッファをHTML再変換(テンポラリ) | 214 | | hR | 現在のバッファをHTML再変換 | 215 | 出力先は let HowmHtml_htmldir = "c:/html" のように指定します。 216 | 217 | [2011-12-08] 218 | * netrwはOSやバージョンによって動作しないことがあるのでデフォルトを変更しました。 219 | 基本的にはQFixHowm_OpenURIcmdを使用してください。 220 | 「カーソル位置のURIをブラウザや外部プログラムで開く」 221 | 222 | * サブメニュー、カレンダーウィンドウの挙動と特定条件下のバグを修正しました。 223 | 224 | [2011-12-06] 225 | * QuickFixウィンドウ上のコマンドに / & を追加しました。 226 | | / | QuickFixウィンドウ/ロケーションリストを切替 | 227 | 228 | | | QuickFixウィンドウ上のパス表示を最短化 | 229 | | & | QuickFixウィンドウの内容をロケーションリストへコピー | 230 | | | QuickFixウィンドウの内容をQFixListウィンドウへコピー | 231 | 232 | * 暗号化ファイルのプレビュー時にパスワードを聞いてこないようにしました。 233 | 234 | * サブメニューのサイズをデフォルトでは固定ではなく、ユーザーが変更したウィンドウサイズを保持するようにしました。 235 | 「メニューとカレンダー」 236 | 237 | * Vim終了時の保存処理を高速化しました。 238 | 239 | * Linuxで新規ディレクトリ内のメモ初期化処理が正しく行われるようにしました。 240 | 241 | * 予定・TODOの休日シフトが年を超えても機能するようにしました。 242 | 243 | [2011-12-02] 244 | * Windows上のVimでcygwin1.7のgrepを実行する際には$LANGを自動設定するようにし 245 | * ました。 246 | デフォルトの$LANG='ja'のままで日本語ファイル名とパスを正確に扱えるようにな 247 | ります。 248 | 249 | * 初期化がうまく行われていないことがあるのを修正しました。 250 | 251 | [2011-12-01] 252 | * g,qとしてカレンダーを追加しました。 253 | またメニューとサブメニュー内にもカレンダー表示を行い、サブメニューにはアウ 254 | トライン機能も追加しています。 255 | これまで howm-calendar.vimを使用していた場合は削除してください。 256 | なおcalendar.vimは必要としません。 257 | 「メニューとカレンダー」 258 | 初回起動時にはサブメニューに簡単な解説が表示されますので、 259 | SubWindow_Titleを変更してから g,i を実行してみてください。 > 260 | 261 | let SubWindow_Title = '__new_submenu__' 262 | < 263 | * 「予定・TODOのキャッシュ表示」でも現在時刻に応じた予定・TODOのソートを行う 264 | * ようにしました。 265 | これに対応した「予定・TODO表示が遅くなってきた場合」を追記しました。 266 | 267 | * 「URIを外部プログラムで開く」のブラウザ呼び出し部分のデフォルトを netrw に 268 | * 変更し、テキストリンクで相対パスとUNCパス(Windows)をサポートしました。 269 | [\\hmsv\share\hoge.txt:] や [../fuga/pu yo.txt:] のように [ と :] を使用し 270 | て特殊なパス指定が行えます。 271 | 272 | * 「複数のクイックメモ」にhowm_dir外のファイルやhowm以外のファイルなど任意の 273 | ファイルを設定できるようにしました。(Ver.2では対応していません) 274 | 275 | * ウィンドウ処理を全般的に修正しました。 276 | 277 | * findstrでもすべてのコマンドを使用可能にしました。 278 | 279 | * TODOで予定表示日数を -1にしているとき @ 予定が表示されないようにしました。 280 | 281 | * 「ユーザーアクションロック」に日本語を含んでいても正常動作するようにしました。 282 | 283 | * 「予定・TODOの検索場所指定」使用時のメニュー画面で予定・TODOのパス処理がお 284 | * かしいのを修正しました。 285 | 286 | * キーワードのリビルドで howm_dir内のすべてのファイルを対象にキーワードを作 287 | * 成していたのを修正しました。 288 | 289 | [2011-10-15] 290 | 291 | ,aのデフォルトを「キャッシュ一覧表示」に変更しました。 292 | 以前のようにキャッシュを使わず常にgrepを実行したい場合は次を設定してください。 293 | > 294 | "全エントリ一覧表示でキャッシュを使用しない 295 | let QFixHowm_TitleListCache = 0 296 | < 297 | [Ver.3] バッファ切替時に「ペアファイル」のファイルタイプが変更されるのを修正しました。 298 | [Ver.3] Windowsでshellslashを設定していない場合にメニュー画面でエラー表示されることがあるのを修正しました。 299 | 300 | プレビューウィンドウの折り返し指定を追加しました。 301 | > 302 | " Previewウィンドウの折り返し 303 | let QFix_PreviewWrap = 1 304 | < 305 | [2011-10-09] 306 | 307 | [Ver.3] クイックメモが常にデフォルトで開かれていたのを修正しました。 308 | また「クイックメモを開く」で複数のクイックメモのオプションをVer.2以前と互換に修正しました。 309 | (noreplyさん、ありがとうございます) 310 | [Ver.3] QFixMemoとしての使用時にでエラーが出るのを修正しました。 311 | (noreplyさん、ありがとうございます) 312 | キーワードに " を含むとエラーが出るのを修正しました。 313 | (syunさん、ありがとうございます) 314 | URLを抽出する際にスペースを含んでいたのを修正しました。 315 | (yamakiさん、ありがとうございます) 316 | 317 | [2011-09-30] 318 | 319 | [Ver.3] howm-calendar.vimが動作していなかったのを修正しました。 320 | (basterさん、ありがとうございます) 321 | 322 | [2011-09-29] 323 | 324 | 「指定日の n日前/後」で @ が当日非表示になるのを修正しました。 325 | (「予定とTODOの挙動について」さん、ありがとうございます) 326 | オートタイトルでカテゴリタグを無視するようにしました。 327 | [Ver.3] 未実装だった「ワイルドカードチャプター」を追加しました。 328 | [Ver.3] 「エントリ一覧の高速な代替コマンド」でバッファを非表示にしても編集状態が維持されるようにしました。 329 | [Ver.3] キーワード再作成で「メニュー」や「サイドバー」も対象にするように修正しました。 330 | jvgrepをサポートしました。 331 | ファイルエンコーディングを気にせず日本語grepが行えますが、制限/注意事項がありますので必ず「jvgrep」を参照してから設定してください。 332 | 333 | [2011-09-05] 334 | 335 | come-from/Wikiスタイルキーワードに \ を含む時にでエラーが出るのを修正しました。 336 | (徳永さん、ありがとうございます) 337 | 不要なエラーメッセージを抑制しました。 338 | [Ver.3] 未実装だった「マクロアクション」を追加しました。 339 | [Ver.3] 一部の処理をautoload化しました。 340 | (mattnさん、ありがとうございます) 341 | [Ver.3] QFixHowm_TitleListCacheを追加しました。 342 | 「エントリ一覧表示の高速な代替コマンド」 343 | [Ver.3] 未実装だった「処理リスト」を追加しました。 344 | (徳永さん、ありがとうございます) 345 | [Ver.3] オートタイトルでタイムスタンプ行を使用しないように修正しました。 346 | [Ver.3] come-from/gotoリンクのハイライトを修正しました。 347 | (徳永さん、ありがとうございます) 348 | [Ver.3] helptagsでエラーが出るのを修正しました。 349 | (mattnさん、ありがとうございます) 350 | 351 | [2011-08-22] 352 | 353 | [Ver.3] 起動時にエラーが出る事があるのを修正しました。 354 | (mattnさん、ありがとうございます) 355 | 356 | [2011-08-19] 357 | 358 | Vim7.3 patch 272による g,n g,pのバージョン間の挙動の違いを修正しました。 359 | (noreplyさん、ありがとうございます) 360 | 「アウトラインモード」で独自のフォールディングを設定しやすくしました。 361 | 「独自のフォールディングを作成」 362 | 「メニュー画面」と「エントリ一覧表示」にファイル選択後のウィンドウを閉じる J コマンドとオプションを追加しました。 363 | > 364 | " メニュー画面からファイルを開いた後ウィンドウを閉じる/閉じない。 365 | let QFixHowm_MenuCloseOnJump = 1 366 | " エントリ一覧表示からファイルを開いた後ウィンドウを閉じる/閉じない。 367 | let QFixHowm_ListCloseOnJump = 0 368 | < 369 | 「予定・TODOのエクスポート」でエラーが出るのを修正しました。 370 | (yamakiさん、ありがとうございます) 371 | 「カーソル位置のURIをブラウザや外部プログラムで開く」の拡張子別起動プログラム指定で拡張子の大文字・小文字を無視するようにしました。 372 | (yamakiさん、ありがとうございます) 373 | [Ver.3] ランダムキャッシュの自動更新が有効でなかったのを修正しました。 374 | 375 | [2011-07-28] 376 | 377 | 「QFixHowm Ver.3」の公開を開始しました。 378 | 当面の間はVer.2も平行してメンテナンスを行います。 379 | 380 | 常に再帰検索を行う「再帰検索モード」を追加しました。 381 | 「検索の基点ディレクトリとファイルエンコーディング」 382 | > 383 | ,rM 検索ディレクトリモードをカレントディレクトリ/ファイル基点でトグル 384 | ,rD ディレクトリ内を常に再帰検索する/しないをトグル 385 | ,rS 検索するファイルエンコーディング指定 386 | < 387 | findstrを使用している場合でも howmタイムスタンプによる「最近"作成"したエントリ」検索を行えるようにしました。 388 | 「最近 "作成" されたエントリをhowmタイムスタンプで検索」 389 | qfixmru.vimのアップデートとドキュメントを追加しました。 390 | 391 | [2011-06-21] 392 | 393 | 「メニュー画面」で%reminder, %recent, %randomを削除した場合にエラーが出るのを修正しました。 394 | (noreplyさん、ありがとうございます) 395 | 396 | [2011-06-16] 397 | 398 | シンタックスファイルを修正しました。 399 | Markdown等でhowm_schedule.vimを使用している方は、あらためてコピーしなおしてください。 400 | メニュー画面を表示する際に分割方法を選択できるようにしました。 401 | メニュー画面から開くファイルのウィンドウの分割方法が選択できるようになります。 402 | 「メニュー画面」 403 | メニュー画面のプレビューウィンドウを常に表示するオプションを追加しました。 404 | 405 | [2011-05-27] 406 | 407 | Windowsで空白を含むパスの扱いを修正しました。 408 | howm2htmlで WikiスタイルリンクとWikiスタイルの強調表示をサポートしました。 409 | 「howm2html」 410 | 411 | [2011-05-17] 412 | 413 | Windowsの findstr使用時に検索対象からバイナリファイルを除外していなかったのを修正しました。 414 | (小西さん、ありがとうございます) 415 | 416 | [2011-05-04] 417 | 418 | バッファにmarkdown等を使用するとエラーが出るのを修正しました。 419 | 420 | [2011-04-24] 421 | 422 | howmファイルの読込/新規作成の体感速度向上のためMRU読込タイミングを修正しました。 423 | 細かいバグ修正とリファクタリングを行いました。 424 | 425 | [2011-03-27] 426 | 427 | コマンド変更、追加 428 | 「メニュー画面」を %reminder、%recent、%random、メニューボタンが使用可能な Emacs版準拠のメニューに変更しました。 429 | これまでメニューを使用していた場合はバックアップを取った上でメニューファイル(デフォルトは howm_dirの Menu-00-00-000000.howm)を削除し g,, を実行してみて下さい。 430 | ランダム表示が行われない場合は g,rR(メニュー画面なら rR)でランダムキャッシュをリビルドして下さい。 431 | ,A を「日記の全エントリ一覧」、 ,rA を「howm_dir内の全ファイル一覧」に変更し、環境や設定にかかわらず動作するように修正しました。 432 | 仕様が若干変更になっていますので、これまでの設定で一覧が検索されない場合はドキュメントを確認してください。 433 | ,ra コマンドの「全エントリ一覧の高速な代替コマンド」に絞り込みコマンド r s dd p u A O を追加しました。 434 | 拡張 Quickfixウィンドウとほぼ同じ操作が行えるようになります。 435 | 「ペアリンクhowmファイル」のペアファイルは対応するファイルのファイルタイプと同じ色分けを行うようにしました。 436 | たとえば「test.py」のペアファイル「test.py.howm」 にソースをコピーすると pythonの色分けそのままで表示されます。 437 | またペアリンクファイル名をフルパスから生成可能なオプションも追加しました。 438 | ,rn ,rNとして「howmファイルのリネーム」コマンドを追加しました。 439 | 内容を推測しやすいようにタイトルから生成したファイル名にリネーム可能です。 440 | 「Andoroidや iPhoneで howmファイルの閲覧・編集」 441 | Windowsの外部ブラウザ呼び出しのデフォルトを拡張子に応じた規定のプログラムで開かれるように rundll32.exe に変更しました。 442 | Chromeを規定のブラウザにしている場合は一度デフォルトで使用してみて下さい。 443 | 予定 @ のデフォルト設定値を 0 に変更しました。 444 | 以前のように昨日の予定も表示したい場合は以下を設定して下さい。 445 | > 446 | "予定 447 | let QFixHowm_ReminderDefault_Schedule = 1 448 | < 449 | howmスタイルの予定・TODOを任意のディレクトリから検索可能にしました。 450 | たとえば changelogメモでも howmスタイルの予定・TODOが使用できます。 451 | 「任意のディレクトリから howmスタイルの予定・TODOを検索」 452 | 453 | システム関係(バッファ、howm_dir、MRU) 454 | QFixHowmのバッファとして「markdownとVimWiki」など任意のファイルタイプを使用可能にしました。 455 | 「複数のhowm_dir」切替で特定の howm_dirのみ markdownを使用するなども可能です。 456 | (重要) 「howm-chenv.vim」を使用している場合はアップデートして下さい。 457 | 「MRUリスト」のライブラリを変更して以下の機能を追加しました。 458 | 「複数のhowm_dir」を簡単に切り替え可能になります。 459 | howm_dirのパス自体を変更しても MRUリストが継続可能になります。 460 | USBメモリなどにhowm_dirを設定している場合にも有効です。 461 | Windowsと Linuxなど内部エンコーディングが異なる環境でも「MRUリスト」のファイルを共有可能になります。 462 | (重要) MRU保存ファイル名等に互換性がないので必要に応じて再設定してください。 (「MRUリスト」) 463 | バグ修正 464 | Windowsで set noshellslash(デフォルト)時の動作を全般的に修正しました。 465 | howm_dirに ¥ が含まれていると howm:// rel:// が動作しない事があるのを修正しました。 466 | howmファイルの拡張子を .howm 以外にしている場合の不具合を修正しました。 467 | howm_dir外にあるメニューファイルが howmとして扱われていなかったのを修正しました。 468 | Windowsで shellslashを設定していない、あるいは howm_dirに / と ¥ を混在している場合の howmファイルのプレビューに色がつかないことがあるのを修正しました。 469 | Linuxで日記検索やファイルリストなどが設定により動作しないことがあるのを修正しました。 470 | WindowsとLinuxで動作が異なる部分を修正しました。 471 | cygwinで「エントリのランダム表示」が動作しなかったのを修正しました。 472 | (「テスト版にてエラーが出ます」さん、ありがとうございます) 473 | syntaxファイルの修正を行いました。 474 | リファクタリングとソースの整理を行いました。 475 | 検索結果に異なる文字エンコーディングが混在していても可能な限り正しく表示するようにしました。 476 | また内部エンコーディングが cp932の時に cp932で使用不可能な文字が含まれていても可能な限り正しく表示されるようになります。 477 | パイプ文字 | を検索するとエラーが出ることがあるのを修正しました。 478 | タブ周りのウィンドウ処理とプレビューウィンドウを使用するプラグインとの相性を改善しました。 479 | 480 | [2011-02-21] 481 | 482 | QFixHowmの日記をカレンダーで表示する「howm-calender.vim」が2010年05月18日以降動作しなくなっていたのを修正しました。 483 | (yamakiさん、ありがとうございます) 484 | 485 | [2011-02-10] 486 | 487 | 同一日、同一内容の予定・TODOが複数ある場合に、一つの予定・TODOとして表示されていなかったのを修正しました。 488 | 489 | [2011-02-09] 490 | QFixHowm 491 | 492 | 予定・TODO表示のデフォルトは昇順で表示するようにしました。 493 | 従来のように降順で表示したい場合は以下を指定します。 494 | > 495 | let QFixHowm_ReminderSortMode = 0 496 | < 497 | (insightdさん、ありがとうございます) 498 | 「予定・TODOのソート指定」を変更しました。 499 | 予定・TODOを好みにグループ分けして表示することが可能になります。 500 | 予定・TODOに「月末指定」を追加しました。 501 | 502 | [2009-01-00]@@ 毎月末は舞踏会の日 503 | 504 | 予定・TODOに「指定日の n日前/後」を追加しました。 505 | 月末の5日前や特定日の翌日などを指定可能です。 506 | 507 | [2009-01-00]@@(-5) 毎月末の5日前は舞踏会の日 508 | 509 | 「予定・TODOのキャッシュ表示」を追加しました。 510 | 一度表示した予定・TODOは高速に表示可能になります。 511 | 「今日の日付行、時刻行」に境界行を追加しました。 512 | またデフォルトで全て表示するように変更しました。 513 | ,ra コマンドの「高速な全エントリ一覧表示」にソートコマンドを追加しました。 514 | S で「ソート」の種類を選択します。 515 | 516 | プレビューウィンドウを使用するプラグインとの相性を改善しました。 517 | 518 | [2011-01-09] 519 | 520 | 「ペアリンクhowmファイル」が動作しなくなっていたのを修正しました。 521 | 522 | [2011-01-03] 523 | 524 | 登録処理高速化のバグで ,l コマンドが正常に動作しなくなっていたのを修正しました。 525 | 「howmファイルの拡張子について」 526 | howm以外の拡張子に変更した場合 howm_dir外のファイルに対しては、QFixHowmの自動整形や色分け等の機能を適用しません。 527 | 528 | [2011-01-01] 529 | 530 | ,ra コマンドとして「Quickfixウィンドウを使用しない全エントリ一覧表示」を追加しました。 531 | 現在の機能は閲覧に限定されますが、一万件以上のエントリを表示しても高速に動作します。 532 | また前回の全エントリ一覧をgrepを実行なしで高速に再表示する事も出来ます。 533 | ,C コマンドを「ファイル名を指定してのhowmファイル作成」に変更しました。 534 | ファイル名には日本語や半角スペースも使用可能です。 535 | 「任意のバッファやプラグインにプレビューを追加する」 536 | linuxで新規ファイル作成時にエラーが出るのを修正しました。 537 | リンクが含まれる行内の非リンク部分でを押した時はブラウザ呼び出ししないように修正しました。 538 | 539 | vim:tw=78:ts=2:syn=qfix_memo.help:norl:foldmethod=indent:nofoldenable 540 | -------------------------------------------------------------------------------- /autoload/qfixgrep.vim: -------------------------------------------------------------------------------- 1 | "================================================================================ 2 | " Description: QFixGrep (日本語Grepヘルパー) 3 | " 本プラグインはキーマップ等のフロントエンドのみ設定している 4 | " grep : qfixlist.vim 5 | " QuickFix : myqfix.vim 6 | " Author: fuenor 7 | " http://sites.google.com/site/fudist/Home/grep 8 | "================================================================================ 9 | let s:version = 300 10 | scriptencoding utf-8 11 | 12 | " Install: 13 | " このファイルとqfixlist.vimをランタイムパスの通った場所へコピーしてくださ 14 | " い。 15 | " qfixlist.vimはautoload対応なのでautoloadディレクトリでもかまいません。 16 | " プレビュー表示や絞り込み検索等にはmyqfix.vimも必要です。 17 | " 18 | " * Windowsのgrep 19 | " grep.exeがある場合は mygrepprgを設定してください。 20 | " let mygrepprg='c:/cygwin/bin/grep' 21 | " let mygrepprg='grep' 22 | " 23 | " デフォルトではfindstrが使用されますが、utf-8等のファイルは検索できま 24 | " せんし正規表現は貧弱です。 25 | " 詳しくは以下を参照してください。 26 | " http://sites.google.com/site/fudist/Home/grep 27 | " 28 | " 好みのgrepコマンドを作成したい場合はこのファイルをコピーして改変してくだ 29 | " さい。 30 | 31 | function! qfixgrep#init() 32 | endfunction 33 | 34 | if exists('g:disable_QFixGrep') && g:disable_QFixGrep 35 | finish 36 | endif 37 | if exists('g:disable_MyGrep') && g:disable_MyGrep 38 | finish 39 | endif 40 | if exists("g:loaded_QFixGrep") && g:loaded_QFixGrep && !exists('g:fudist') 41 | finish 42 | endif 43 | let g:loaded_QFixGrep = 1 44 | if v:version < 700 45 | finish 46 | endif 47 | let s:debug = exists('g:fudist') ? g:fudist : 0 48 | 49 | " let mygrepprg=findstr, let mygrepprg=grepで切り替え可能に 50 | if !exists('g:grep') && exists('g:mygrepprg') 51 | let g:grep = g:mygrepprg 52 | endif 53 | if !exists('g:findstr') 54 | let g:findstr = 'findstr' 55 | endif 56 | 57 | " メニューへの登録 58 | if !exists('MyGrep_MenuBar') 59 | let MyGrep_MenuBar = 2 * has('gui_running') 60 | endif 61 | 62 | " キーマップを使用する 63 | if !exists('g:MyGrep_Keymap') 64 | let g:MyGrep_Keymap = 1 65 | endif 66 | " キーマップリーダー 67 | if !exists('g:MyGrep_Key') 68 | let g:MyGrep_Key = 'g' 69 | if exists('g:QFixHowm_Key') 70 | let g:MyGrep_Key = g:QFixHowm_Key 71 | endif 72 | endif 73 | " キーマップリーダー(2ストローク) 74 | if !exists('g:MyGrep_KeyB') 75 | let g:MyGrep_KeyB = ',' 76 | if exists('g:QFixHowm_KeyB') 77 | let g:MyGrep_KeyB = g:QFixHowm_KeyB 78 | endif 79 | endif 80 | 81 | " デフォルトのファイルパターン 82 | if !exists('g:MyGrep_FilePattern') 83 | let g:MyGrep_FilePattern = '*' 84 | endif 85 | " 検索時にカーソル位置の単語を拾う 86 | if !exists('g:MyGrep_DefaultSearchWord') 87 | let g:MyGrep_DefaultSearchWord = 0 88 | endif 89 | " 検索ディレクトリはカレントディレクトリを基点にする 90 | if !exists('g:MyGrep_CurrentDirMode') 91 | let g:MyGrep_CurrentDirMode = 1 92 | endif 93 | " 検索は常に再帰検索 94 | if !exists('g:MyGrep_RecursiveMode') 95 | let g:MyGrep_RecursiveMode = 0 96 | endif 97 | " デフォルトソートパターン('', 'mtime', 'text', 'reverse') 98 | if !exists('g:MyGrep_Sort') 99 | let g:MyGrep_Sort = '' 100 | endif 101 | " help 102 | if !exists('g:QFixGrep_Help') 103 | let g:QFixGrep_Help= 'qfixgrep_help' 104 | endif 105 | 106 | if !exists('*QFixGrepMenubar') 107 | function QFixGrepMenubar(menu, leader) 108 | let sepcmd = 'amenu 41.333 '.a:menu.'.-sep%d- ' 109 | let menucmd = 'amenu 41.333 '.a:menu.'.%s'.a:leader.'%s %s' 110 | call s:addMenu(menucmd, 'Grep(&G)' , 'e', ':call QFGrep("Grep")') 111 | call s:addMenu(menucmd, 'FGrep(&F)' , 'f', ':call QFGrep("FGrep")') 112 | call s:addMenu(menucmd, 'RGrep(&R)' , 're', ':call QFGrep("RGrep")') 113 | call s:addMenu(menucmd, 'RFGrep(&R)' , 'rf', ':call QFGrep("RFGrep")') 114 | call s:addMenu(menucmd, 'Vimgrep(&V)' , 'v', ':call QFGrep("Vimgrep")') 115 | call s:addMenu(menucmd, 'GrepBuffer(&B)' , 'b', ':call BGrep("", 0, 0)') 116 | exe printf(sepcmd, 1) 117 | 118 | let submenu = '.GrepAdd\ (&\.)' 119 | let menucmd = 'amenu 41.333 '.a:menu.submenu.'.%s'.a:leader.'%s %s' 120 | call s:addMenu(menucmd, 'Grepadd(&G)' , 'E', ':call QFGrep("Grepadd")') 121 | call s:addMenu(menucmd, 'FGrepadd(&F)' , 'F', ':call QFGrep("FGrepadd")') 122 | call s:addMenu(menucmd, 'RGrepadd(&R)' , 'rE', ':call QFGrep("RGrepadd")') 123 | call s:addMenu(menucmd, 'RFGrepadd(&R)' , 'rF', ':call QFGrep("RFGrepadd")') 124 | call s:addMenu(menucmd, 'Vimgrepadd(&V)' , 'V', ':call QFGrep("Vimgrepadd")') 125 | call s:addMenu(menucmd, 'GrepBufferadd(&B)' , 'B', ':call BGrep("",0, 1)') 126 | exe printf(sepcmd, 2) 127 | let menucmd = 'amenu 41.333 '.a:menu.'.%s'.'%s %s' 128 | call s:addMenu(menucmd, 'OpenWindow(&W)' , '\.', ':QFixCopen') 129 | exe printf(sepcmd, 3) 130 | let menucmd = 'amenu 41.333 '.a:menu.'.%s'.a:leader.'%s %s' 131 | call s:addMenu(menucmd, 'MultiEncoding(&G)' , 'rm', ':call qfixlist#ToggleMultiEncodingGrep()') 132 | call s:addMenu(menucmd, 'SetFileEncoding(&G)' , 'rG', ':call SetFileEncoding()') 133 | call s:addMenu(menucmd, 'CurrentDirMode(&D)' , 'rD', ':call ToggleGrepCurrentDirMode()') 134 | call s:addMenu(menucmd, 'RecursiveMode(&M)' , 'rM', ':call ToggleGrepRecursiveMode()') 135 | " exe printf(sepcmd, 4) 136 | " call s:addMenu(menucmd, 'Load\ Quickfix(&L)' , 'k', ':MyGrepReadResult\|:call QFixCopen()') 137 | " call s:addMenu(menucmd, 'Save\ Quickfix[Local]\ (&A)' , 'w', ':MyGrepWriteResult') 138 | exe printf(sepcmd, 5) 139 | call s:addMenu(menucmd, 'Help(&H)' , 'H', ':help '.g:QFixGrep_Help.'') 140 | endfunction 141 | endif 142 | 143 | function! s:addMenu(menu, acc, key, cmd) 144 | exe printf(a:menu, a:acc, a:key, a:cmd) 145 | endfunction 146 | 147 | if g:MyGrep_MenuBar 148 | let s:menu = '&Tools.QFixGrep(&G)' 149 | if MyGrep_MenuBar == 2 150 | let s:menu = 'Grep(&G)' 151 | elseif MyGrep_MenuBar == 3 152 | let s:menu = 'QFixApp(&Q).QFixGrep(&G)' 153 | endif 154 | let s:MyGrep_Key = g:MyGrep_Key . g:MyGrep_KeyB 155 | let s:MyGrep_Key = exists('g:qfixmemo_mapleader') ? g:qfixmemo_mapleader : s:MyGrep_Key 156 | let s:MyGrep_Key = escape(s:MyGrep_Key, '\\') 157 | call QFixGrepMenubar(s:menu, s:MyGrep_Key) 158 | endif 159 | 160 | if g:MyGrep_Keymap 161 | let s:MyGrep_Key = g:MyGrep_Key . g:MyGrep_KeyB 162 | let s:MyGrep_Key = exists('g:qfixmemo_mapleader') ? g:qfixmemo_mapleader : s:MyGrep_Key 163 | exe 'silent! nnoremap '.s:MyGrep_Key.'b :call BGrep("", 0, 0)' 164 | exe 'silent! vnoremap '.s:MyGrep_Key.'b :call BGrep("", -1, 0)' 165 | exe 'silent! nnoremap '.s:MyGrep_Key.'e :call QFGrep("Grep")' 166 | exe 'silent! vnoremap '.s:MyGrep_Key.'e :call QFGrep("GrepV")' 167 | exe 'silent! nnoremap '.s:MyGrep_Key.'g :call QFGrep("Grep")' 168 | exe 'silent! vnoremap '.s:MyGrep_Key.'g :call QFGrep("GrepV")' 169 | exe 'silent! nnoremap '.s:MyGrep_Key.'f :call QFGrep("FGrep")' 170 | exe 'silent! vnoremap '.s:MyGrep_Key.'f :call QFGrep("FGrepV")' 171 | exe 'silent! nnoremap '.s:MyGrep_Key.'re :call QFGrep("RGrep")' 172 | exe 'silent! vnoremap '.s:MyGrep_Key.'re :call QFGrep("RGrepV")' 173 | exe 'silent! nnoremap '.s:MyGrep_Key.'rg :call QFGrep("RGrep")' 174 | exe 'silent! vnoremap '.s:MyGrep_Key.'rg :call QFGrep("RGrepV")' 175 | exe 'silent! nnoremap '.s:MyGrep_Key.'rf :call QFGrep("RFGrep")' 176 | exe 'silent! vnoremap '.s:MyGrep_Key.'rf :call QFGrep("RFGrepV")' 177 | exe 'silent! nnoremap '.s:MyGrep_Key.'v :call QFGrep("Vimgrep")' 178 | exe 'silent! vnoremap '.s:MyGrep_Key.'v :call QFGrep("VimgrepV")' 179 | 180 | exe 'silent! nnoremap '.s:MyGrep_Key.'rD :call ToggleGrepCurrentDirMode()' 181 | exe 'silent! nnoremap '.s:MyGrep_Key.'rM :call ToggleGrepRecursiveMode()' 182 | exe 'silent! nnoremap '.s:MyGrep_Key.'rm :call qfixlist#ToggleMultiEncodingGrep()' 183 | exe 'silent! nnoremap '.s:MyGrep_Key.'rG :call SetFileEncoding()' 184 | 185 | exe 'silent! nnoremap '.s:MyGrep_Key.'B :call BGrep("", 0, 0)' 186 | exe 'silent! vnoremap '.s:MyGrep_Key.'B :call BGrep("", -1, 0)' 187 | exe 'silent! nnoremap '.s:MyGrep_Key.'E :call QFGrep("Grepadd")' 188 | exe 'silent! vnoremap '.s:MyGrep_Key.'E :call QFGrep("GrepaddV")' 189 | exe 'silent! nnoremap '.s:MyGrep_Key.'F :call QFGrep("FGrepadd")' 190 | exe 'silent! vnoremap '.s:MyGrep_Key.'F :call QFGrep("FGrepaddV")' 191 | exe 'silent! nnoremap '.s:MyGrep_Key.'rE :call QFGrep("RGrepadd")' 192 | exe 'silent! vnoremap '.s:MyGrep_Key.'rE :call QFGrep("RGrepaddV")' 193 | exe 'silent! nnoremap '.s:MyGrep_Key.'rF :call QFGrep("RFGrepadd")' 194 | exe 'silent! vnoremap '.s:MyGrep_Key.'rF :call QFGrep("RFGrepaddV")' 195 | exe 'silent! nnoremap '.s:MyGrep_Key.'V :call QFGrep("Vimgrepadd")' 196 | exe 'silent! vnoremap '.s:MyGrep_Key.'V :call QFGrep("VimgrepaddV")' 197 | 198 | exe 'silent! nnoremap '.s:MyGrep_Key.'H :call help()' 199 | let s:MyGrep_Key = g:MyGrep_Key . g:MyGrep_KeyB 200 | endif 201 | 202 | """""""""""""""""""""""""""""" 203 | " トグルコマンド 204 | """""""""""""""""""""""""""""" 205 | " command! -bang ToggleMultiEncodingGrep call qfixlist#ToggleMultiEncodingGrep() 206 | " command! -bang ToggleGrepCurrentDirMode call ToggleGrepCurrentDirMode() 207 | " command! -bang ToggleGrepRecursiveMode call ToggleGrepRecursiveMode() 208 | " command! -bang ToggleDamemoji call qfixlist#ToggleDamemoji() 209 | 210 | function! s:ToggleGrepCurrentDirMode() 211 | let g:MyGrep_CurrentDirMode = !g:MyGrep_CurrentDirMode 212 | echo 'QFixList : CurrentDirMode = '.(g:MyGrep_CurrentDirMode ? 'ON' : 'OFF') 213 | endfunction 214 | 215 | function! s:ToggleGrepRecursiveMode() 216 | let g:MyGrep_RecursiveMode = !g:MyGrep_RecursiveMode 217 | echo 'QFixList : RecursiveMode = '.(g:MyGrep_RecursiveMode ? 'ON' : 'OFF') 218 | endfunction 219 | 220 | """""""""""""""""""""""""""""" 221 | " キーマップ/メニュー用 222 | """""""""""""""""""""""""""""" 223 | let s:prevResult = [] 224 | function! s:QFixGrep(cmd, pattern, path, filepattern, fenc, ...) 225 | let prevPath = s:escape(getcwd(), ' ') 226 | let cwd = getcwd() 227 | let pattern = a:pattern 228 | if a:cmd =~ '\CV$' 229 | exe 'normal! vgvy' 230 | let pattern = @0 231 | endif 232 | let cmd = substitute(a:cmd, '\CV$', '', '') 233 | if pattern == '' && g:MyGrep_DefaultSearchWord 234 | let pattern = expand("") 235 | endif 236 | let pattern = input(cmd." : ", pattern) 237 | if pattern == '' 238 | return 239 | endif 240 | 241 | silent! exe 'chdir ' . prevPath 242 | " FIXME : autochdirが有効の場合:pwdとgetcwd()が一致しないことがある 243 | if exists('+autochdir') && &autochdir 244 | let path = expand('%:p:h') 245 | let cwd = path 246 | let prevPath = s:escape(path, ' ') 247 | endif 248 | let path = a:path 249 | if path == '' 250 | let path = g:MyGrep_CurrentDirMode ? cwd : expand('%:p:h') 251 | endif 252 | 253 | let filepattern = a:filepattern != '' ? a:filepattern : '*' 254 | if g:MyGrep_FilePattern != '' 255 | let filepattern = g:MyGrep_FilePattern 256 | endif 257 | let filepattern = input("filepattern (rcsv: **/*) : ", filepattern) 258 | if filepattern == '' 259 | return 260 | endif 261 | call histdel("input", '^\*$') 262 | 263 | let fenc = a:fenc 264 | if fenc == '' 265 | let fenc = &fenc != '' ? &fenc : &enc 266 | let fenc = s:MyGrep_Fenc != '' ? s:MyGrep_Fenc : fenc 267 | endif 268 | 269 | let addflag = s:setenv(cmd) 270 | if !addflag 271 | let s:prevResult = [] 272 | endif 273 | let qflist = qfixlist#sortgrep(pattern, path, g:MyGrep_Sort, filepattern, fenc) 274 | let s:prevResult = extend(s:prevResult, qflist) 275 | silent! exe 'chdir ' . prevPath 276 | if empty(qflist) 277 | redraw | echo 'QFixGrep : Not found!' 278 | echo pattern.' | '.fenc.' | '.filepattern.' | '. path 279 | else 280 | call qfixlist#copen(s:prevResult, path) 281 | endif 282 | let g:QFix_UseLocationList = s:useLocationList 283 | endfunction 284 | 285 | function! s:QFGrep(cmd) 286 | return s:QFixGrep(a:cmd, '', '', '', '', '') 287 | endfunction 288 | 289 | let s:MyGrep_Fenc = '' 290 | function! s:SetFileEncoding() 291 | let mes = 'QFixGrep : grep fileencoding = ' 292 | let s:MyGrep_Fenc = input(mes, s:MyGrep_Fenc) 293 | endfunction 294 | 295 | """""""""""""""""""""""""""""" 296 | " コマンドラインgrep本体 297 | """""""""""""""""""""""""""""" 298 | function! qfixgrep#BGrep(word, mode, addflag) 299 | call s:BGrep(a:word, a:mode, a:addflag) 300 | endfunction 301 | 302 | function! qfixgrep#QFixCmdGrep(cmd, arg) 303 | let opt = matchstr(a:arg, '^\(\s*[-/][^ ]\+\)\+') 304 | let fenc = matchstr(opt, '--fenc=[^\s]\+') 305 | let fenc = substitute(fenc, '--fenc=', '', '') 306 | if fenc == '' 307 | let fenc = &fenc != '' ? &fenc : &enc 308 | let fenc = s:MyGrep_Fenc != '' ? s:MyGrep_Fenc : fenc 309 | endif 310 | let opt = substitute(opt,'--fenc=[^\s]\+', '', '') 311 | let g:MyGrep_cmdopt = opt 312 | 313 | let pattern = substitute(a:arg, '^\(\s*[-/][^ ]\+\)\+', '', '') 314 | let pattern = matchstr(pattern, '^.*[^\\]\s') 315 | let pattern = substitute(pattern, '\s*$\|^\s*', '', 'g') 316 | if pattern =~ '^".*"$' 317 | let pattern = substitute(pattern, '^"\|"$', '', 'g') 318 | endif 319 | " \で " をエスケープ? 320 | if pattern =~ '^\\".*\\"$' 321 | let pattern = substitute(pattern, '^\\"\|\\"$', '"', 'g') 322 | endif 323 | let str = substitute(a:arg, '^.*[^\\]\s', '', '') 324 | let str = substitute(str, '\\ ', ' ', 'g') 325 | let path = fnamemodify(str, ':p:h') 326 | if path == '' 327 | let path = g:MyGrep_CurrentDirMode ? getcwd() : expand('%:p:h') 328 | endif 329 | let filepattern = fnamemodify(str, ':t') 330 | 331 | let addflag = s:setenv(a:cmd) 332 | if !addflag 333 | let s:prevResult = [] 334 | endif 335 | let qflist = qfixlist#sortgrep(pattern, path, g:MyGrep_Sort, filepattern, fenc) 336 | let s:prevResult = extend(s:prevResult, qflist) 337 | if empty(qflist) 338 | redraw | echo 'QFixGrep : Not found!' 339 | echo pattern.' | '.fenc.' | '.filepattern.' | '. path 340 | else 341 | call qfixlist#copen(s:prevResult, path) 342 | endif 343 | let g:QFix_UseLocationList = s:useLocationList 344 | endfunction 345 | 346 | let s:useLocationList=0 347 | function! s:setenv(cmd) 348 | let cmd = a:cmd 349 | let g:MyGrep_Regexp = 1 350 | let g:MyGrep_Recursive = g:MyGrep_RecursiveMode 351 | " let g:MyGrep_Ignorecase = 1 352 | let g:MyGrep_UseVimgrep = 0 353 | if cmd =~ '\c^r' 354 | let g:MyGrep_Recursive = 1 355 | endif 356 | if cmd =~ '\cfgrep' 357 | let g:MyGrep_Regexp = 0 358 | endif 359 | if cmd =~ '\cvimgrep' 360 | let g:MyGrep_UseVimgrep = 1 361 | endif 362 | let s:useLocationList = g:QFix_UseLocationList 363 | if exists('g:MyGrep_UselocationList') 364 | let g:QFix_UseLocationList = g:MyGrep_UselocationList 365 | endif 366 | return cmd =~ '\cadd' 367 | endfunction 368 | 369 | """""""""""""""""""""""""""""" 370 | " バッファのみgrep 371 | " 無名バッファは検索できない。 372 | """""""""""""""""""""""""""""" 373 | function! s:BGrep(word, mode, addflag) 374 | let pattern = a:word 375 | let mes = "Buffers grep : " 376 | if a:addflag 377 | let mes = "Buffers grepadd : " 378 | endif 379 | if pattern == '' || a:mode == -1 380 | let pattern = expand("") 381 | if g:MyGrep_DefaultSearchWord == 0 382 | let pattern = '' 383 | endif 384 | if a:mode < 0 385 | let pattern = @0 386 | endif 387 | let pattern = input(mes, pattern) 388 | endif 389 | if pattern == '' | return | endif 390 | if a:addflag && g:QFix_SearchPath != '' 391 | let disppath = g:QFix_SearchPath 392 | else 393 | let disppath = expand('%:p:h') 394 | endif 395 | let g:QFix_SearchPath = disppath 396 | let @/ = pattern 397 | call histadd('/', '\V' . @/) 398 | call histadd('@', pattern) 399 | let bufnr = bufnr('%') 400 | let save_cursor = getpos('.') 401 | if a:addflag == 0 402 | let ccmd = g:QFix_UseLocationList ? 'lexpr ""' : 'cexpr ""' 403 | silent! exe ccmd 404 | endif 405 | call QFixPclose() 406 | let vopt = g:QFix_UseLocationList ? 'l' : '' 407 | silent! exe ':bufdo | try | '.vopt.'vimgrepadd /' . pattern . '/j % | catch | endtry' 408 | silent! exe 'b'.bufnr 409 | if a:addflag 410 | let g:QFix_SearchPath = disppath 411 | endif 412 | let g:QFix_SearchResult = [] 413 | let save_qflist = QFixGetqflist() 414 | if empty(save_qflist) 415 | redraw | echo 'QFixGrep : Not found!' 416 | else 417 | call QFixCopen() 418 | call cursor(1, 1) 419 | redraw | echo '' 420 | endif 421 | endfunction 422 | 423 | " ロケーションリスト使用 424 | if !exists('g:QFix_UseLocationList') 425 | let g:QFix_UseLocationList = 1 426 | endif 427 | 428 | function s:help() 429 | let file = exists('g:qfixmemo_help') ? g:qfixmemo_help : g:QFixGrep_Help 430 | exe 'help '.file 431 | endfunction 432 | 433 | function! s:escape(str, chars) 434 | return escape(a:str, a:chars.((has('win32')|| has('win64')) ? '#%&' : '#%$')) 435 | endfunction 436 | 437 | -------------------------------------------------------------------------------- /doc/qfixgrep.jax: -------------------------------------------------------------------------------- 1 | *qfixgrep.jax* For Vim バージョン 7.2 Last change: 2013 August 1 2 | ============================================================================== 3 | Description: QFixGrep 4 | Author: fuenor 5 | Web(Japanese): 6 | http://sites.google.com/site/fudist/grep 7 | ============================================================================== 8 | CONTENTS *qfixgrep* *qfixgrep_help* *qfixgrep_contents* 9 | 1. Intro |qfixgrep_intro| 10 | 2. インストール |qfixgrep_install| 11 | 2.1 Windowsの場合 |qfixgrep_install_windows| 12 | 2.2 異なるエンコーディングが混在する場合 |qfixgrep_multiencoding| 13 | 2.2.1 マルチエンコーディングgrepモード |qfixgrep_multigrep| 14 | 2.2.2 agrep.vim |qfixgrep_agrep| 15 | 3. コマンド |qfixgrep_command| 16 | 4. コマンドライン |qfixgrep_commandline| 17 | 5. QuickFix |qfixgrep_quickfix| 18 | 6. QuickFix/ロケーションリスト |qfixgrep_window| 19 | 7. オプション |qfixgrep_option| 20 | 8. Appendix |qfixgrep_appendix| 21 | 22 | ============================================================================== 23 | 1. Intro *qfixgrep_intro* 24 | 25 | QFixGrepはVim用のプレビュー&絞り込み検索(and検索)付きのgrepプラグインです。 26 | 27 | 固定文字列検索、再帰grep、現在開いているバッファのみ対象のGrepや、QuickFixウィ 28 | ンドウ上で絞り込み検索してからのジャンプも可能になります。 29 | 内部grep(vimgrep)はもちろん、外部grepを使用の際にもutf-8, euc-jp, cp932の日本 30 | 語(全角文字) grep/検索が可能です。 31 | 32 | 外部grepでうまく日本語が扱えない場合、特にutf-8化したWindowsの外部grepを使用し 33 | たい場合に有用です。 34 | また、cp932(Shift_JIS)における ー ソ 表 などの「ダメ文字」にも対処がなされてい 35 | ます。 36 | 37 | ============================================================================== 38 | 2. インストール *qfixgrep_install* 39 | 40 | QFixGrepにruntimepathを通します。 41 | 42 | 最低限必要なのはダウンロードしたファイルを解凍して作成されたディレクトリにラン 43 | タイムパスを通すことだけです 44 | QFixHowm/QFixMemoを使用しているならインストールは不要です。 45 | 46 | 以降はディレクトリをqfixgrepとリネームしたとして解説を行いますので適宜読み替え 47 | てください。 48 | .vimrc > 49 | set runtimepath+=c:/temp/qfixgrep 50 | 51 | この状態で現在使用しているgrepをそのまま実行してQuickfixウィンドウを開くだけで 52 | もプレビューや絞込みは有効になります。 53 | 54 | android/iOSで使用する場合 > 55 | " 検索にagrep.vimを使用する 56 | let mygrepprg='agrep.vim' 57 | < 58 | 基本設定はUnixと同じですがandroid/iOSで外部grepが使用できない場合は上記設定 59 | を追加してください。 60 | busyboxのgrepは日本語が扱えません。 61 | 速度的に不満な場合はGNU grepを使用してください。 62 | https://sites.google.com/site/fudist/Home/qfixhowm/other-service/howm-android 63 | 64 | Windowsは2.1以降(|qfixgrep_install_windows|)へ進んでください。 65 | なおWindowsの場合はできるだけ外部grepを使用することを推奨します。 66 | 67 | その他のOSはコマンド解説(|qfixgrep_command|)へ進みますが、出来れば異なるエン 68 | コーディングが存在する場合(|qfixgrep_multiencoding|)に目を通しておいて下さい。 69 | 70 | ------------------------------------------------------------------------------ 71 | QuickFixウィンドウのプレビューや絞り込み 72 | 73 | QFixGrepは「ロケーションリスト」を使用するので、デフォルトでは「QuickFixウィン 74 | ドウ」を開いてもプレビューや絞り込み等は行いません。 75 | QuickFixウィンドウでもプレビューや絞り込みを有効にしたい場合は以下を設定してく 76 | ださい。 77 | > 78 | " プレビューや絞り込みをQuickFix/ロケーションリストの両方で有効化(デフォルト:2) 79 | let QFixWin_EnableMode = 1 80 | 81 | " QFixHowm/QFixGrepでロケーションリストを使用する/しない 82 | let QFix_UseLocationList = 1 83 | 84 | 上記の設定を有効にすると、QuickFixウィンドウを使用するmakeや他のプラグイン等で 85 | もプレビューや絞込等が有効になります。 86 | 最初はとりあえず有効にしておいて、他のプラグイン等との併用でなにか問題が起きた 87 | ら無効化するのをおすすめします。 88 | 89 | なお挙動面でQuicFixとロケーションリストでは異なる場合があります。 90 | QFixGrepでQuickFixを使用したい場合は以下を設定します。 91 | > 92 | " プレビューや絞り込みをQuickFix/ロケーションリストの両方で有効化(デフォルト:2) 93 | let QFixWin_EnableMode = 1 94 | 95 | " QFixGrepでロケーションリストを使用する/しない 96 | let MyGrep_UseLocationList = 0 97 | 98 | ------------------------------------------------------------------------------ 99 | 2.1 Windowsの場合 *qfixgrep_install_windows* 100 | 101 | Windowsの標準環境ではgrepが存在しないので代替として findstr (Windows2000以降) 102 | が使用されます。 103 | cp932(Shift_JIS)しか使用しないなら問題ありませんが、UTF-8ファイルの日本語文字列 104 | も検索したい場合はGNU grep互換の外部grepか、grepスクリプトagrep.vimを使用する 105 | 必要があります。 106 | (cygwin上のVimであるかUTF-8のファイルを扱わない場合、本項は関係ありません) 107 | 108 | * とにかく使って見る場合 109 | 何も設定しないか、次の設定を追加します。 110 | > 111 | " 検索にfindstrを使用する(デフォルト) 112 | let mygrepprg = 'findstr' 113 | 114 | 前述しましたが、この場合cp932(Shift_JIS)以外の日本語文字列は検索出来ません。 115 | findstrの正規表現は貧弱ですし、そういう意味でもできるだけ外部grepを使用するこ 116 | とをおすすめします。 117 | 外部grepの使用が難しい時は、日本語を含む場合のみ標準同梱されているUTF-8文字列を 118 | 検索可能なスクリプトagrep.vimを使用することもできます。 119 | > 120 | " 日本語を含む場合のみagrep.vimを使用する 121 | let mygrepprg = 'findstr' 122 | let myjpgrepprg = 'agrep.vim' 123 | 124 | この設定では検索文字列に日本語を含む場合だけagrep.vimを使用することになります。 125 | agrep.vimの正規表現はVimの正規表現を使用するため、検索文字列に日本語を含む場合 126 | とそうでない場合で使える正規表現が異なることになります。 127 | 日本語と正規表現を組み合わせて検索する場合は気をつけてください。 128 | 129 | * GNU grep互換の外部grepを使用する場合 130 | 131 | 一応GNU grep互換のgrepであれば動作するはずですが、おすすめなのはcygwinをインス 132 | トールしてcygwinのbinへパスを通すことです。 133 | 134 | パスの通った場所にgrep.exeがある場合は、次のように指定します。 135 | > 136 | let mygrepprg = 'grep' 137 | 138 | pathを通していないなら、pathは環境に合わせてフルpathで指定して下さい。 139 | > 140 | let mygrepprg = 'c:/cygwin/bin/grep' 141 | 142 | cygwin1.7以降のgrep.exeを使用する場合はMyGrep_cygwin17も設定してください。 143 | 設定しない場合は一部のUTF-8文字列が検索できないことがあります。 144 | > 145 | let mygrepprg = 'grep' 146 | let MyGrep_cygwin17 = 1 147 | 148 | ------------------------------------------------------------------------------ 149 | 2.2 異なるエンコーディングのファイルが混在している場合 *qfixgrep_multiencoding* 150 | 151 | UTF-8とcp932、euc-jpなど異なるエンコーディングが混在している場合はマルチエン 152 | コーディングgrepモードかagrep.vimを使用するとエンコーディングを気にせずgrep 153 | 可能です。 154 | 155 | 2.2.1 マルチエンコーディングgrepモード 156 | 157 | 異なるエンコーディングのファイルが混在している場合にgrepを複数回実行して、エン 158 | コーディングを気にせず日本語検索が可能です。 159 | マルチエンコーディングgrepモードの切替はrmでも行えます。 160 | なお検索文字列に日本語を含まない場合は、一回しかgrepは実行されません。 161 | > 162 | " マルチエンコーディングgrepモード 163 | let g:MyGrep_MultiEncoding = 1 164 | 165 | マルチエンコーディングgrepで使用するエンコーディングは次のように指定します。 166 | > 167 | " マルチエンコーディングgrep エンコーディングリスト 168 | let g:MyGrep_MultiEncodingList = ['utf-8', 'cp932'] 169 | 170 | findstrではcp932のみしか検索できないので次に解説するagrep.vimを使用してくださ 171 | い。 172 | 173 | 2.2.2 agrep.vim *qfixgrep_agrep* 174 | 175 | agrep.vimはVimスクリプトで実装されたgrepでマルチエンコーディングのgrepが可能で 176 | す。 177 | agrep.vimは通常のgrepやfindstrより遅いので、検索文字列に日本語を含む場合だけ 178 | agrep.vimを使用するというのが良いかもしれません。 179 | agrep.vimの正規表現はVimの正規表現を使用することになります。 180 | > 181 | " 日本語を含む場合のみagrep.vimを使用する設定 182 | 183 | " Windows 184 | let mygrepprg = 'findstr' 185 | let myjpgrepprg = 'agrep.vim' 186 | " 異なるエンコーディングが混在していてもgrep可能にする 187 | let MyGrep_MultiEncodingGrepScript = 1 188 | 189 | " unix 190 | let mygrepprg = 'grep' 191 | let myjpgrepprg = 'agrep.vim' 192 | " 異なるエンコーディングが混在していてもgrep可能にする 193 | let MyGrep_MultiEncodingGrepScript = 1 194 | 195 | この場合は日本語を含む場合とそうでない場合で使える正規表現が異なることになるの 196 | で気をつける必要があります。 197 | 198 | 常にagrep.vimを使用したい場合は mygrepprgでもagrep.vimを使用するように設定しま 199 | す。 200 | > 201 | let mygrepprg = 'agrep.vim' 202 | 203 | ============================================================================== 204 | 3. コマンド *qfixgrep_command* 205 | 206 | https://sites.google.com/site/fudist/Home/grep/usage 207 | 適当なファイルを開いてキーマップコマンドで検索を行うことができます。 208 | 209 | e 通常のgrep 210 | re 再帰検索のgrep 211 | f 正規表現を使わない検索 212 | rf 正規表現を使わない再帰検索 213 | b 現在開いている全てのバッファのみを対象にgrep 214 | (無名バッファは検索できない) 215 | 216 | デフォルトキーマップリーダーは g, なのでf は g,f と読み替えてください。 217 | キーマップリーダーは以下の順で決定されます。 218 | 1. qfixmemo_mapleader 219 | 2. QFixHowm_Key 220 | 3. MyGrep_Key 221 | 222 | 検索するファイルの種類を指定する際は、*.vim *.txt のように 複数の種類を指定可 223 | 能です。grep後、自動的にQuickfixウィンドウが開き、検索レジスタにはgrepした文字 224 | 列が登録されます。 225 | 226 | 再帰検索はコマンドで切り替えずに、検索ファイル指定で **/*.vimのように**/を指定 227 | して再帰検索grepを行うことも可能です。 228 | 229 | NOTE: 230 | デフォルトではカーソル位置の単語を拾ってセットします。検索語はで削 231 | 除可能ですがデフォルトで拾う/拾わないは以下の設定で変更可能です。 232 | > 233 | " QFixGrepの検索時にカーソル位置の単語を拾う/拾わない 234 | let MyGrep_DefaultSearchWord = 1 235 | 236 | ------------------------------------------------------------------------------ 237 | 検索の基点ディレクトリとファイルエンコーディングは以下のコマンドで変更可能で 238 | す。 239 | 240 | rm grepを複数回実行してマルチエンコーディングgrep 241 | rG 検索するファイルエンコーディング指定 242 | rD 検索ディレクトリ基点をカレントディレクトリ/ファイル基点でトグル 243 | rM ディレクトリを常にサブディレクトリも検索する 244 | 245 | ディレクトリ内に異なるエンコーディングのファイルが混在している場合はrm 246 | でマルチエンコーディングgrepモード(|qfixgrep_multigrep|)に切り替えることができ 247 | ます。 248 | 249 | 検索ディレクトリの基点は「カレントディレクトリ」がデフォルトですが、rD 250 | でオフにすると「ファイルの存在するディレクトリ」を基点にして検索します。 251 | autochdirやプラグイン等でカレントディレクトリを常にファイルの存在するディレク 252 | トリになるよう設定している場合はどちらでも基点はかわりません。 253 | 254 | ------------------------------------------------------------------------------ 255 | コマンドを大文字にすると前回の結果を削除せず検索結果を追加します。 256 | E 通常のgrep 257 | rE 再帰検索のgrep 258 | F 正規表現を使わない検索 259 | rF 正規表現を使わない再帰検索 260 | B 現在開いている全てのバッファのみを対象にgrep 261 | (無名バッファは検索できない) 262 | 263 | ============================================================================== 264 | 4. コマンドライン *qfixgrep_commandline* 265 | 266 | コマンドラインからはディレクトリやファイルエンコーディングを指定してgrep出来ま 267 | す。コマンドモードで使用できるファイル指定(*.txt等)は一つだけです。 268 | パス指定には ./などの相対パスも使用可能です。 269 | 270 | コマンドラインコマンドを有効にするには.vimrcへ以下を追加してください。 271 | > 272 | let MyGrep_Commands = 1 273 | 274 | また、一部のコマンドのみ有効にしたい場合は、以下のように任意のコマンドのみを追 275 | 加可能です。 276 | > 277 | command! -nargs=* -bang Vimgrep call qfixgrep#QFixCmdGrep('Vimgrep', ) 278 | 279 | 各コマンドの個別の定義については/plugin/mygrep.vimを参照してください。 280 | > 281 | :Grep 検索文字 c:/temp/*.txt 282 | 283 | 対象ファイルのエンコーディング指定には --fenc= を使用します。 284 | > 285 | :Grep --fenc=utf-8 エンコーディング指定して検索 ./temp/*.txt 286 | 287 | 空白を含む検索文字列は " " でくくって指定して、空白を含むパスは \ でエスケープ 288 | して指定します。 289 | 検索に " " でくくった文字列自体を指定したい場合は " " を二重にするか、 \" でく 290 | くって下さい。 291 | > 292 | :Grep "空白を含む 検索文字とパス" ~/My\ Documents/txt/*.txt 293 | 294 | 各種オプションも指定可能です。 295 | 指定可能なオプションは mygrepprgに設定しているgrepのヘルプを参照してください。 296 | 再帰検索は大抵 -r (findstrは /s)です。 297 | > 298 | :Grep -r 再帰検索 ./temp/*.txt 299 | 300 | 再帰検索には RGrep、RFGrepも使えます。 301 | > 302 | :RGrep 再帰検索 *.txt 303 | 304 | 固定文字列検索には -F のようにオプションを指定するか FGrepを使用してください。 305 | > 306 | :FGrep 固定文字列検索 ./temp/*.txt 307 | 308 | Grepadd、 FGrepadd、RGrepadd、RFGrepadd を使用すると前回の結果を削除することな 309 | く検索結果が追加されます。 310 | > 311 | :Grepadd 追加検索 ./temp/*.txt 312 | 313 | 結果表示は標準のgrepと違って、QuickFixウィンドウではなく、ロケーションリストで 314 | 行われるため、ウィンドウの再表示はQFixCopenで行ってください。 315 | > 316 | :QFixCopen ウィンドウ表示 317 | 318 | Vim標準のコマンドとしては:lopenが使えますが、:QFixCopenか, .のキーマ 319 | ップを使用することを推奨します。 320 | 321 | QFixGrepでもQuickFixウィンドウを使用したい場合は以下を設定してください。 322 | > 323 | " QuickFixウィンドウを使用する 324 | let QFix_UseLocationList = 0 325 | 326 | この場合は:copenでウィンドウを開くことになります。 327 | 328 | ============================================================================== 329 | 5. QuickFix *qfixgrep_quickfix* 330 | 331 | Quickfixウィンドウコマンド 332 | 333 | , Quickfixウィンドウのオープン/クローズ 334 | . Quickfixウィンドウへ移動 335 | 多数のウィンドウを開いていても、一度でQuickfixウィンドウに移動 336 | 出来ます。 337 | 5. のようにカウント指定すると指定サイズの高さに変更。 338 | Quickfixウィンドウ上ではウィンドウ高さをデフォルトに戻します。 339 | / 以降使用するウィンドウをQuickFix/ロケーションリストでトグル 340 | 341 | Quickfixウィンドウ上での操作 342 | q Quickfixウィンドウのクローズ 343 | ファイルを開く。 344 | 3のように番号を指定すると対応する行のファイルを開く。 345 | ビジュアルモードで選択している場合は選択ファイルをすべて開く。 346 | 画面分割でファイルを開く 347 | QuickFixウィンドウに表示されているパスを最も短く表示されるよう 348 | にする 349 | & QuickFixウィンドウをロケーションリストへコピー 350 | QuickFixウィンドウをQFixListへコピー 351 | 352 | ------------------------------------------------------------------------------ 353 | 機能切替 354 | 355 | i プレビュー表示ON/OFF 356 | I ファイルタイプのハイライト表示ON/OFF。 357 | 環境やファイルサイズによっては重くなるので、その場合はOFFにして 358 | ください。 359 | J ジャンプ後にQuickfixウィンドウを閉じる/閉じないをトグル 360 | 「ハイスピードプレビュー」 ON/OFF 361 | プレビュー表示方法をノーマルモードとハイスピードモードでトグル 362 | する。 363 | 364 | ------------------------------------------------------------------------------ 365 | ソートと絞り込み検索 366 | 367 | S 更新時間順、名前順などの「ソート」切替。 368 | s 「絞り込み検索」 369 | 文字列を指定して絞り込み。 370 | Quickfixに表示されている部分(各行1kバイト)のみが対象 371 | r 「絞り込み検索」 372 | s コマンドとは逆に、指定した文字列を ”含まない” 行に絞り込み 373 | ます。 374 | u ソートや絞り込みのアンドゥ 375 | U ソートや絞り込みを全て元に戻す 376 | 377 | ・絞り込み対象はQuickfixに表示されている部分(各行1kバイト)のみが対象です。 378 | ・/ で検索文字列が貼り付け可能で、入力画面では 、ヒストリも 379 | 有効です。 380 | 381 | ソートの種類 382 | m ファイルの更新時間 (mtime) 383 | n ファイル名 (name) 384 | t 表示されているテキスト内容 (text) 385 | 386 | ・逆順にしたい場合は rt のように、最初に r を付けて下さい。 387 | 388 | ------------------------------------------------------------------------------ 389 | Quickfixウィンドウの保存と読込 (Quickfix上のコマンド) 390 | 391 | A 392 | w 現在のQuickfixウィンドウを保存する。 393 | 3Aのようにカウント指定すると、ファイル名に指定カウントを付加し 394 | て保存する。 395 | ~/.qfgrep.txt → ~/.qfgrep3.txt 396 | O 397 | k 保存されているQuickfixウィンドウを読み込む。 398 | 3Oのようにカウント指定すると、ファイル名に指定カウントを付加し 399 | て読み込む。 400 | ~/.qfgrep.txt → ~/.qfgrep3.txt 401 | 402 | 何かgrepしてからQuickfixウィンドウ上で A を押すと現在のgrep結果が保存されます。 403 | 一時的に保存したいだけなら & コマンドでロケーションリストにコピーしたほうが良 404 | いでしょう。 405 | 406 | ============================================================================== 407 | 6. QuickFix/ロケーションリスト *qfixgrep_window* 408 | 409 | プレビューや絞り込みの拡張機能の制御は以下の2つのオプションで変更可能です。 410 | 411 | プレビューや絞り込みの拡張機能有効化オプション 412 | (QFixWin_EnableMode) 413 | | 0 | なにもしない | 414 | | 1 | QuickFix/ロケーションリストの両方で有効 | 415 | | 2 | ロケーションリストのみ有効 | 416 | | 3 | QFixMemo/QFixGrepコマンドのみ有効 | 417 | 418 | QFixHowm/QFixGrepで指定するウィンドウ指定 419 | (QFix_UseLocationList) 420 | | 0 | QFixHowm/QFixGrepでQuickFixウィンドウを使用する | 421 | | | (コマンドモードからのウィンドウ再表示は :copen) | 422 | | 1 | QFixHowm/QFixGrepでロケーションリストを使用する | 423 | | | (コマンドモードからのウィンドウ再表示は :lopen) | 424 | 425 | ------------------------------------------------------------------------------ 426 | 6.1 デフォルト 427 | 428 | デフォルトではmakeや他のプラグインから「QuickFixウィンドウ」を開いてもプレ 429 | ビューや絞り込み等は行いません。 430 | これは一部のQuickFixウィンドウを使用するプラグイン等との相性問題を回避するため 431 | です。 432 | ただ殆どの場合はQuickFixウィンドウでのプレビューや絞り込みが有効にしておいたほ 433 | うがなにかと便利なので、次の設定を試してみてください。 434 | > 435 | " プレビューや絞り込みの拡張機能有効化オプション 436 | " 1 : QuickFix/ロケーションリストの両方で有効 437 | let QFixWin_EnableMode = 1 438 | 439 | 最初はとりあえず有効にしておいて、何か問題があったらデフォルトに戻すことをおす 440 | すめします。 441 | 442 | ------------------------------------------------------------------------------ 443 | 6.2 ロケーションリスト 444 | 445 | QuickFixウィンドウとロケーションリストはどちらも機能的には同じものですが Vimと 446 | 対応しているのが QuickFixウィンドウで、ウィンドウと対応しているのがロケーショ 447 | ンリストです。 448 | このためロケーションリストは対応したウィンドウと同時に破棄される一時的なウィン 449 | ドウ(バッファ)といえます。 450 | 詳しくは|quickfix|や|location-list| を参照してください。 451 | 452 | ただQuickFixウィンドウとロケーションリストは若干挙動が異なるようで、動作として 453 | はQuickFixウィンドウを使用するほうが好ましい動作をするようです。 454 | QFixHowm/QFixGrepでもQuickFixウィンドウを使用するには以下のようにします。 455 | > 456 | " プレビューや絞り込みの拡張機能有効化オプション 457 | " 1 : QuickFix/ロケーションリストの両方で有効 458 | let QFixWin_EnableMode = 1 459 | 460 | " QFixHowm/QFixGrepでロケーションリストを使用する/しない 461 | let QFix_UseLocationList = 0 462 | 463 | この場合は何か問題があったら拡張機能をQFixHowm/QFixGrep以外では無効化するとよ 464 | いでしょう。 465 | > 466 | " プレビューや絞り込みの拡張機能有効化オプション 467 | " 3 : QFixHowm/QFixGrepのみ有効 468 | let QFixWin_EnableMode = 3 469 | 470 | ============================================================================== 471 | 7. オプション *qfixgrep_option* 472 | 473 | QuickFix処理制御 > 474 | 475 | " QuickFix処理制御 476 | " 0 : なにもしない 477 | " 1 : QuickFix/ロケーションリストの両方で有効 478 | " 2 : ロケーションリストのみ有効 479 | " 3 : QFixMemo/QFixGrepコマンドで開いた場合のみ有効 480 | let QFixWin_EnableMode = 2 481 | 482 | QuickFixウィンドウ > 483 | 484 | " QuickFixウィンドウでプレビューを有効にする 485 | let QFix_PreviewEnable = 1 486 | 487 | " QuickFixウィンドウの高さ 488 | let QFix_Height = 0 489 | " QuickFixウィンドウの幅 490 | let QFix_Width = 0 491 | " QuickFixウィンドウの開き方 492 | let QFix_CopenCmd = '' 493 | " QuickFixウィンドウでカーソルラインを表示 494 | let QFix_CursorLine = 1 495 | " カレントウィンドウの最低幅(Vim設定値) 496 | set winwidth=20 497 | " QuickFixウィンドウのプレビューでfiletype別のハイライトを有効にする 498 | let QFix_PreviewFtypeHighlight = 1 499 | 500 | " QuickFixウィンドウから開いた後ウィンドウを閉じる 501 | let QFix_CloseOnJump = 0 502 | " QuickFixウィンドウの は分割ではなくタブで開くには 'tab'に設定する 503 | let QFix_Edit = '' 504 | " QuickFixウィンドウではなくロケーションリストを使用する 505 | let QFix_UseLocationList = 1 506 | 507 | プレビューウィンドウ > 508 | 509 | " プレビュー対象外ファイルの指定 510 | let QFix_PreviewExclude = '\.pdf$\|\.mp3$\|\.jpg$\|\.bmp$\|\.png$\|\.zip$\|\.rar$\|\.exe$\|\.dll$\|\.lnk$' 511 | " プレビューウィンドウの高さ(Vim設定値) 512 | set previewheight=12 513 | " プレビューウィンドウの高さ(previewheightを使用したくない場合のみ指定) 514 | let QFix_PreviewHeight = 12 515 | " プレビューウィンドウの幅 516 | let QFix_PreviewWidth = 0 517 | " プレビューウィンドウの開き方指定 518 | let QFix_PreviewOpenCmd = '' 519 | " プレビュー画面のカーソルラインを表示 520 | let QFix_PreviewCursorLine = 1 521 | " プレビューウィンドウの折り返し表示 522 | let QFix_PreviewWrap = 1 523 | 524 | grepオプション > 525 | 526 | " Grepコマンドのキーマップ 527 | let MyGrep_Key = 'g' 528 | " Grepコマンドの2ストローク目キーマップ 529 | let MyGrep_KeyB = ',' 530 | 531 | " grep対象にしたくないファイル名の正規表現 532 | let MyGrep_ExcludeReg = '[~#]$\|\.dll$\|\.exe$\|\.lnk$\|\.o$\|\.obj$\|\.pdf$\|\.xls$' 533 | 534 | " 使用するgrep(Windows) 535 | let mygrepprg = 'findstr' 536 | " Windowsでcygwin1.7以降のgrep.exeを使用する場合のみ 1 に設定 537 | let MyGrep_cygwin17 = 1 538 | " 使用するgrep(Unix) 539 | let mygrepprg = 'grep' 540 | " 日本語が含まれる場合のgrep指定 541 | let myjpgrepprg = '' 542 | 543 | " 外部grep(shell)のエンコーディング(Windows) 544 | let MyGrep_ShellEncoding = 'cp932' 545 | " 外部grep(shell)のエンコーディング(Unix) 546 | let MyGrep_ShellEncoding = 'utf-8' 547 | " 外部grep(shell)でエンコーディング変換が行われる場合のエンコーディング指定 548 | " (通常はMyGrep_ShellEncodingと同一のため設定しないでください) 549 | let MyGrep_FileEncoding = '' 550 | 551 | " 検索ディレクトリはカレントディレクトリを基点にする 552 | " 0 : 現バッファのファイルが存在するディレクトリ 553 | " 1 : カレントディレクトリ 554 | let MyGrep_CurrentDirMode = 1 555 | " 検索は常に再帰検索 556 | let MyGrep_RecursiveMode = 0 557 | 558 | " 「だめ文字」対策を有効/無効 559 | let MyGrep_Damemoji = 2 560 | " 「だめ文字」を置き換える正規表現 561 | let MyGrep_DamemojiReplaceReg = '(..)' 562 | " 「だめ文字」を自分で追加指定したい場合は正規表現で指定する 563 | let MyGrep_DamemojiReplace = '[]' 564 | 565 | " ユーザ定義可能な追加オプション 566 | let MyGrepcmd_useropt = '' 567 | 568 | " QFixGrepの検索時にカーソル位置の単語を拾う/拾わない 569 | let MyGrep_DefaultSearchWord = 1 570 | 571 | " grep実行時にエラーメッセージが出たら表示 572 | let MyGrep_error = 0 573 | 574 | ============================================================================== 575 | 8. Appendix *qfixgrep_appendix* 576 | 577 | QFixGrepでは各機能を独立したプラグインとして実装しています。 578 | 各プラグインのヘルプについてはdocディレクトリかソースの頭にあります。 579 | なお、起動時に読み込まれるのはpluginディレクトリ内のソースだけで、autoload内の 580 | ファイルはコマンド実行時の必要になった時に初めて読み込まれます。 581 | 582 | myqfix.vim 583 | QuickFixウィンドウにプレビューや絞り込み、ソートを追加するプラグインで完全に独 584 | 立動作します。 585 | QuickFixウィンドウ関係処理が必要ない場合は let disable_QFixWin = 1 で無効化し 586 | てもQFixGrepの各種コマンドは完全に動作します。 587 | 588 | qfixlist.vim 589 | マルチバイト文字対応のgrepプラグインです。 590 | 簡単な使用方法は qfixlist.vim冒頭にありますが、任意のディレクトリから任意の文 591 | 字列を検索して結果をQuickFixリストとして取得したり、独自ウィンドウやQuickFix 592 | ウィンドウに表示したりすることが出来ます。 593 | 594 | agrep.vim 595 | Windowsで外部grepが使用できないがUTF-8の日本語文字列を検索したい場合や 596 | Android/iOSでgrepが使用できない場合に使用する文字列検索プラグインです。 597 | 598 | mygrep.vim (要 qfixlist.vim) 599 | QFixGrepの検索用キーマップやコマンドラインコマンド等を設定しています。 600 | 601 | vim:tw=78:ts=8:ft=help:norl:et: 602 | 603 | -------------------------------------------------------------------------------- /autoload/datelib.vim: -------------------------------------------------------------------------------- 1 | "============================================================================= 2 | " Description: date & holiday library 3 | " Author: fuenor 4 | " http://sites.google.com/site/fudist/Home/qfixhowm 5 | "============================================================================= 6 | scriptencoding utf-8 7 | let s:version = 101 8 | " if exists('g:datelib_version') && g:datelib_version < s:version 9 | " let g:loaded_datelib_vim = 0 10 | " endif 11 | " if exists("g:loaded_datelib_vim") && g:loaded_datelib_vim && !exists('fudist') 12 | " finish 13 | " endif 14 | let g:datelib_version = s:version 15 | let g:loaded_datelib_vim = 1 16 | if v:version < 700 17 | finish 18 | endif 19 | 20 | " strftime()の基準年 21 | if !exists('g:YearStrftime') 22 | let g:YearStrftime = 1970 23 | endif 24 | 25 | " strftime()基準の経過日数 26 | function! datelib#Date2IntStrftime(year, month, day) 27 | return s:Date2Int(a:year, a:month, a:day) - g:DateStrftime 28 | endfunction 29 | 30 | " strftime()基準の曜日インデックス 31 | " strftime()基準の経過日数から曜日インデックスを返すので g:DoWStrftime[idx] として使用する 32 | " let idx = datelib#DoWIdxStrftime(datelib#Date2IntStrftime(year, month, day)) 33 | " let idx = datelib#DoWIdxStrftime(year, month, day) 34 | function! datelib#DoWIdxStrftime(...) 35 | if a:0 == 1 36 | return (a:1 + g:DateStrftime)%7 37 | endif 38 | if a:0 == 3 39 | return (s:Date2Int(a:1, a:2, a:3)%7) 40 | endif 41 | return 0 42 | endfunction 43 | 44 | function! s:Date2Int(year, month, day) 45 | let year = a:year 46 | let month = a:month 47 | let day = a:day 48 | " 1・2月 → 前年の13・14月 49 | if month <= 2 50 | let year = year - 1 51 | let month = month + 12 52 | endif 53 | let dy = 365 * (year - 1) " 経過年数×365日 54 | let c = year / 100 55 | let dl = (year / 4) - c + (c / 4) " うるう年分 56 | let dm = (month * 979 - 1033) / 32 " 1月1日から month 月1日までの日数 57 | let today = dy + dl + dm + day - 1 58 | return today 59 | endfunction 60 | 61 | " 曜日変換、シフトを行ったstrfime時間 62 | " strftime()で使用可能 63 | " cnvdow : 2*Mon, 3*Tue, etc. 64 | " sft : -1, +2, -Sun, +Wed, -Hol, etc. 65 | function! datelib#StrftimeCnvDoWShift(year, month, day, cnvdow, sft) 66 | let year = a:year 67 | let month = a:month 68 | let day = a:day 69 | if day == 0 70 | let day = datelib#EndOfMonth(year, month, day) 71 | endif 72 | let sft = a:sft 73 | 74 | let cnvdow = matchstr(a:cnvdow, '\(\d\s*\*\)\?\s*'.s:DoWregxp) 75 | if cnvdow == '' 76 | let dday = datelib#Date2IntStrftime(year, month, day) 77 | let time = dday * 24*60*60 78 | else 79 | let dow = substitute(cnvdow, '[*0-9]', '', 'g') 80 | let cnvdow = substitute(cnvdow, '[^0-9]', '', 'g') 81 | if cnvdow == 0 || cnvdow == '' 82 | let cnvdow = 1 83 | endif 84 | let fday = datelib#Date2IntStrftime(year, month, 1) 85 | let fdow = datelib#DoWIdxStrftime(fday) 86 | let dday = fday - fdow 87 | let dday += (cnvdow-1) * 7 + index(g:DoWStrftime, dow) 88 | let time = dday * 24*60*60 89 | let month = strftime('%m', time) 90 | if fdow > index(g:DoWStrftime, dow) 91 | let time += 7*24*60*60 92 | endif 93 | endif 94 | if sft =~ '[-+]\?\s*\d\+' 95 | let time += str2nr(sft)*24*60*60 96 | elseif sft =~ '[-+]\s*\c\(Hol\|Hdy\|Wdy\|Holiday\|Weekday\)' 97 | let t = str2nr(substitute(sft, '\c\(Hol\|Hdy\|Wdy\|Holiday\|Weekday\)', '1', '')) * 24*60*60 98 | while 1 99 | let y = strftime('%Y', time) 100 | let m = strftime('%m', time) 101 | let d = strftime('%d', time) 102 | let date = printf('%4.4d%2.2d%2.2d', y, m, d) 103 | 104 | if ((exists('s:holidaytbl[date]') == 0) && (sft !~ '\c\(Weekday\|Wdy\)' || (s:Date2Int(y, m, d) % 7) != 5)) 105 | break 106 | endif 107 | let time += t 108 | endwhile 109 | elseif sft =~ '[-+]\s*'.s:DoWregxp 110 | let fday = time / (24*60*60) 111 | let fdow = datelib#DoWIdxStrftime(fday) 112 | if sft =~ g:DoWStrftime[fdow] 113 | let time += (sft =~ '+' ? 1 : -1) * 24*60*60 114 | endif 115 | endif 116 | return time 117 | endfunction 118 | 119 | " 月末 120 | function! datelib#EndOfMonth(year, month, day) 121 | let year = a:year 122 | let month = a:month 123 | if month > 12 124 | let year += 1 125 | let month = month - 12 126 | endif 127 | let monthdays = [31,28,31,30,31,30,31,31,30,31,30,31] 128 | if (year%4 == 0 && year%100 != 0) || year%400 == 0 129 | let monthdays[1] = 29 130 | endif 131 | let day = a:day 132 | if monthdays[month-1] < day 133 | let day = monthdays[month-1] 134 | endif 135 | if day == 0 136 | let day = monthdays[month-1] 137 | endif 138 | return day 139 | endfunction 140 | 141 | " strftime()の基準日数(1970-01-01) 142 | if !exists('g:DateStrftime') 143 | let g:DateStrftime = s:Date2Int(g:YearStrftime, 1, 1) 144 | endif 145 | " 初週曜日(0001-01-01) 146 | if !exists('g:DoWStrftime') 147 | let g:DoWStrftime = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] 148 | endif 149 | 150 | "============================================================================= 151 | " howmスタイル休日設定 152 | 153 | " 休日定義ファイル 154 | if !exists('g:calendar_holidayfile') 155 | " let g:calendar_holidayfile = '~/qfixmemo/Sche-Hd-0000-00-00-000000.howm' 156 | let g:calendar_holidayfile = '' 157 | endif 158 | " 休日定義ファイルのfileencoding は自動判定されるがBOMは扱えない。 159 | " BOM付きファイルエンコーディングを使用する場合は 160 | " let g:calendar_holidayfile_fileencoding = 'auto' 161 | " のように指定する。 162 | " ただしcalendar_holidayfile_fileencodingを指定すると画面が乱れる場合がある。 163 | 164 | """""""""""""""""""""""""""""" 165 | " 指定日が休日かチェック 166 | " 追加オプションがある場合、指定曜日は除く 167 | " (主に日曜を排除するためにある) 168 | """""""""""""""""""""""""""""" 169 | function! datelib#HolidayCheck(year, month, day, ...) 170 | call datelib#MakeHolidayTable(a:year) 171 | let date = printf('%4.4d%2.2d%2.2d', a:year, a:month, a:day) 172 | if a:0 173 | let fday = datelib#Date2IntStrftime(a:year, a:month, a:day) 174 | let fdow = datelib#DoWIdxStrftime(fday) 175 | return (g:DoWStrftime[fdow] !~ a:1) * (exists('s:holidaytbl[date]') ? 1 : 0) 176 | endif 177 | return (exists('s:holidaytbl[date]') ? 1 : 0) 178 | endfunction 179 | 180 | """""""""""""""""""""""""""""" 181 | " 少なくとも指定年の休日定義が含まれる辞書を返す 182 | """""""""""""""""""""""""""""" 183 | function! datelib#GetHolidayTable(year) 184 | call datelib#MakeHolidayTable(a:year) 185 | return deepcopy(s:holidaytbl) 186 | endfunction 187 | 188 | if !exists('g:DL_SundayStr') 189 | let g:DL_SundayStr = '日曜日' 190 | endif 191 | if !exists('g:DL_SubstituteHolidayStr') 192 | let g:DL_SubstituteHolidayStr = '振替休日' 193 | endif 194 | if !exists('g:DL_SubstituteHolidayReg') 195 | let g:DL_SubstituteHolidayReg = g:DL_SundayStr 196 | endif 197 | if !exists('g:DL_VernalEquinoxStr') 198 | let g:DL_VernalEquinoxStr = '春分の日' 199 | endif 200 | if !exists('g:DL_AutumnEquinoxStr') 201 | let g:DL_AutumnEquinoxStr = '秋分の日' 202 | endif 203 | " 春分/秋分 204 | let g:DL_Equinox = 0 205 | " 振替休日 206 | let g:DL_SubstituteHoliday = 0 207 | 208 | 209 | " 指定年の予定を作成 210 | let s:holidaytbl = {} 211 | let s:holidaydict = [] 212 | let s:usertbl = {} 213 | let s:userdict = [] 214 | function! datelib#MakeHolidayTable(year, ...) 215 | let hol = a:0 216 | for year in range(a:year-1, a:year+1) 217 | let yearid = year. (hol ? 'Hol' : '') 218 | if !exists('s:holidaytbl[yearid]') 219 | let s:holidaytbl[yearid] = '|exists|' 220 | if len(s:holidaydict) == 0 221 | let s:holidaydict = s:ReadScheduleFile(s:setholidayfile(), s:holidaytbl) 222 | endif 223 | call s:SetScheduleTable(year, s:holidaydict, s:holidaytbl, hol) 224 | call s:SetEquinox(year, s:holidaytbl) 225 | call s:Furikae(year, s:holidaytbl) 226 | if exists('g:calendar_userfile') 227 | if len(s:userdict) == 0 228 | let s:userdict = s:ReadScheduleFile(g:calendar_userfile, s:usertbl) 229 | endif 230 | call s:SetScheduleTable(year, s:userdict, s:usertbl, hol) 231 | endif 232 | endif 233 | endfor 234 | endfunction 235 | 236 | if !exists('g:qfixtempname') 237 | let g:qfixtempname = tempname() 238 | endif 239 | 240 | " 休日定義ファイルを読み込み 241 | let s:DoWregxp = '\c\(Sun\|Mon\|Tue\|Wed\|Thu\|Fri\|Sat\|Hol\|Hdy\|Wdy\|Holiday\|Weekday\)' 242 | function! s:ReadScheduleFile(files, table) 243 | let dict = [] 244 | for file in a:files 245 | if !filereadable(file) 246 | continue 247 | endif 248 | let glist = s:readfile(file) 249 | let today = strftime('%Y%m%d') 250 | let sch_ext = '-@!+~.' 251 | let sch_date = '^.\d\{4}.\d\{2}.\d\{2}.' 252 | let sch_dow = s:DoWregxp 253 | let sch_cmd = '['.sch_ext.']\{1,3}\(([0-9]*[-+*]\?'.sch_dow.'\?\([-+]\d\+\)\?)\)\?[0-9]*' 254 | for str in glist 255 | let date = matchstr(str, sch_date) 256 | let date = substitute(date, '[^0-9]', '', 'g') 257 | let year = strpart(date, 0, 4)+0 258 | let month = strpart(date, 4, 2)+0 259 | let day = strpart(date, 6, 2)+0 260 | let str = substitute(str, sch_date, '', '') 261 | if month == 0 && day == 0 262 | if str =~ '^\s*@\d*\s*Sunday\s*=\s*' 263 | " 現時点では未使用 264 | let g:DL_SundayStr = substitute(str, '^.*=\s*\|\s*$', '', 'g') 265 | elseif str =~ '^\s*@\d*\s*Substitute\s*=\s*' 266 | let g:DL_SubstituteHolidayStr = substitute(str, '^.*=\s*\|\s*$', '', 'g') 267 | elseif str =~ '^\s*@\d*\s*'.g:DL_VernalEquinoxStr || str =~ '^\s*@\d*\s*'.g:DL_AutumnEquinoxStr 268 | let g:DL_Equinox = year > 0 ? year : 1 269 | elseif str =~ '^\s*@\d*\s*'.g:DL_SubstituteHolidayStr 270 | if str =~ '=\s*[^\s]\+\s*$' 271 | let g:DL_SubstituteHolidayReg = substitute(str, '^.*=\s*\|\s*$', '', 'g') 272 | endif 273 | let g:DL_SubstituteHoliday = year > 0 ? year : 1 274 | endif 275 | continue 276 | endif 277 | let cmdstr = matchstr(str, '^'.sch_cmd) 278 | if cmdstr == '' 279 | continue 280 | endif 281 | let cmd = matchstr(cmdstr, '['.sch_ext.']\+') 282 | let opt = matchstr(cmdstr, '\d*$') 283 | let cnvdow = matchstr(cmdstr, '(\(\d\*\)\?'.sch_dow) 284 | let cnvdow = substitute(cnvdow, '(', '', '') 285 | let sft = matchstr(cmdstr, '[-+]\(\d\+\|'.sch_dow.'\))') 286 | let sft = substitute(sft, ')', '', '') 287 | let repeat = matchstr(cmdstr, '(\d\+') 288 | let repeat = substitute(repeat, '(', '', '') 289 | let text = substitute(str, '^'.sch_cmd, '', '') 290 | if cmd == '@' 291 | elseif cmd == '@@' 292 | elseif cmd == '@@@' 293 | else 294 | continue 295 | endif 296 | let hday = {'cmd':cmd, 'year':year, 'month':month, 'day':day, 'repeat':repeat, 'cnvdow':cnvdow, 'sft':sft, 'opt':opt, 'text':text} 297 | call add(dict, hday) 298 | endfor 299 | endfor 300 | return deepcopy(dict) 301 | endfunction 302 | 303 | function! s:readfile(file) 304 | let file = a:file 305 | let list = readfile(file) 306 | 307 | " BOMに対応しないファイルエンコーディング簡易判定 308 | let fromenc = split(&fencs, ',') 309 | let to = "utf-8" 310 | for from in fromenc 311 | if from =~? to || from =~? 'ucs-bom\|default\|latin' 312 | continue 313 | endif 314 | let tlist = deepcopy(list) 315 | call map(tlist, 'iconv(v:val, from, to)') 316 | let flist = deepcopy(tlist) 317 | call map(flist, 'iconv(v:val, to, from)') 318 | if flist == list 319 | return map(list, 'iconv(v:val, from, &enc)') 320 | endif 321 | endfor 322 | 323 | if exists('g:calendar_holidayfile_fileencoding') && g:calendar_holidayfile_fileencoding != '' 324 | return s:readfilebuf(a:file) 325 | endif 326 | 327 | " BOM付きの場合は一行目がBOM付きのまま渡される。 328 | return map(list, 'iconv(v:val, "utf-8", &enc)') 329 | endfunction 330 | 331 | function! s:readfilebuf(file) 332 | silent! let prevPath = s:escape(getcwd(), ' ') 333 | " 高速化のためテンポラリバッファを使用 334 | silent! exe 'silent! botright split '.g:qfixtempname 335 | silent! setlocal bt=nofile bh=hide noswf nobl 336 | let file = a:file 337 | let tlist = [] 338 | silent! 1,$delete _ 339 | let cmd = '0read ' 340 | let opt = '' 341 | silent! exe cmd . ' ' . opt .' '. s:escape(file, ' ') 342 | let tlist = getline(1, '$') 343 | silent! close 344 | silent! exe 'chdir ' . prevPath 345 | return tlist 346 | endfunction 347 | 348 | function! s:setholidayfile() 349 | if g:calendar_holidayfile != '' 350 | let file = g:calendar_holidayfile 351 | elseif exists('g:QFixHowm_HolidayFile') && g:QFixHowm_HolidayFile != '' 352 | let file = g:QFixHowm_HolidayFile 353 | else 354 | let file = 'Sche-Hd-0000-00-00-000000.*' 355 | endif 356 | if exists('g:QFixHowm_ScheduleSearchDir') && g:QFixHowm_ScheduleSearchDir != '' 357 | let l:howm_dir = g:QFixHowm_ScheduleSearchDir 358 | elseif exists('g:qfixmemo_root') 359 | let l:howm_dir = g:qfixmemo_root 360 | elseif exists('g:QFixHowm_RootDir') 361 | let l:howm_dir = g:QFixHowm_RootDir 362 | elseif exists('g:qfixmemo_dir') 363 | let l:howm_dir = g:qfixmemo_dir 364 | elseif exists('g:howm_dir') 365 | let l:howm_dir = g:howm_dir 366 | else 367 | let l:howm_dir = '~' 368 | endif 369 | let prevPath = s:escape(getcwd(), ' ') 370 | silent! exe 'chdir ' . s:escape(l:howm_dir, ' ') 371 | let file = fnamemodify(file, ':p') 372 | exe 'chdir ' . prevPath 373 | let file = substitute(expand(file), "\.*", '', '') 374 | let file = substitute(file, '\\', '/', 'g') 375 | return split(file, "\") 376 | endfunction 377 | 378 | function! s:SetScheduleTable(year, dict, table, hol) 379 | if len(a:dict) 380 | for d in a:dict 381 | if a:year < d['year'] 382 | continue 383 | endif 384 | if !a:hol && d['sft'] =~ '\c\(Hol\|Hdy\|Wdy\|Holiday\|Weekday\)' 385 | continue 386 | elseif a:hol && d['sft'] !~ '\c\(Hol\|Hdy\|Wdy\|Holiday\|Weekday\)' 387 | continue 388 | endif 389 | if d['cmd'] == '@@@' 390 | let time = datelib#StrftimeCnvDoWShift(a:year, d['month'], d['day'], d['cnvdow'], d['sft']) 391 | let date = strftime('%Y%m%d', time) 392 | let text = substitute(d['text'], '\s*&\[\d\{4}[-/]\d\{2}[-/]\d\{2}\]\.', '', 'g') 393 | let etime = s:endstr2time(d['text']) 394 | if (etime > 0) && (time > etime) 395 | continue 396 | endif 397 | let opt = d['opt'] 398 | let opt = (opt == '' || opt == 0) ? 1 : opt 399 | for i in range(opt) 400 | let date = strftime('%Y%m%d', time) 401 | let a:table[date] = text 402 | let time += 24*60*60 403 | endfor 404 | elseif d['cmd'] == '@@' 405 | let opt = d['opt'] 406 | let opt = (opt == '' || opt == 0) ? 1 : opt 407 | let start = a:year == d['year'] ? d['month'] : 1 408 | let text = substitute(d['text'], '\s*&\[\d\{4}[-/]\d\{2}[-/]\d\{2}\]\.', '', 'g') 409 | let etime = s:endstr2time(d['text']) 410 | for month in range(start, 12) 411 | let time = datelib#StrftimeCnvDoWShift(a:year, month, d['day'], d['cnvdow'], d['sft']) 412 | if (etime > 0) && (time > etime) 413 | continue 414 | endif 415 | for i in range(opt) 416 | let date = strftime('%Y%m%d', time) 417 | let a:table[date] = text 418 | let time += 24*60*60 419 | endfor 420 | endfor 421 | elseif d['cmd'] == '@' 422 | let opt = d['opt'] 423 | let opt = (opt == '' || opt == 0) ? 1 : opt 424 | 425 | let smonth = a:year == d['year'] ? d['month'] : 1 426 | let sday = a:year == d['year'] ? d['day'] : 1 427 | let repeat = d['repeat'] 428 | let repeat = (repeat == '' || repeat <= 0) ? 1 : repeat 429 | let begin = datelib#Date2IntStrftime(d['year'], d['month'], d['day']) 430 | let begin += (repeat) * ((datelib#Date2IntStrftime(a:year, smonth, sday) - begin)/repeat) 431 | let time = begin * 24*60*60 432 | let year = strftime('%Y', time) 433 | let month = strftime('%m', time) 434 | let day = strftime('%d', time) 435 | let time = datelib#StrftimeCnvDoWShift(year, month, day, d['cnvdow'], d['sft']) 436 | let date = strftime('%Y%m%d', time) 437 | let a:table[date] = d['text'] 438 | else 439 | continue 440 | endif 441 | endfor 442 | endif 443 | return a:table 444 | endfunction 445 | 446 | function! s:endstr2time(str) 447 | let enddate = substitute(matchstr(a:str, '&\[\d\{4}[-/]\d\{2}[-/]\d\{2}\]\.'), '[^0-9]', '', 'g') 448 | if enddate == '' 449 | return -1 450 | endif 451 | let etime = datelib#Date2IntStrftime(strpart(enddate, 0, 4), strpart(enddate, 4, 2), strpart(enddate, 6, 2)) *24*60*60 452 | return etime 453 | endfunction 454 | 455 | function! s:SetEquinox(year, table) 456 | if g:DL_Equinox == 0 || a:year < g:DL_Equinox || a:year < g:YearStrftime 457 | return 458 | endif 459 | 460 | let year = a:year 461 | let mod = year % 4 462 | 463 | let text = g:DL_VernalEquinoxStr 464 | let month = 3 465 | if mod == 0 466 | if year >= 1900 && year <= 1956 467 | let day = 21 468 | elseif year >= 1960 && year <= 2088 469 | let day = 20 470 | elseif year >= 2092 && year <= 2096 471 | let day = 19 472 | endif 473 | elseif mod == 1 474 | if year >= 1901 && year <= 1989 475 | let day = 21 476 | elseif year >= 1993 && year <= 2097 477 | let day = 20 478 | endif 479 | elseif mod == 2 480 | if year >= 1902 && year <= 2022 481 | let day = 21 482 | elseif year >= 2026 && year <= 2098 483 | let day = 20 484 | endif 485 | elseif mod == 3 486 | if year >= 1903 && year <= 1923 487 | let day = 22 488 | elseif year >= 1927 && year <= 2055 489 | let day = 21 490 | elseif year >= 2059 && year <= 2099 491 | let day = 20 492 | endif 493 | endif 494 | let date = printf('%4.4d%2.2d%2.2d', year, month, day) 495 | let a:table[date] = text 496 | 497 | let text = g:DL_AutumnEquinoxStr 498 | let month = 9 499 | if mod == 0 500 | if year >= 1900 && year <= 2008 501 | let day = 23 502 | elseif year >= 2012 && year <= 2096 503 | let day = 22 504 | endif 505 | elseif mod == 1 506 | if year >= 1901 && year <= 1917 507 | let day = 24 508 | elseif year >= 1921 && year <= 2041 509 | let day = 23 510 | elseif year >= 2045 && year <= 2097 511 | let day = 22 512 | endif 513 | elseif mod == 2 514 | if year >= 1902 && year <= 1946 515 | let day = 24 516 | elseif year >= 1950 && year <= 2074 517 | let day = 23 518 | elseif year >= 2078 && year <= 2098 519 | let day = 22 520 | endif 521 | elseif mod == 3 522 | if year >= 1903 && year <= 1979 523 | let day = 24 524 | elseif year >= 1983 && year <= 2099 525 | let day = 23 526 | endif 527 | endif 528 | let date = printf('%4.4d%2.2d%2.2d', year, month, day) 529 | let a:table[date] = text 530 | endfunction 531 | 532 | function! s:Furikae(year, table) 533 | if g:DL_SubstituteHoliday < 0 || a:year < g:DL_SubstituteHoliday || a:year < g:YearStrftime 534 | return 535 | endif 536 | let year = a:year 537 | for [key, value] in items(a:table) 538 | if key !~ '^'.year.'\d\{2}\d\{2}' || value =~ g:DL_SubstituteHolidayReg 539 | continue 540 | endif 541 | let month = strpart(key, 4, 2) 542 | let day = strpart(key, 6, 2) 543 | if s:Date2Int(year, month, day) % 7 != 6 544 | continue 545 | endif 546 | 547 | " 日曜なので振替 548 | let i = 0 549 | while 1 550 | let time = datelib#Date2IntStrftime(year, month, day+i)*24*60*60 551 | let date = strftime('%Y%m%d', time) 552 | if !exists('a:table[date]') 553 | break 554 | endif 555 | let i += 1 556 | endwhile 557 | let a:table[date] = g:DL_SubstituteHolidayStr 558 | endfor 559 | endfunction 560 | 561 | function! s:escape(str, chars) 562 | return escape(a:str, a:chars.((has('win32')|| has('win64')) ? '#%&' : '#%$')) 563 | endfunction 564 | 565 | --------------------------------------------------------------------------------