2012-06-26 28 views
6

Đây là vim-kịch bản để tạo ra phác thảo Markdown:Cách định dạng mục nhập vim quickfix?

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() 

Một tập tin mẫu markdown: https://github.com/progit/progit/raw/master/zh/01-introduction/01-chapter1.markdown


Sau khi chạy :TOC lệnh, đây là danh sách nhanh chóng:

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| »» 小结 »» 

Tôi muốn định dạng các mục sửa chữa nhanh chóng như thế này:

|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| »» 小结 »» 

tôi không thể tìm thấy bất kỳ tùy chọn để làm điều đó. Nếu bạn biết, hãy cho tôi biết. Cảm ơn!

+0

BTW, (tốt đẹp và hữu ích) thực hiện của bạn bỏ qua các tiêu đề đầu tiên. (Trong ví dụ, '# 起步 #' bị thiếu.) Bạn cần thêm cờ 'c' cho 'tìm kiếm đầu tiên()': ... gọi con trỏ (1, 1) để cờ = 'cW' trong khi tìm kiếm ("^ #", cờ)> 0 để cờ = 'W' ... –

Trả lời

8

Không thể định cấu hình các vị trí quickfix được hiển thị như thế nào. Chỉ có thể là để chỉ định cách diễn giải chúng bằng tùy chọn errorformat. Tuy nhiên, người ta có thể sử dụng tính năng ẩn để ẩn tên tệp trong quickfix hoặc cửa sổ danh sách vị trí.

Các lệnh sau cho phép ẩn và xác định quy tắc cú pháp khớp với bất kỳ văn bản nào ở đầu dòng trước ký tự | đầu tiên.

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

Có thể kích hoạt các lệnh này cho mỗi cửa sổ danh sách nhanh hoặc cửa sổ danh sách vị trí bằng lệnh tự động. Tuy nhiên, nó không phải là một ý tưởng tốt nói chung, vì trong hầu hết các trường hợp hiển thị tên tập tin là một tính năng hữu ích. Vì vậy, trong trường hợp được trình bày trong câu hỏi, tốt hơn là chỉ thực hiện các tùy chỉnh này cho danh sách vị trí được thu thập mới . Nó yêu cầu mở cửa sổ danh sách vị trí trước tiên, .

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

Tên nhóm 'NonText' gợi ý liên kết đến nhóm đánh dấu cùng tên. Một tên tốt hơn, nhất quán hơn có thể là 'qfFile'. –

+0

@Ingo: Có thể, nhưng sử dụng tên nhóm đánh dấu tùy chỉnh yêu cầu lệnh bổ sung. Ngoài ra, nhóm tùy chỉnh này sẽ là giả, hiệu quả.Vì các thông số 'transparent' và' conceal' không được sử dụng, và không có đánh dấu để tùy chỉnh. –

+0

Bạn nói đúng, nhưng tôi không hiểu tại sao bạn lại cần một lệnh khác. Vì nhóm làm nổi bật không được sử dụng ở đây, bạn không cần phải xác định nhóm đó. –

1

tôi đã kết thúc thực hiện điều này trên plasticboy/vim-markdown trên this PR (with GIF animation) sử dụng set modifiable + thay thay vì che giấu với cái gì đó dọc:

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 

Nhưng bạn có thể thích:

Plugin 'plasticboy/vim-markdown' 

Đó là tùy thuộc vào bạn . =)

Ảnh chụp màn hình:

enter image description here

Các vấn đề liên quan