เพราะฉันสงสัยว่ามันจะทำงานได้ดีแค่ไหนฉันจึงแฮกบางอย่างเข้าด้วยกัน
ดังที่ได้กล่าวไว้ในความคิดเห็นเกี่ยวกับคำตอบก่อนหน้านี้วิธีเดียวที่จะทำเช่นนี้คือการเติมภูมิภาคที่มีช่องว่าง ซึ่งเป็นสิ่งที่เราทำ ก่อนที่จะเขียนเราจะลบช่องว่างเหล่านี้ดังนั้นคุณไม่ควรรบกวนใครด้วย
โปรดทราบว่าตัวอย่างนี้เฉพาะเจาะจงมากสำหรับไฟล์ประเภท markdown!
ผลข้างเคียง :
- การคัดลอกข้อความจะเป็นการคัดลอกช่องว่างจำนวนมาก
- การใช้$และEndไม่ทำงานตามที่คาดไว้ (ไปที่คอลัมน์ 80) และปุ่มต่างๆเช่น
jและkยังทำงานแตกต่างกัน
- พื้นหลังไม่ปรากฏเมื่อ
'list'
เปิดใช้งาน
- บรรทัดว่างเปล่าไม่ทำงานคุณต้องเพิ่มแท็บหรือช่องว่าง 4 ด้วยตนเอง
- ... อาจจะมากกว่านี้?
ก่อนอื่นคุณต้องเพิ่มสิ่งนี้ใน~/.vim/after/syntax/markdown.vim
:
syn clear markdownCodeBlock
syn region markdownCodeBlock start=" \|\t" end="$"
hi def markdownCodeBlock ctermbg=230 guibg=lightyellow
คุณสามารถปรับสีตามที่คุณต้องการแน่นอน ;-)
จากนั้นเพิ่มไปยัง vimrc ของคุณ:
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()
ฉันจะไม่อธิบายรหัสทีละบรรทัดความคิดเห็นควรให้ความสำคัญกับมันชัดเจน ;-)