web-dev-qa-db-ja.com

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

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

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

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

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

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

118
rampion

あなたは出来る

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

100万行のファイルを編集する場合、問題が発生する可能性がありますが、それはほとんどありません。この方法でも、6列の画面領域を無駄にします。そのため、まだあらゆる種類の問題があります。

here および here のように、:matchを使用して80番目の列を超えて強調表示できます。

それを超えると、これを行う方法がわかりません。しかし、それはニースの機能になるようです。

35
Brian Carper

これを試して:

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

always 80列が必要な場合は、if (&columns > 80) |を削除できます。

17
eborisch

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

Vim 80の列レイアウトの問題:h colorcolumn

16
ftvs

やってみました '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.
2
TK.

それを行う良い方法はありません。 @eborischの回答を変更すると、その場しのぎのsetlocal softwrapautocmdでハックできます。バッファに入るたびにサイズを変更し、ローカル変数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
1
durum