QFixHowm - アウトラインモード (折りたたみ)

サブメニューのアウトライン機能

サブメニュー」ではデフォルトでインデントに対応したアウトライン機能が使用可能です。

サブメニュー


アウトラインモード

howm バッファローカルコマンド

,o

アウトライン用のコマンド QFixHowmOutlineを呼び出す。

デフォルトでは zi コマンドで折りたたみがON/OFFされます。

アウトラインモードを使用すると、折りたたみ記号を利用してアウトラインプロセッサ風に使用することが出来ます。

また行頭が . で始まる「階層付きテキスト」などを扱う事も出来ます。

クイックメモ」など一ファイル複数エントリでQFixHowmを使用している場合、非常に有効です。

g,oか通常の折りたたみ(folding)コマンド(zi、zc、zrなど)で折りたたみをON/OFFしてみてください。

デフォルトでは次のパターンを使用して折りたたみます。

  • 行頭の =. *

折りたたみを行う正規表現には QFixHowm_FoldingPatternが使用されます。

"折りたたみのパターン
let QFixHowm_FoldingPattern = '^[=.*]'

折りたたみのパターンに [ を含めると予定・TODOも認識して折りたたまれます。

let QFixHowm_FoldingPattern = '^[=.*[]'

独自の折りたたみやアウトライン用コマンドを指定する

デフォルトでは各行が QFixHowm_FoldingPattern と一致するかどうかでレベルを設定しています。

set foldexpr=getline(v:lnum)=~g:QFixHowm_FoldingPattern?'>1':'1' 

独自の折りたたみを設定する場合 QFixHowmFoldingLevel(v:lnum) が利用可能です。

例えば行頭が '= ' で始まる部分を折り畳み、行頭の * の数をレベルとする見出し行を内包する折り畳みは以下のように設定します。

" フォールディングレベル計算  
function! QFixHowmFoldingLevel(lnum)
  if getline(a:lnum) =~ '^= ' 
    return '>1'
  endif   
  let level = matchend(getline(a:lnum), '^\*\+') + 1   
  return level > 0 ? '>'.level : '='
endfunction 

フォールディングについて詳しい事は :help fold-expr を参照してみてください。

また ,o でアウトライン用に起動するコマンドはQFixHowmOutline() が使用されます。

同名の関数を.vimrcやスクリプトに作成すると、そちらが優先して実行されます。

好みに応じて適当な折りたたみやアウトライン表示用のプラグインなどを併用して下さい。

例えばアウトライン用に :Outlineというコマンドを呼び出したい場合は、.vimrcに以下を追加します。

"アウトライン用コマンド呼び出し
function! QFixHowmOutline()
  silent exec "Outline"
endfunction

howmファイルに独自の折りたたみを設定したい場合は、QFixHowm_Folding = 0 でQFixHowmのフォールディングを無効化して、通常のファイルのようにフォールディングを設定して下さい。

"折りたたみを無効にする
let QFixHowm_Folding = 0

無効にしてから .vimrc で通常の折りたたみのように、指定する事が出来ます。

以下を .vimrcに追加すると行頭の . * = で折りたたみを行います。

"デフォルトでは折りたたみを無効にしておく(必要時に zi などで有効にする)
autocmd BufNewFile,BufRead *.howm setlocal nofoldenable
autocmd BufNewFile,BufRead *.howm setlocal foldmethod=expr
autocmd BufNewFile,BufRead *.howm setlocal foldexpr=getline(v:lnum)=~'^[.=*]'?'>1':'1'

詳しくは :help folding を参照してください

ユーザー独自の折りたたみを使用する場合にじゃまにならないよう、デフォルトでは折りたたみ記号の強調表示は行われません。

折りたたみやリスト、引用など独自の強調表示を使用する場合は以下を参照して下さい。

文書構造とユーザ独自のシンタックスファイル

ファイルタイプに qfix_memo を指定すると「文書構造とユーザ独自のシンタックスファイル」と同様の強調表示が有効になります。

"howmのファイルタイプ
let QFixHowm_FileType = 'qfix_memo'

ワイルドカードチャプター(章形式の折りたたみ)

ワイルドカードチャプターでは、次のパターンを使用します。

ワイルドカードチャプター形式

章形式の構造を持つ文書を書きたいときもあると思います。

QFixHowmでの章形式は行頭に 1. や 2.1 のように数字と . の組み合わせと空白で区切った章タイトルで指定します。

1.

この章形式でチャプターを指定することができます。

1.1

この章形式でチャプターを指定することができます。

2.

この章形式でチャプターを指定することができます。

ただし、章形式に生の数値を使用していると削除や移動、入れ替えを行う際に章番号がずれてしまいます。

そこで数字の代わりに * を使用したワイルドカードチャプターという形式を用意しています。

*.

この章形式でチャプターを指定することができます。

*.*

この章形式でチャプターを指定することができます。

*.

この章形式でチャプターを指定することができます。

編集作業が終わったら、最後にワイルドカードチャプターを g,z で数値形式に変換して使用します。

この章形式は以下を設定すると折りたたみ可能なため、zi や g,o で折りたたむして章単位での削除や移動が可能です。

" ワイルドカードチャプターを使用する
let QFixHowm_WildCardChapter = 1

実際問題としてきちんと対応すると速度的に遅いので、ワイルドカードチャプター対応折りたたみよりは、以下を設定するほうが扱いやすいかもしれません。

" ワイルドカードチャプター対応折りたたみ(簡易対応版)
let QFixHowm_FoldingPattern = '^\([=#.]\+\s\|\(\d\+\|\*\)\.\)'

次のエントリをhowmファイルへコピーして g,o や zi の折りたたみ、またワイルドカードチャプター変換の g,z を実行してみてください。

1.

QFixHowmでの章形式は行頭に 1. や 2.1 のように数字と . の組み合わせと空白で区切った章タイトルで指定します。

このエントリをhowmファイルへコピーしてみてください。

1.1

この章形式に対して「アウトラインモード」を使用するとのチャプター間の本文を折りたたむことが出来ます。

折りたたんだ状態で章単位の削除や移動が可能です。

zi か g,oで折りたたみを有効にしてから、zo zc などで折りたたみや、削除、移動をしてみてください。

「アウトラインモード」

https://sites.google.com/site/fudist/Home/qfixhowm/option/outline-mode#wildcard-chapter

2. チャプターの強調表示

デフォルトではユーザー独自の折りたたみを使用する場合のじゃまにならないよう、折りたたみの強調表示は行われません。

折りたたみやリスト、引用などの強調表示については以下を参照して下さい。

「文書構造とユーザ独自のシンタックスファイル」

http://sites.google.com/site/fudist/Home/qfixhowm/option/outline-mode#user-syntaxfile

3. ワイルドカードチャプター

ただし、章形式に生の数値を使用していると削除や移動、入れ替えを行う際に章番号がずれてしまいます。

このためワイルドカードチャプターという形式を用意しています。

ワイルドカードチャプターは数字の代わりに * を使用した形式です。

編集作業が終わったら、最後にワイルドカードチャプターを g,z で数値に変換して使用します。

ビジュアルモードで選択している場合は選択範囲内のみが変換されます。

3.1 ワイルドカードチャプターの例

ワイルドカードチャプター変換実行前

*.

ほげ

*.*

ふがふが

*.*

*.*.*.*

にょろ

*.*.*

*.

ワイルドカードチャプター変換実行後

1.

ほげ

1.1

ふがふが

1.2

1.2.0.1

にょろ

1.2.1

2.

チャプター数を指定すると以降は、指定チャプターが優先されます

ワイルドカードチャプター変換実行前

4.

ほげ

*.*

ふがふが

*.*

*.*.*.*

にょろ

*.*.*

*.

ワイルドカードチャプター変換実行後

4.

ほげ

4.1

ふがふが

4.2

4.2.0.1

にょろ

4.2.1

5.

デフォルトでは全ての章、節が独立した折りたたみになりますが、QFixHowm_FoldingMode = 1 を設定すると、チャプターのレベルに応じた折りたたみが設定されます。

"チャプターのレベルに応じた折りたたみを設定する
let QFixHowm_FoldingMode = 1

タイトル行やQFixHowm_FoldingPatternで指定する折りたたみパターンを、折りたたまないようにも出来ます。

チャプタータイトルを付けない場合、折りたたむと内容がわからない時などに使用します。

"タイトルは折りたたまない
let QFixHowm_Folding = 2
"チャプタータイトルは折りたたまない
let QFixHowm_FoldingChapterTitle = 1

自動補完を利用していて、文字入力がもたつく場合

ワイルドカードチャプターの折りたたみと、「vimのキー入力で自動補完」のような自動補完を併用している場合、入力がもたつく事があります。

このような場合は以下のスクリプトを .vimrc(_vimrc)へ追加すると改善されるかもしれません。

"折りたたみと自動補完を併用していて、文字入力がもたつく場合
augroup InsertHookFolding
  autocmd!
  autocmd InsertEnter *.howm let saved_fdm = &foldmethod|setlocal foldmethod=manual
  autocmd InsertLeave *.howm exec 'setlocal foldmethod='.saved_fdm
augroup END

文書構造とユーザ独自のシンタックスファイル

ユーザー独自の折りたたみを使用する場合のじゃまにならないよう、デフォルトでは折りたたみの強調表示は行われません。

たとえば「ワイルドカードチャプター」のように、行頭の * や 1.1 のように数字と . で始まる章形式をアウトライン記号として使用する場合、色分け表示するためにqfix_memoファイルタイプが用意されています。

qfix_memo.vimをコピーして独自のシンタックスファイルを作成するなどしてみてください。

howmの色とファイルタイプ指定

その他に文書構造ではありませんが、行頭の > による引用表示や、行頭の - や + をリストとして強調表示するようにしてあります。

また、ソースコードの引用には、はてなのsuper pre記法を使えるようにしています。

QFixHowmと、はてなのsuper preハイライト

例えば以下のエントリを作成(新規エントリにコピー)して、qfix_memo.vimを使用する前と後を比べてみるなどしてみて下さい。

「qfix_memo.txt」をダウンロードして開くと主なハイライトが確認できます。

qfix_memoファイルタイプの主な記法は以下の通りです。

<!-- vim: set filetype=qfix_memo: --> = [:manual] qfixmemoのマークアップ qfix_memoのハイライト表示は、基本的にmarkdownファイルタイプと同じです。 ただしタイトル行やチャプター表示等の独自拡張部分ハイライト追加と、画面が乱れや すいmarkdownの文字強調の無効化が行われています(文字強調は有効化も可能です) 他のファイルタイプとの違いを確認したい場合は、このファイル先頭のファイルタイプ 指定部分の`qfix_memo`を`markdown`等に書き換えて再読込してみてください。 # タイトル行 タイトルマーカーとして行頭に`=#.`が使えます(`=`はqfixmemo_titleでの定義) マーカーは個数で6段階のレベル分け可能です。 == [:qfixhowm] qfixmemo ### [:markdown] markdown .... [:structured] 階層化テキスト 各タイトル内で`[]`を使うとカテゴリタグとしてハイライトされます。 ## タイムスタンプ howm形式のタイムスタンプがハイライトされます。 [2000-09-13 12:34] # チャプター (数値付きサブタイトルリスト) タイトルとは別にチャプターも使えます。 文頭が「数字.」で始まるとmarkdownでは順序つきリストとして扱われますが、 qfixmemoではチャプターとしてハイライトします。 qfixmemoにはワイルドカードチャプターという記法があり、`*.*`や`1.2`のようにチャプターレ ベルを設定することができます。 1. チャプターとは 文頭が`数字.`または`*.`で始まるとチャプターになります。 *.* レベル チャプターレベルは`*`と「数値部分」の数で決まります。 *.*.* ,zコマンド 範囲選択して`,z`(実際のキータイプは`g,z`)を実行するとチャプターの`*`は数字に置 き換えられます。 こうすることによって、順序付きリストでは面倒な「章の入れ替え」等が簡単に行なえ ます。 編集時にはワイルドカードチャプターで行い、完成したら`,z`で数値に置き換えると便 利です。 *. 折りたたみ .vimrcに以下を設定すると`zc`での折りたたみで、ワイルドカードチャプターを認識し て折りたたみます。 let g:QFixHowm_WildCardChapter = 1 *.* チャプターレベルに応じた折りたたみ デフォルトでは全ての章、節が独立した折りたたみになりますが、 以下を設定すると、チャプターのレベルに応じた折りたたみが設定されます。 QFixHowm_FoldingMode = 1 4. チャプターの数値 チャプターレベルを数値指定する場合、特に連続している必要はありません。 # リスト ## markdown記法 - 文頭を`-+*`で始めると順序なしリストになります - 種類の違うリストは入れ子になります + りんご * つがる * ふじ * 王林 + ゴリラ - ローランドゴリラ - マウンテンゴリラ + らっぱ ## hatena記法 hatena記法もサポートするため`-`と`+`については繰り返しも許容しています。 + 文頭を`-`で始めると順序なしリストになります + 文頭を`+`で始めると数値付きリストになります + 文頭を`-`または`+`の繰り返しで始めると階層化されます。 - りんご -- 王林 -- つがる -- ふじ - ゴリラ ++ ローランドゴリラ ++ マウンテンゴリラ - ラッパ なお`-`については3回以上の繰り返しで罫線のハイライトが有効になります。 # 定義リスト 以下の独自定義リストのハイライトが有効です。 :定義 :説明 markdownに定義リストはありません。 HTMLの<dl>タグをそのまま使うことで実現できます。 <dl> <dt>定義</dt> <dd>説明</dd> </dl> # 引用 > これは引用です > > > 以下を実行すると引用部本体がハイライトされます > > hi link qfixmemoBlockQuote Comment > > > > `.virmc`か`after/syntax/qfix_memo.vim`を作成して、 > > 追加するなどしてみてくださ # URLとファイル 文中のURIは独自にハイライトされます。 http://www.google.com http://example.com:8080 file://c:/example.txt 日本語や空白を含む場合は以下の独自記法であればハイライトされます。 [:c:\temp\ほげ.txt:] ## markdownのURL表記 [リンクテキスト](https://www.example.com) ![画像リンクテキスト](https://www.example.com/hoge.jpg) [リンクテキスト](https://www.example.com/foo.html "タイトル") ![画像リンクテキスト](https://www.example.com/fuga.jpg "タイトル") タイトルはHTMLではホバーテキスト等で表示されます。 ### markdownの定義参照リンク markdownのURL表記 [ほげ][example] [ふが][example] [example][] 上記3個のいずれも同じリンク先を参照する定義参照リンクです。 参照リンク先は次のように定義します [example]:http://example.com/anonymous # コードスニペット ## markdown ```cpp print("hello world.\n"); ``` ## はてな >|cpp| print("hello again.\n"); ||< ## 文中の`コード`表示 文中の`コード`もハイライト可能です 以下を実行すると、`コード表示`自体もハイライトされます。 :hi link qfixmemoCode Define `.virmc`か`after/syntax/qfix_memo.vim`を作成して、追加するなどしてみてくださ い。 ## コード引用 行頭がタブか、4文字以上の半角スペースで始まるとコード引用となります。 行頭がタブ1個またはスペース4個以上ならコード引用 `コード引用`の場合ハイライトは<b>無効化</b>される 行頭がタブ1個またはスペース4個以上ならコード引用 `コード引用`の場合ハイライトは<b>無効化</b>される # 罫線 * * * - - - --------------------------------------- # 強調表示 htmlタグを利用して、文字の強調表示が可能です。 これは<em>強調表示</em>です。 これは<strong>強い強調表示</strong>です。 これは<b>強い強調表示</b>です。 これは<b><em>強い強調表示</em></b>です。

使用可能なタグはVimのmarkdown(html)ファイルタイプでハイライトされるものと同じで す。 markdownにも文字強調表示のマークアップが存在します。 _これは強調表示です_ __これは強い強調表示です__ *これも強調表示です* **これも強い強調表示です** ただしqfix_memoファイルタイプのデフォルトでは無効化されています。 これは画面が乱れる場合があることと、 3*3=9 のように文中に強調表示記号が強調記号 でない形で存在する場合でも、意図しない強調表示が行われる場合があるためです。 (\によるエスケープは可能ですが当然意図しない文になります) 以上を理解した上で強調記号を有効にしたい場合は、以下を実行して再読込してみてください。 let g:qfixmemo_markdown_emphasis = 1 特に問題ない場合は.vimrcに追加すると起動時から有効になります。*

## markdownファイルタイプ読み込みの無効化 以下を設定するとmarkdownファイルタイプの読み込みを行ないません。 let g:qfixmemo_markdown_syntax = 0 読み込みを行なわない場合htmlタグはハイライトされなくなりますが、このファイルで

使用されているマークアップはmarkdownタグを含めほぼそのままハイライトされます。

実際に`qfixmemo_markdown_syntax`を設定してから再読込して確認してみてください。