2017-02-16 3 views
1

Angenommen, ich möchte ein Plugin implementieren, das eine Margin-Linie bei 80 Spalten mit benutzerdefinierten Zeichen zeichnet (angenommen, ich möchte die Zeile aus einer Spalte von * Zeichen).In Vim/NeoVim, wie man innerhalb des Textpuffers zeichnet, ohne Inhalt zu ändern

Wie kann das in Vim oder Neovim getan werden?

Aber generischer, gibt es eine Möglichkeit, Sachen über den Textpuffer zu zeichnen, ohne den Textinhalt zu beeinflussen?

Zum Beispiel, wie kann ich ein inneres Rechteck innerhalb eines Fensters zeichnen, das ich hell färben kann, um das aktive Fenster zu zeigen? Der Effekt wäre, dass die erste Zeile der sichtbaren Zeile des aktuellen Textpuffers mit --- Zeichen gefüllt wäre, die rechte Spalte des aktuellen Textpuffers würde mit | gefüllt werden. Dies wäre innerhalb des Fensters, getrennt von den Statuslinien oder vertikalen Trennlinien.

Etc. Wie so etwas zu tun?

Einige Plugins, die derzeit den Textpuffer auf verschiedene Weise ziehen über:

+0

Funktioniert 'colorcolumn = 80'' stattdessen? Siehe ': h 'cc'' –

Antwort

2

Easymotion nicht den Text ziehen, ich glaube nicht, dies möglich ist, . Was sie tut, ist in folgende Funktion (sourcecode) definiert:

function! EasyMotion#helper#VarReset(var, ...) "{{{ 
if ! exists('s:var_reset') 
    let s:var_reset = {} 
endif 

if a:0 == 0 && has_key(s:var_reset, a:var) 
    " Reset var to original value 
    " setbufvar(or bufname): '' or '%' can be used for the current buffer 
    call setbufvar('%', a:var, s:var_reset[a:var]) 
elseif a:0 == 1 
    " Save original value and set new var value 

    let new_value = a:0 == 1 ? a:1 : '' 

    " Store original value 
    let s:var_reset[a:var] = getbufvar("", a:var) 

    " Set new var value 
    call setbufvar('%', a:var, new_value) 
endif 
endfunction "}}} 

So spart es jede ersetzt Zeichen und stellt sie wieder her danach. Ich habe nicht auf indentLine geschaut, aber es macht wahrscheinlich intelligente listchars, da es nie Text unter dem indentchar gibt.

Jedenfalls ist es nicht so, als ob ich ein Experte für eines der Plugins oder vim im Allgemeinen bin. Ich schreibe diese Antwort, weil ich denke, dass es leichter ist, das zu erreichen, was Sie wollen. Sie könnten beispielsweise die Begrenzungslinien mit einer bestimmten Farbe markieren oder den Hintergrund für die aktive Teilung ändern. Es gibt auch ein Plugin zum Dimmen von inaktiven Splits: https://github.com/blueyed/vim-diminactive

+0

Ich denke, ich mag Vim, aber ich wünschte, es wäre irgendwie moderner mit GUI-Zeichnungsfähigkeiten. Vielleicht haben wir das in etwa 20 Jahren. – trusktr

+0

Ich mag die ablenkungsfreie Erscheinung von vim. Ich denke, die meiste Zeit wünsche ich mir GUI-Fähigkeiten, weil ich vim falsch benutze (ich will nicht sagen, dass das in Ihrer Frage der Fall ist), und es braucht viel Zeit, um sich daran zu gewöhnen und ich habe noch einen langen Weg zu gehen =). Aber ein Teil des Grundes ist, dass wir so viele Text-Editoren gewohnt sind, die Dinge "falsch/nicht vim" machen. Wenn wir mit vim angefangen hätten, wäre das vollkommen in Ordnung. –

+0

Das stimmt, aber es gibt grundlegende UI-Stile, die eine textbasierte UI einfach nicht erreichen kann. In einer GUI ist es sehr einfach, nützliche Dinge wie Einrückungshilfen (die vim-Plugins sind Hacks, die nicht gut funktionieren), Minimaps mit nützlichen Farben und Symbolen und andere Dinge, die in einer textbasierten Benutzeroberfläche nicht möglich sind, zu zeichnen , und das ist nicht unbedingt ein Mangel, wie man Vim benutzt. Selbst wenn man ein Meister von Vim ist, könnte etwas wie eine Minikarte für diejenigen, die sehr visuell sind, immer noch nützlich sein. – trusktr

Verwandte Themen