任意の幅のウィンドウでVimの80文字をソフトラップ


126

Vimのソフトラップ機能(:set wrap)を使用して、実際のウィンドウ幅に関係なく、一部のコードを80文字でラップします。

私はまだこれを行う方法を見つけることができませんでした-すべてのソフトラッピングはウィンドウの幅に関連付けられているようです

  • textwidthそしてwrapmarginハードラッピングの両方にある(彼らはファイルに改行文字を挿入)
  • 複数のウィンドウに垂直分割し、:vertical resize 80(おそらく:set breakat=少しハックですが)それらの一種の作品で(おそらく任意の文字で改行を許可するために)を使用:set numberしますが、行番号が可変数の列を占めるために使用すると改行します(依存します)ファイルの長さについて)、これらは80の一部です。

これをvimで行う方法はありますか? 他の情報筋によると、それは有望ではないようです

今のところ、私の近似値は/^.\{80}\zs.\+デフォルトの検索として使用するだけなので、少なくとも強調表示されます。:syntaxそのためのアイテムを追加することを考えましたが、他の構文アイテムと重なると壊れてしまいました。


実際、デフォルトの検索をどのように設定しましたか?
thethinman、

回答:


37

あなたは出来る

  • 介して行番号列の大きい最小幅を設定:set numberwidth=6し、
  • 次に、ウィンドウを:set columns=86(またはマウスを使用して)適切なサイズにサイズ変更できます。

100万行を含むファイルを編集すると、問題が発生する可能性がありますが、それはほとんどありません。この方法でも、画面の6列の領域が無駄になります。ですから、いまだにいろいろな問題があります。

ここここにある:matchように、80列目以降を強調表示できます

それを超えて、私はこれを行う方法を見ることができません。でもそれはいい機能だと思う。


残念ながら、ウィンドウのサイズが変更された場合、vimは列の設定を保持しません。これは、ウィンドウが広すぎる場合に80列にソフトラップする適切な方法がないタイリングウィンドウマネージャーでの不幸な状況につながります。
重力

これは機能しますが、粘着性はありません。次のステップは、autocmdをセットアップして、必要なファイルタイプの新しい希望のサイズで列を維持することだと思います。
xer0x 2015年

1
これはあなたがそれをすることができないことを確認するという点で正しい答えです。そして、このためだけにターミナルウィンドウのサイズを変更したくないのは、私だけではありません。vim以外で使用する場合はもっと幅を広げたいです。
Sridhar Sarnobat

20

これを試して:

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

常に 80列にするif (&columns > 80) |場合は、を削除できます。


私のiTerm端末では、これによりウィンドウが小さくなります。それが私の環境の問題かどうかはわかりませんが(自動サイズ変更で何かを実行しているようです)、それ以外の場合は望ましくありません。しかし提案をありがとう。
Sridhar Sarnobat

autocmdは(guakeターミナルを使用して)完全に動作しました。
mzcarlos

AlacrittyのTmux + NeoVimでチャームのように動作します。
メー

16

ソフトラップの解決策はありませんが、列のマーク付けについては、Vim 7.3(2010-08-15リリース)以降、:set colorcolumn=80列80が強調表示されます。色は構文ファイルによって異なります。

参照してくださいVimの80列レイアウトの懸念を:h colorcolumn


引用符は有効なURLではないため、意味があります。アンカー名に無効なURL文字を含めないでください。SOは他のサイト開発者のエラーを修正するべきではありません。
シャドウウィザードはあなたのための耳です

1
Shadow Wizardは私の回答の以前のリビジョンを参照しており、Markdownを使用してURLに単一引用符を配置する方法について疑問に思っています。次に、ibは%27の使用を提案しましたが、うまくいきました。ありがとう、ib。
ftvs

最近だけで80〜過ぎて列を強調表示する方法を発見:let w:eighty_column_match = matchadd('ColorColumn', '\%81v.\+', 100)
ホタルブクロ

colorwidth私はあなたがこの投稿をうれしいようなことは、他の理由のために有用です。
Sridhar Sarnobat

2

試しました'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.

3
うーん...しかし、breakatただパターン(長さではありません)ので、私は私が80でソフトなラップを強制的にこれを使用する可能性がどのように表示されていない....
ホタルブクロ

うーん、全長(とその間の空白)がn文字以下の単語に一致する正規表現を作成することは可能でしょうか。
シェーンクレイトンヤング2014

@ ShaneCreighton-Young:^.{,80}\bソフト/エキスパンドタブを使用する人のために行います。これはvim正規表現ではなく、perl正規表現です。
Mark K Cowan

0

それを行う良い方法はありません。私たちは、その場しのぎをハックすることができsetlocal softwrapautocmd、我々は@eborisch答えを変更した場合。バッファに入るたびにサイズを変更し、ローカル変数softwrapが設定されているときに特定の長さにサイズ変更すると、目的の動作が得られます。

80カラムにソフトラップする場合を考えてみましょう.vimrc。次のように記述できます。

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

特定のバッファのモードをオンにするには、次のコマンドを使用します。

let b:softwrap=1
set columns=80

これは私のファイルを意味不明なものに変換するだけです。
スウェギ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.