wake-up-neo.net

Weiche Umbruch bei 80 Zeichen in Vim in einem Fenster mit beliebiger Breite

Ich möchte die soft wrap - Fähigkeit (:set wrap) von Vim verwenden, um einen Code mit 80 Zeichen unabhängig von meiner tatsächlichen Fensterbreite einzugeben.

Ich habe noch keinen Weg gefunden, das zu tun - all die weiche Umhüllung scheint an die Breite des Fensters gebunden zu sein

  • textwidth und wrapmargin sind beide für harte Umbrüche (sie fügen Zeilenumbrüche in die Datei ein)
  • vertikale Aufteilung in mehrere Fenster und Verwendung von :vertical resize 80 (möglicherweise mit :set breakat=, um Unterbrechungen für beliebige Zeichen zuzulassen) für eine dieser Arbeiten (auch wenn es etwas hackig ist), bricht jedoch ab, wenn :set number verwendet wird, da die Zeilennummern eine variable Anzahl von Spalten (abhängig von der Dateilänge) und diese sind Teil der 80.

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

Im Moment ist meine Annäherung nur /^.\{80}\zs.\+ als meine Standard-Suche, also wird sie zumindest hervorgehoben. Ich dachte darüber nach, ein :syntax-Element für dieses Objekt hinzuzufügen, das jedoch brach, als es mit anderen Syntaxelementen überlappte, und ließ diese Idee fallen.

112
rampion

Du könntest 

  • stellen Sie über :set numberwidth=6 und 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. Sie verschwenden auch auf diese Weise 6 Spalten an Bildschirmimmobilien. Es gibt also immer noch alle möglichen Probleme.

Sie können mit :match hinter der 80. Spalte hervorheben, wie hier und hier .

Darüber hinaus sehe ich keine Möglichkeit, dies zu tun. Scheint, als wäre es ein schönes Feature.

34
Brian Carper

Ich habe keine Lösung für den Soft-Wrap, aber zum Markieren einer Spalte wird ab Vim 7.3 (veröffentlicht 2010-08-15-15) :set colorcolumn=80 Spalte 80 hervorheben. Die Farbe hängt von Ihrer Syntaxdatei ab.

Siehe Vim 80 Spaltenlayout betrifft , :h colorcolumn .

16
ftvs

Versuche dies:

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

Sie können das if (&columns > 80) | entfernen, wenn Sie always 80 Spalten haben möchten.

13
eborisch

Haben Sie 'linebreak' ausprobiert?

        *'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.
1
TK.

Es gibt keine gute Möglichkeit, dies zu tun. Wir können einen setlocal softwrap mit autocmd hacken, wenn wir die @eborisch-Antwort ändern. Wenn wir die Größe jedes Mal ändern, wenn wir einen Puffer eingeben, und wenn die lokale Variable softwrap gesetzt ist, die Größe auf eine bestimmte Länge ändern, erhalten wir das gewünschte Verhalten. 

Nehmen wir an, wir wollen auf 80 Spalten weich umbrechen, wir können Folgendes in .vimrc schreiben.

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
0
durum