Ich weiß nicht, wie ich genau das erreichen soll, was Sie wollen, nur einen Teil.
Sie möchten ~/.vimrc
beispielsweise Text darin ausblenden .
Zuerst müssen wir wissen, welche Markierungsgruppe den Text verarbeitet, den Sie ausblenden möchten. Fügen Sie diese Zuordnung zu Ihrem hinzu ~/.vimrc
:
map <F10> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<'
\ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<"
\ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>
Ich habe es von hier genommen .
Setzen Sie als Nächstes den Cursor auf einen Text, den Sie ausblenden möchten, z. B. einen Kommentar. Dann schlagen F10
.
Der Name der Markierungsgruppe sollte in der Befehlszeile angezeigt werden.
Auf meinem System lautet die Ausgabe:
hi<vimLineComment> trans<vimLineComment> lo<Comment>
Ich denke, es bedeutet, dass die Highlight-Gruppe für vim-Kommentare ist vimLineComment
und dass sie mit verknüpft ist Comment
. Wir möchten also den Text ausblenden, der von der Markierungsgruppe vimLineComment
(oder Comment
) verarbeitet wird.
Um dies zu erreichen, könnten wir die in vim 7.3 ( :help conceal
) hinzugefügte Funktion zum Verbergen verwenden .
:syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
Diese Zeile weist vim an, Text zu suchen, dessen Markierungsgruppe ist vimLineComment
und der mit dem regulären Ausdruck ^\".*
(einem Anfang einer Zeile ( ^
), gefolgt von einem doppelten Anführungszeichen ( \"
) gefolgt von einem beliebigen Text ( .*
)) übereinstimmt, und ihn überall dort auszublenden und zu ersetzen, wo er gefunden wird ( containedin=ALL
) mit dem Zeichen >
( cchar=>
).
Das conceal
Syntaxattribut verbirgt den gewünschten Text, es sei denn, der Cursor befindet sich darauf.
Als nächstes weisen wir vim an, den Text vollständig auszublenden, es sei denn, es ist ein benutzerdefiniertes Ersatzzeichen definiert:
:set conceallevel=2
Für diese Option gibt es 4 mögliche Werte mit 4 verschiedenen Effekten (siehe :help conceallevel
).
Da wir diese Befehle nicht jedes Mal eingeben möchten, fügen wir einen automatischen Befehl in unser ~/.vimrc
:
augroup hide_text
autocmd!
autocmd FileType vim :set conceallevel=2 | :syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
augroup END
Schließlich fügen wir eine Zuordnung hinzu, um den Wert der conceallevel
Option umzuschalten (zwischen 2 und 0; 2 = ausgeblendet, 0 = angezeigt):
nnoremap <leader>h :<c-u>if (&conceallevel==2) \| set conceallevel=0 \| else \| set conceallevel=2 \| endif<cr>
Das Ergebnis ist, dass der Text beim Drücken angezeigt / ausgeblendet werden sollte <leader>h
.
Sie können auch die Farbe des Ersatzzeichens ändern:
highlight Conceal ctermfg=<code color> guifg=#<code color>
Und Sie können wählen, in welchem Modus ein Kommentar angezeigt wird. Wenn Sie beispielsweise möchten, dass es nur angezeigt wird, wenn Sie sich im Einfügemodus in der Zeile befinden:
setlocal concealcursor=ncv
Ich weiß jedoch nicht, wie ich all diese versteckten Linien reduzieren soll, wie es die Faltfunktion tut, sorry.
Bearbeiten : eine andere mögliche Lösung.
Sie behalten Ihre Falteinstellungen bei, um die Linien zu reduzieren, die Sie nicht sehen möchten, und Sie verbergen die Titel der Falten, damit Sie nicht abgelenkt werden.
function! FoldingTitle()
if (v:foldlevel>1)
let line = repeat(' ', &sw * (v:foldlevel-1)).'>'
else
let line = '|'
endif
return line
endfunction
set foldtext=FoldingTitle()
set fillchars+=fold:\
set foldcolumn=3 " optional
highlight FoldColumn ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color> "optional
highlight Folded ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color> "optional
In diesem Code passen wir den Titel der Falten an, indem wir FoldingTitle()
der foldtext
Option den Wert geben . Dies bedeutet, dass wir ändern können, wie eine Falte durch diese Funktion aussehen wird.
Gibt FoldingTitle()
nur ein Symbol zurück, damit Sie wissen, dass es eine Falte gibt ( >
vor einigen wiederholten Leerzeichen oder |
abhängig von der Faltebene).
Dann definieren wir das Leerzeichen als das Zeichen, mit dem der leere Raum in den Zeilen gefüllt wird:
set fillchars+=fold:\
Vergessen Sie nicht den Platz nach dem Backslash.
Schließlich definieren wir eine Spalte (deren Breite 3 beträgt), die an der Seite des Fensters angezeigt wird und offene und geschlossene Falten anzeigt. Wir passen auch die Farbe der Faltsäule sowie die Farbe der Titel der Falten an. Jede dieser 3 Zeilen ist optional.
set foldcolumn=3 " optional
highlight FoldColumn ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color>
highlight Folded ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color>