Bởi vì tôi tò mò việc này sẽ hoạt động tốt như thế nào, tôi đã hack một thứ gì đó cùng loại đó.
Như đã đề cập trong các ý kiến về câu trả lời trước đó, cách duy nhất để làm điều này là lấp đầy các vùng bằng khoảng trắng; đó chính xác là những gì chúng ta làm; trước khi viết, chúng tôi xóa các khoảng trắng này, vì vậy bạn không nên làm phiền bất kỳ ai khác với nó.
Lưu ý rằng ví dụ này rất cụ thể cho kiểu đánh dấu!
Tác dụng phụ :
- Sao chép văn bản cũng sẽ sao chép rất nhiều khoảng trắng
- Sử dụng $và Endkhông còn hoạt động như mong đợi (nó đi đến cột 80) và các phím như
jvà kcũng hoạt động khác nhau.
- Nền không được hiển thị khi
'list'
được bật
- Các dòng trống hoàn toàn không hoạt động, bạn cần thêm thủ công một tab hoặc 4 khoảng trắng
- ... Có lẽ nhiều hơn?
Trước tiên, bạn cần thêm phần này vào ~/.vim/after/syntax/markdown.vim
:
syn clear markdownCodeBlock
syn region markdownCodeBlock start=" \|\t" end="$"
hi def markdownCodeBlock ctermbg=230 guibg=lightyellow
Tất nhiên, bạn có thể điều chỉnh màu sắc theo ý thích của mình ;-)
Sau đó, thêm phần này vào vimrc của bạn:
fun! MarkdownBlocks()
fun! s:fill(line)
" Remove all trailing whitespace
let l:line = substitute(a:line, " *$", "", "")
" Add trailing whitespace up to 'textwidth' length
return l:line . repeat(' ', (&tw > 0 ? &tw : 80) - strdisplaywidth(l:line))
endfun
" Get all lines in a list
let l:lines = getline(1, line('$'))
" Map s:fill() to the lines that are a code block
call map(l:lines, 'v:val[0] == "\t" || v:val[:3] == " " ? s:fill(v:val) : v:val')
" Reset the buffer to the lines
call setline(1, l:lines)
endfun
" Remove all the trailing spaces
fun! MarkdownBlocksClean()
let l:save_cursor = getpos(".")
silent %s/^\( \|\t\)\(.\{-}\)\( *\)$/\1\2/e
call setpos('.', l:save_cursor)
endfun
au BufWritePre *.markdown call MarkdownBlocksClean()
" Set spaces on loading the file, leaving insert mode, and after writing it
au FileType markdown call MarkdownBlocks()
au InsertLeave *.markdown call MarkdownBlocks()
au BufWritePost *.markdown call MarkdownBlocks()
Tôi sẽ không giải thích từng dòng mã, các ý kiến sẽ làm cho ý chính chung của nó rõ ràng ;-)