Soft Wrap mit 80 Zeichen in Vim in einem Fenster beliebiger Breite

126

Ich möchte die Soft-Wrap- Funktion ( :set wrap) von Vim verwenden , um Code mit 80 Zeichen zu umbrechen, unabhängig von meiner tatsächlichen Fensterbreite.

Ich habe noch keinen Weg gefunden, dies zu tun - die gesamte weiche Verpackung scheint an die Breite des Fensters gebunden zu sein

  • textwidthund wrapmarginsind beide für das harte Umbrechen (sie fügen Zeilenumbrüche in die Datei ein)
  • Die vertikale Aufteilung in mehrere Fenster und die Verwendung :vertical resize 80(möglicherweise mit :set breakat=, um Unterbrechungen für ein beliebiges Zeichen zuzulassen) für eine dieser Arbeiten (auch wenn dies etwas hackig ist), aber Unterbrechungen bei der Verwendung, :set numberda die Zeilennummern eine variable Anzahl von Spalten einnehmen (abhängig davon) auf die Dateilänge) und diese sind Teil der 80.

Gibt es eine Möglichkeit, dies in vim zu tun? Anderen Quellen zufolge sieht es nicht vielversprechend aus .

Im Moment ist meine Annäherung nur /^.\{80}\zs.\+meine Standardsuche, damit sie zumindest hervorgehoben wird. Ich habe darüber nachgedacht, ein :syntaxElement dafür hinzuzufügen , aber das ist kaputt gegangen, als es andere Syntaxelemente überlappte, also habe ich diese Idee fallen gelassen.

Rampion
quelle
Wie haben Sie eine Standardsuche eingerichtet?
Thethinman

Antworten:

37

Du könntest

  • Stellen Sie über :set numberwidth=6und eine große Mindestbreite für die Zeilennummernspalte ein
  • Dann können Sie die Größe Ihres Fensters mit :set columns=86(oder mit der Maus) auf die richtige Größe ändern .

Wenn Sie eine Datei mit einer Million Zeilen bearbeiten, haben Sie möglicherweise Probleme, aber das ist unwahrscheinlich. Auf diese Weise verschwenden Sie auch 6 Spalten Bildschirmfläche. Es gibt also immer noch alle möglichen Probleme.

Sie können nach der 80. Spalte hervorheben, indem Sie :matchwie hier und hier sagen .

Darüber hinaus sehe ich keinen Weg, dies zu tun. Scheint, als wäre es eine nette Funktion.

Brian Carper
quelle
Leider behält vim die Spalteneinstellung nicht bei, wenn die Fenstergröße geändert wird. Dies führt zu einer unglücklichen Situation bei Kachel-Fenstermanagern, in der es keine gute Möglichkeit gibt, 80 Spalten weich zu umbrechen, wenn das Fenster zu breit ist.
Gravitation
Das funktioniert, ist aber nicht klebrig. Ich denke, der nächste Schritt besteht darin, ein Autocmd einzurichten, um die Spalten auf der neuen gewünschten Größe für die gewünschten Dateitypen zu halten.
xer0x
1
Dies ist die richtige Antwort, da sie bestätigt, dass Sie es nicht tun können. Und ich bin sicher, dass ich nicht der einzige bin, der die Größe meines Terminalfensters nicht nur dafür ändern möchte. Ich möchte viel mehr Breite für Nicht-Vim-Anwendungen.
Sridhar Sarnobat
20

Versuche dies:

set columns=80
autocmd VimResized * if (&columns > 80) | set columns=80 | endif
set wrap
set linebreak
set showbreak=+++

Sie können die entfernen, if (&columns > 80) |wenn Sie immer 80 Spalten möchten.

eborisch
quelle
Auf meinem iTerm-Terminal wird dadurch das Fenster kleiner. Ich bin nicht sicher, ob dies ein Problem mit meiner Umgebung ist (ich sehe, dass Sie etwas mit automatischer Größenänderung tun), aber ansonsten ist dies nicht wünschenswert. Vielen Dank für den Vorschlag.
Sridhar Sarnobat
Das Autocmd hat bei mir perfekt funktioniert (mit Guake Terminal).
Mzcarlos
Funktioniert wie ein Zauber mit Tmux + NeoVim in Alacritty.
Meh
16

Ich habe keine Lösung für den Soft Wrap, aber beim Markieren einer Spalte wird ab Vim 7.3 (veröffentlicht am 15.08.2010) :set colorcolumn=80Spalte 80 hervorgehoben. Die Farbe hängt von Ihrer Syntaxdatei ab.

Siehe Bedenken hinsichtlich des Spaltenlayouts von Vim 80 , :h colorcolumn.

ftvs
quelle
Anführungszeichen sind keine gültige URL, daher ist dies sinnvoll. Der Name des Ankers sollte keine ungültigen URL-Zeichen enthalten. SO sollte also keine Fehler anderer Website-Entwickler beheben.
Schatten-Assistent ist Ohr für Sie
1
Der Schattenassistent bezieht sich auf eine frühere Überarbeitung meiner Antwort, in der ich mich frage, wie einfache Anführungszeichen mithilfe von Markdown in URLs eingefügt werden sollen. Dann schlug ib vor ,% 27 zu verwenden, was funktionierte. Danke, ib.
ftvs
Kürzlich entdeckt, wie man nur Spalten nach 80 ~:let w:eighty_column_match = matchadd('ColorColumn', '\%81v.\+', 100)
Rampion
Die colorwidthSache ist aus anderen Gründen hilfreich, deshalb bin ich froh, dass Sie dies gepostet haben.
Sridhar Sarnobat
2

Hast du es versucht 'linebreak'?

        *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
  'linebreak' 'lbr' boolean (default off)
        local to window
        {not in Vi}
        {not available when compiled without the  |+linebreak|
        feature}
If on Vim will wrap long lines at a character in 'breakat' rather
than at the last character that fits on the screen.  Unlike
'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
it only affects the way the file is displayed, not its contents.  The
value of 'showbreak' is used to put in front of wrapped lines.
This option is not used when the 'wrap' option is off or 'list' is on.
Note that <Tab> characters after an <EOL> are mostly not displayed
with the right amount of white space.
TK.
quelle
3
Hmm ... aber es breakatist nur ein Muster (keine Länge), also sehe ich nicht, wie ich dies verwenden könnte, um Soft Wrap bei 80 zu erzwingen ...
Rampion
Hmmm, ich frage mich, ob es möglich ist, einen regulären Ausdruck zu erstellen, der mit Wörtern übereinstimmt, deren Gesamtlänge (plus Leerzeichen dazwischen) kleiner oder gleich n Zeichen ist.
Shane Creighton-Young
@ ShaneCreighton-Young: ^.{,80}\bwürde für Leute tun, die weiche / erweiterte Tabs verwenden. Beachten Sie, dass dies Perl-Regex und nicht Vim-Regex ist.
Mark K Cowan
0

Es gibt keinen guten Weg, dies zu tun. Wir können eine Behelfslösung setlocal softwrapmit hacken, autocmdwenn wir die Antwort von @eborisch ändern. Wenn wir die Größe jedes Mal ändern, wenn wir einen Puffer eingeben, und die Größe der lokalen Variablen auf eine bestimmte Länge ändernsoftwrap festgelegt wird, erhalten wir das gewünschte Verhalten.

Nehmen wir an, wir möchten 80 Spalten weich umbrechen. Wir können Folgendes einschreiben .vimrc.

augroup softwrap
    autocmd VimResized * if (exists('b:softwrap') && &columns > 80) | set columns=80 | endif
    autocmd BufEnter * set columns=999
augroup END

Verwenden Sie die folgenden Befehle, um den Modus für einen bestimmten Puffer zu aktivieren:

let b:softwrap=1
set columns=80
Durum
quelle
Dies verwandelt meine Dateien nur in Kauderwelsch.
Suuuehgi