Das aktive Fenster in vim deutlicher machen

22

Mein Arbeitsbereich besteht normalerweise aus einem sehr großen xterm mit vim, das in sechs oder mehr Puffer aufgeteilt ist. Es wäre sehr hilfreich, wenn klar wäre, welcher der aktive Puffer ist. Im Moment benutze ich das Vorhandensein von Zeilennummern dafür:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set number
    autocmd WinLeave * set nonumber
augroup END

Dies bedeutet jedoch, dass mein Code beim Wechseln der Puffer nach links oder rechts springt, was ärgerlich ist. Außerdem möchte ich in der Lage sein zu sehen, welche Zeile 94 auch in einem inaktiven Puffer ist. Gibt es also eine Möglichkeit, die Farben der Zeilennummern im aktiven Puffer zu ändern?

DrHyde
quelle

Antworten:

26

Im Anschluss an Ihre Vorlage können Sie verschiedene Eigenschaften variieren, z. B. Farbspalte:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set colorcolumn=80
    autocmd WinLeave * set colorcolumn=0
augroup END

Dies färbt Spalte 80 in Ihrem aktuellen Fenster, während es in den anderen deaktiviert wird. Es ist ein bisschen weniger verwirrend als das Setzen / Löschen von Zeilennummern.

Eine noch weniger aufdringliche Option, wenn Sie es gewohnt sind, die aktuelle Zeile hervorzuheben (set cul), ist Folgendes:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set cul
    autocmd WinLeave * set nocul
augroup END

Es hängt alles von Ihrer Nutzung ab und davon, was Sie sich gefallen lassen möchten.

fgb
quelle
11

Die Farbe der Statuszeile ist die üblichste Methode, um festzustellen, welches Fenster aktiv ist. Es wird in Ihrem Farbschema mit diesen beiden Zeilen definiert:

hi StatusLine   ctermfg=15  guifg=#ffffff ctermbg=239 guibg=#4e4e4e cterm=bold gui=bold
hi StatusLineNC ctermfg=249 guifg=#b2b2b2 ctermbg=237 guibg=#3a3a3a cterm=none gui=none

Das erste ist für das aktuelle Fenster, das zweite ist für das "nicht aktuelle" Fenster.

Dies ist ein Auszug aus xoria256 , Sie sollten die Farben an Ihr Farbschema anpassen.

Aber Sie könnten so etwas versuchen (Vorsicht, die Farben in der zweiten Zeile sind völlig zufällig):

augroup NrHighlight
  autocmd!
  autocmd WinEnter * hi LineNr ctermfg=247 guifg=#9e9e9e ctermbg=233 guibg=#121212
  autocmd WinLeave * hi LineNr ctermfg=274 guifg=#e9e9e9 ctermbg=133 guibg=#212121
augroup END
romainl
quelle
Ich habe bereits versucht, die LineNr-Hervorhebung in WinEnter / WinLeave zu ändern, aber es scheint, dass die LineNr-Färbung global ist.
DrHyde
Ja, und ich musste Ihren Kommentar abwarten, um mich daran zu erinnern. Also, nein, wenn LineNr global ist, gibt es offensichtlich keine Möglichkeit, es in einem bestimmten Fenster zu ändern. Denken Sie nicht, dass die Statuszeile ausreicht?
Romainl
Ich fragte mich, ob es eine andere Pro-Window-Version von LineNr geben könnte. Und nein, ich denke nicht, dass die Statuszeile ausreicht. Es hilft, aber ich hätte gerne mehr. Ein Problem bei der Verwendung der Statuszeile besteht darin, dass die Anzeige des aktiven Fensters am unteren Rand des Fensters genau das Gegenteil von dem ist, was wir sonst überall haben - eine Titelleiste am oberen Rand eines Fensters, deren Farbe sich ändert -, sodass es einen Moment gibt pause um zu denken "oh yeah, vim macht das andersherum". Während Zeilennummern in jeder Anwendung immer an derselben Stelle stehen.
DrHyde
Ich würde es wirklich mögen, wenn Sie die Hintergrundfarbe des Fensters ändern könnten, aber es klingt so, als ob dies von oben nicht möglich wäre.
Jonathan Hartley
Verwenden hi StatusLine...und hi StatusLineNC...funktioniert wie ein Zauber!
Luc M
2

Das ist was ich mache:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set relativenumber
    autocmd WinLeave * set norelativenumber
augroup END

Relative Zahlen sind nur eine Hilfe zur Berechnung der Wiederholungsanzahl von Befehlen. Sie werden in einem Fenster, das Sie nicht bearbeiten, nicht verwendet.

Saga
quelle
1

Sie können dies zu Ihrer hinzufügen. Dadurch ~/.vimrcwerden die Statusleisten der inaktiven Fenster dunkelgrau hinterlegt, um sich von der weißen Statusleiste des aktiven Fensters zu unterscheiden.

highlight StatusLineNC cterm=bold ctermfg=white ctermbg=darkgray

Siehe dieses Screenshot-Beispiel. Das mittlere Fenster ist aktiv (weiße Statusleiste). Das linke und rechte Fenster sind inaktiv (dunkelgraue Statusleiste).

Bildbeschreibung hier eingeben

weises Glück
quelle