9

これは、Markdown アウトラインを生成するための vim スクリプトです。

fun! TOC()
    call setloclist(0, [])
    let save_cursor = getpos(".")
    call cursor(1, 1)
    while search("^#", 'W') > 0
       let msg = printf('%s:%d:%s', expand('%'), line('.'), substitute(getline('.'), '#', '»', 'g'))
       laddexpr msg
    endwhile
    call setpos('.', save_cursor)
endfun

com! -bar TOC call TOC()

サンプルのマークダウン ファイル: https://github.com/progit/progit/raw/master/zh/01-introduction/01-chapter1.markdown


コマンドを実行した後の:TOCクイック リストは次のとおりです。

01-chapter1.markdown|5| »» 关于版本控制 »»
01-chapter1.markdown|11| »»» 本地版本控制系统 »»»
01-chapter1.markdown|22| »»» 集中化的版本控制系统 »»»
01-chapter1.markdown|33| »»» 分布式版本控制系统 »»»
01-chapter1.markdown|42| »» Git 简史 »»
01-chapter1.markdown|56| »» Git 基础 »»
01-chapter1.markdown|60| »»» 直接记录快照,而非差异比较 »»»
01-chapter1.markdown|74| »»» 近乎所有操作都是本地执行 »»»
01-chapter1.markdown|82| »»» 时刻保持数据完整性 »»»
01-chapter1.markdown|92| »»» 多数操作仅添加数据 »»»
01-chapter1.markdown|98| »»» 文件的三种状态 »»»
01-chapter1.markdown|121| »» 安装 Git »»
01-chapter1.markdown|125| »»» 从源代码安装 »»»
01-chapter1.markdown|152| »»» 在 Linux 上安装 »»»
01-chapter1.markdown|162| »»» 在 Mac 上安装 »»»
01-chapter1.markdown|177| »»» 在 Windows 上安装 »»»
01-chapter1.markdown|185| »» 初次运行 Git 前的配置 »»
01-chapter1.markdown|197| »»» 用户信息 »»»
01-chapter1.markdown|206| »»» 文本编辑器 »»»
01-chapter1.markdown|212| »»» 差异分析工具 »»»
01-chapter1.markdown|220| »»» 查看配置信息 »»»
01-chapter1.markdown|240| »» 获取帮助 »»
01-chapter1.markdown|254| »» 小结 »»

クイック フィックス エントリを次のようにフォーマットします。

|005| »» 关于版本控制 »»
|011| »»» 本地版本控制系统 »»»
|022| »»» 集中化的版本控制系统 »»»
|033| »»» 分布式版本控制系统 »»»
|042| »» Git 简史 »»
|056| »» Git 基础 »»
|060| »»» 直接记录快照,而非差异比较 »»»
|074| »»» 近乎所有操作都是本地执行 »»»
|082| »»» 时刻保持数据完整性 »»»
|092| »»» 多数操作仅添加数据 »»»
|098| »»» 文件的三种状态 »»»
|121| »» 安装 Git »»
|125| »»» 从源代码安装 »»»
|152| »»» 在 Linux 上安装 »»»
|162| »»» 在 Mac 上安装 »»»
|177| »»» 在 Windows 上安装 »»»
|185| »» 初次运行 Git 前的配置 »»
|197| »»» 用户信息 »»»
|206| »»» 文本编辑器 »»»
|212| »»» 差异分析工具 »»»
|220| »»» 查看配置信息 »»»
|240| »» 获取帮助 »»
|254| »» 小结 »»

それを行うオプションが見つかりません。もしご存知でしたら教えてください。ありがとう!

4

3 に答える 3

10

クイックフィックスの場所の表示方法を構成することはできません。errorformatオプションを介してそれらを解釈する方法を指定することだけが可能です。ただし、隠し機能を使用して、クイックフィックスまたはロケーション リスト ウィンドウでファイル名を非表示にすることができます。

次のコマンドは、隠蔽を有効にし、最初の | 文字の前の行の先頭にある任意のテキストに一致する構文規則を定義します。

:set conceallevel=2 concealcursor=nc
:syntax match qfFileName /^[^|]*/ transparent conceal

自動コマンドを使用して、クイックフィックスまたはロケーション リスト ウィンドウごとにこれらのコマンドをトリガーできます。ただし、ほとんどの場合、ファイル名の表示は便利な機能であるため、一般的には良い考えではありません。

質問に示されているケースでは、これらのカスタマイズは、新しく収集されたロケーション リストに対してのみ行うことをお勧めします。ただし、最初に場所リスト ウィンドウを開く必要があります。

:lopen
:set conceallevel=2 concealcursor=nc
:syntax match qfFileName /^[^|]*/ transparent conceal
于 2012-06-26T07:40:36.927 に答える
1

私はこの PRの plasticboy/vim-markdownにこれを実装することになりました(GIF アニメーション付き) + 置換を使用set modifiableして、何かを隠す代わりに:

function! b:Markdown_Toc()
    silent lvimgrep '^#' %
    vertical lopen
    let &winwidth=(&columns/2)
    set modifiable
    %s/\v^([^|]*\|){2,2} #//
    for i in range(1, line('$'))
        let l:line = getline(i)
        let l:header = matchstr(l:line, '^#*')
        let l:length = len(l:header)
        let l:line = substitute(l:line, '\v^#*[ ]*', '', '')
        let l:line = substitute(l:line, '\v[ ]*#*$', '', '')
        let l:line = repeat(' ', (2 * l:length)) . l:line
        call setline(i, l:line)
    endfor
    set nomodified
    set nomodifiable
endfunction

しかし、あなたは好むかもしれません:

Plugin 'plasticboy/vim-markdown'

それはあなた次第です。=)

スクリーンショット:

ここに画像の説明を入力

于 2014-03-29T21:42:43.947 に答える