Stellen Sie Vim so ein, dass eine Linie am Rand der festgelegten Textbreite angezeigt wird

26

Die meisten Texteditoren und IDEs, die ich heutzutage verwende, verfügen über eine Funktion, mit der sie eine Zeile mit einer bestimmten Zeichenlänge im Textpuffer anzeigen können. Dies ist nützlich, wenn Sie Zeilen in einer Datei mit einer bestimmten Länge behalten möchten.

Gibt es eine Möglichkeit, Vim dazu zu bewegen, vorzugsweise den bereits definierten textwidthWert zu verwenden? Die Zeilen werden an diesem Punkt automatisch umgebrochen, aber ich möchte wirklich sehen können, wo es sich ebenfalls befindet.

Falls es darauf ankommt, verwende ich hauptsächlich gVim unter Windows, aber ich würde es lieben, wenn die Lösung für alle Vim-Versionen funktioniert.

Herms
quelle

Antworten:

41

Verwenden Sie für (g) vim Folgendes:

set colorcolumn=80

oder welche Breite Sie wünschen. Funktioniert sowohl in vim als auch in gvim. Ich habe meine innerhalb einer IF, also ist es abhängig davon, welche Art von Dateien ich bearbeite.

Sie können auch ein + x / -x verwenden, um die Basisposition der Spalte +/- von & Textbreite festzulegen.

set textwidth=80
set colorcolumn=-2

würde den farbigen Balken effektiv an der Zeichenposition 78 zeichnen. Natürlich können Sie die Textbreite selbst festlegen oder nicht, daher kann sie 0 sein (Standard). Ich benutze die absolute Positionsform.

Sie können auch die verwendete Farbe ändern, wenn Sie möchten:

highlight ColorColumn ctermbg=green guibg=orange

(Ich empfehle jedoch DIESE Farben nicht)

Diese Option wurde in (g) vim 7.3 hinzugefügt.

Lornix
quelle
In welcher Version von Vim wird dies unterstützt? In gvim 7.2 funktioniert es nicht.
Herms
Ich laufe 7.3. Ich habe gerade den Quellcode gezogen und nachgesehen, dieser Befehl wurde in 7.3 eingeführt.
Lornix
Funktioniert bei mir unter Ubuntu 12.04 mit vim 7.3. gvim 7.3 für Windows ist seit mindestens Oktober 2010 verfügbar. @Herms können Sie dies zur Antwort machen?
Poindexter
Es wäre schön, wenn dies funktionieren würde, wenn mehrere Fenster nebeneinander verwendet würden. Mein Monitor ist breit genug, um mehrere Fenster in einer Reihe mit jeweils mehr als 80 Zeichen anzuzeigen, aber colorColumn funktioniert nur im ersten Fenster (ganz links).
Eno
3

Bei Google Code gibt es einen Ausschnitt, den Sie ausprobieren können:

augroup vimrc_autocmds
au!
    autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929 
    autocmd BufRead * match OverLength /\%81v.*/
augroup END
mcandre
quelle
Hmm, dieser Thread legt nahe, dass Windows 'GVIM es bereits unterstützt, aber ich kann nicht herausfinden, wie man es einschaltet.
Herms
Weiter unten im Thread können Sie Code zu Ihrer gvimrc-Datei hinzufügen.
EBGreen
Scheint so, als würde nur der Hintergrund für Zeichen geändert, die über diese Zeile hinausgehen. Ich hätte lieber eine immer sichtbare Anleitung wie andere Redakteure.
Herms
Aufgrund der Beschaffenheit der Benutzeroberfläche bin ich mir nicht sicher, dass dies derzeit möglich ist.
EBGreen,
Dies passt sich nicht an die in der Frage angeforderte Textbreite an.
Steven Roose
2

Per StackOverflow-Antwort :

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.*/

Passen Sie es an Ihren Geschmack an.

jtimberman
quelle
Hm, nicht ganz das, wonach ich suche (wird nur angezeigt, wenn Zeichen über die Linie hinausgehen), aber es ist besser als nichts.
Herms
Dies passt sich nicht an die in der Frage angeforderte Textbreite an.
Steven Roose
1

Ich mag die Antwort von lornix sehr, aber ich möchte die Spalte nicht ständig hervorheben , nur wenn mindestens eine Zeile die maximale Länge überschreitet:

Spalte wird angezeigt, wenn die Zeilen zu lang sind

So mache ich das für meine Haskell-Dateien:

augroup HaskellCommands
autocmd!
  " When a Haskell file is read or the text changes in normal or insert mode,
  " draw a column marking the maximum line length if a line exceeds this length
  autocmd BufRead,TextChanged,TextChangedI *.hs call ShowColumnIfLineTooLong(80)
augroup END

" Color the column marking the lengthLimit when the longest line in the file
" exceeds the lengthLimit
function! ShowColumnIfLineTooLong(lengthLimit)
  " See /programming/2075276/longest-line-in-vim#2982789
  let maxLineLength = max(map(getline(1,'$'), 'len(v:val)'))

  if maxLineLength > a:lengthLimit
    highlight ColorColumn ctermbg=red guibg=red
    " Draw the vertical line at the first letter that exceeds the limit
    execute "set colorcolumn=" . (a:lengthLimit + 1)
  else
    set colorcolumn=""
  endif
endfunction
Matthias Braun
quelle
0

Dies wurde oft auf #vim und in einigen Foren diskutiert. Aus heutiger Sicht ist dies nicht möglich. Die erwähnte Lösung ist also Ihre einzige Option, afaik.

Die Sache ist, dass vim mit Stellen, an denen sich Zeichen befinden (Buchstaben, Zahlen oder einfache Leerzeichen), alles machen kann. Aber es kann keinen Hintergrund in einer anderen Farbe malen (wie Sie möchten), wenn dort nichts ist. Und bevor Sie etwas eingeben, gibt es dort nichts, sodass keine Linie / kein Rand gezeichnet werden kann.

Turm
quelle