Weil ich neugierig war, wie gut das funktionieren würde, habe ich so etwas zusammen gehackt.
Wie in den Kommentaren zur früheren Antwort erwähnt, besteht die einzige Möglichkeit darin, Regionen mit Leerzeichen zu füllen. was ist genau das, was wir tun; Bevor Sie schreiben, entfernen wir diese Leerzeichen, sodass Sie niemanden damit belästigen sollten.
Beachten Sie, dass dieses Beispiel sehr spezifisch für den Abschriften-Dateityp ist!
Nebenwirkungen :
- Beim Kopieren von Text werden auch viele Leerzeichen kopiert
- Die Verwendung von $und Endfunktioniert nicht mehr wie erwartet (siehe Spalte 80), und Tasten wie
jund kverhalten sich ebenfalls anders.
- Der Hintergrund wird nicht angezeigt, wenn
'list'
aktiviert ist
- Völlig leere Zeilen funktionieren nicht, Sie müssen manuell einen Tabulator oder 4 Leerzeichen hinzufügen
- ... vielleicht mehr?
Zuerst müssen Sie dies zu Ihrem hinzufügen ~/.vim/after/syntax/markdown.vim
:
syn clear markdownCodeBlock
syn region markdownCodeBlock start=" \|\t" end="$"
hi def markdownCodeBlock ctermbg=230 guibg=lightyellow
Sie können die Farben natürlich nach Ihren Wünschen anpassen ;-)
Dann fügen Sie dies zu Ihrem vimrc hinzu:
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()
Ich werde den Code nicht Zeile für Zeile erklären, die Kommentare sollten den allgemeinen Kern klarstellen ;-)