├── 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 | &
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 "\