Vim 80の列レイアウトの問題


417

Vimで80桁の表示を行う方法は正しくないようですset columns=80。時々私もset textwidthですが、set columns代替行で行のオーバーフローを確認して予測できるようにしたいと考えています。

これにはいくつかの残念な副作用があります:

  1. set number行番号の順序が異なるファイル間で分割することを恐れることはできません。つまり、<100行のファイルと> = 100行のファイルにはset columns、追加の桁表示に使用される追加の列があるため、2つの異なる値が必要になります。
  2. また、ウィンドウを縦に分割する代わりに、新しい(g)Vimセッションを開始します。これは、ペインを開いたり閉じたりvsplitするset columnsたびに強制されるため、新しいセッションを開始するのに手間がかかりません。

set numbers垂直方向に分割する場合など、80文字の表示をどのように処理しますか?


60
多くのサークルで優れたコードスタイルと見なされています。たとえば、Pythonのスタイルガイド(PEP8)では79文字の行を推奨しています:python.org/dev/peps/pep-0008
cdleary

4
これは絶対的な「80文字の行が必要」ではありませんが、たとえば、サイズ変更可能なGUIコンソールウィンドウ内で実行されていないコンソールベースのアプリケーションなど、一部のシステムでは読みやすくなります。
Matthew Scharley、2008年

47
@davr:まず、読みやすいです。一部の調査では、短い行の長さ(1行あたり76文字)が最も快適で、オンラインで読むのが最も速いとされています。これを知っていますか:読んでいるときに突然あなたの目が間違った線上にありますか?これは、80文字ではめったに起こりません。次に、1600ピクセル幅のモニターで2つのファイルを並べて編集したり、視覚的に比較したりします。これは、ファイルに80文字を超える行がない場合にのみ機能します。そのため、効率的に作業する前に長い行を再フォーマットすることがよくあります。
nalply 09

25
@davrいくつかのファイルを並べて編集するのに非常に便利です。
aehlke

2
(カーネルコーディングスタイルから)80文字の行幅を採用したので、C / C ++とJSコードの両方でバグを大幅に減らすことができます。私はときどきカップルでオーバーフローしますが、めったにありません...
マークKコーワン

回答:


586

私はこれを私の.vimrcに設定しています:

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

これにより、80カラムの制限を超えるテキストの背景が微妙な赤で強調表示されます(とにかくGUIモードでは微妙です-ターミナルモードではそれは少なくなります)。


3
いい案!私はそれを "ctermbg = darkred"と "guibg =#FFD9D9"に変更して、自分のニーズに合わせました(gvimでは明るい背景、ctermモードでは暗い)。
HS。

10
微妙な修正は/\%81v.\+/だと思います-何らかの理由で。*は文字が存在しない場所を強調表示します。
08年

14
この行は、正規表現に一致する方が少し良いと思います:match OverLength /\%>80v.\+/これは、「行末」の文字を強調せず、数値を希望の値に設定するだけなので、より直感的です+1ではなく、行の長さ。
David Terei

8
何らかの理由で、vimで最初に開いたバッファ(最初のタブの最初のウィンドウ)でのみ機能します...
lajarre

3
このソリューションが最初のバッファーでのみ機能する場合は、stackoverflow.com / a / 10993757/9822を確認してください。
Jesse Vogt 2013

769

vim 7.3以降では、set colorcolumn=80set cc=80略して)を使用できます。

以前のバージョンはこれをサポートしていないため、.vimrc代わりに次のように使用します。

if exists('+colorcolumn')
  set colorcolumn=80
else
  au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif

オプションに関するオンラインドキュメントcolorcolumnも参照してください。


26
「colorcolumn」の値を「textwidth」に基づいて、:set cc = + 1
graywh

1
has( "colorcolumn")が機能しませんでした。代わりにexists( "&colorcolumn")を使用する必要がありました。
SpoonMeiser 2010年

5
vim <7.1.40がmatchaddをサポートしていないことを除いて、とてもいいです。
Greg Jandl

19
列の色を次のように変更することもできますhighlight ColorColumn ctermbg=7
null_radix

2
このオプションのドキュメントはvimdoc.sourceforge.net/htmldoc/options.html#%27colorcolumn%27
JohnTESlade

54

より短い方法:

match ErrorMsg '\%>80v.\+'

8
長い垂直線でバッファを汚染しないので、私はこれが本当に好きです!(Y)
IonicăBizău

ErrorMsgですhighlight-group。Vimには多くのデフォルトのハイライトグループがあり、この場合に使用するカラーエンコーディングに基づいて使用できます。
クリスロン

49

私は好む:

highlight ColorColumn ctermbg=gray
set colorcolumn=80

私はこれが好きです。私は灰色の代わりに黒を使用しました。私の背景はほとんど黒ですが、かなりではないので、それはより微妙です。
密度振動、

30

サイモンハワードの答えは素晴らしいです。ただし、/\%81v.\+/81列を超えるタブを強調表示することはできません。それで、VIM wikiで見つけたものと上記のHSの色の選択に基づいて、私は少し微調整を行いました:

highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9
match OverLength /\%>80v.\+/

そして今、VIMは列80を超えるものを強調表示します。


2
guifg=white最後に追加したいかもしれません。
Dan Bechard、2017年

17

ここに画像の説明を入力してください

ミニマルな、オーバーザトップではないアプローチ。長すぎる行の79番目の文字のみが強調表示されます。これは、いくつかの一般的な問題を克服します。新しいウィンドウで機能し、あふれた単語は適切に強調表示されます。

augroup collumnLimit
  autocmd!
  autocmd BufEnter,WinEnter,FileType scala,java
        \ highlight CollumnLimit ctermbg=DarkGrey guibg=DarkGrey
  let collumnLimit = 79 " feel free to customize
  let pattern =
        \ '\%<' . (collumnLimit+1) . 'v.\%>' . collumnLimit . 'v'
  autocmd BufEnter,WinEnter,FileType scala,java
        \ let w:m1=matchadd('CollumnLimit', pattern, -1)
augroup END

注:FileType scala,javaこれにより、これがScalaおよびJavaソースファイルに制限されることに注意してください。あなたはおそらくこれをカスタマイズしたいと思うでしょう。省略した場合、すべてのファイルタイプで機能します。


なぜ追加したのFileType scala,javaですか?(私のために働いていない)
ドリアン

1
@ドリアンは、これをScalaとJavaのファイルタイプに制限します。なぜなら、それらは私が当時取り組んでいたファイルタイプだったからです。私はそれを言及するのを怠った。回答を更新しています。
Dominykas Mostauskis 2014

スクリーンショットではどのフォントを使用していますか?目にはとても楽しいです。
2014

@Idigas:同意し、私が最初にPuTTYを設定したときは、Comic Sansは悪い選択だったかもしれないと思います:)
Mark K Cowan 14年

この回答のスニペットをVim 7.4で機能させることができませんでした。(FileTypeフィルターも削除しました。)
Mnebuerquo 2016年

13

また、線を引いて80の制限を確認することもできます。

let &colorcolumn=join(range(81,999),",")
let &colorcolumn="80,".join(range(400,999),",")

結果:

ここに画像の説明を入力してください


13

指定された範囲から出て行く最初の文字だけをマークする良い方法:

highlight ColorColumn ctermbg=magenta "set to whatever you like
call matchadd('ColorColumn', '\%81v', 100) "set column nr

ダミアン・コンウェイの講演より


7

vimの新しいバージョンで:set numberwidth=xは、行番号表示の幅を設定する値を使用できます。折りたたみなどはあまり使っていないのでわかりません。ただし、細い縦線を描くことは、コンソールアプリケーションの能力を超えています。GVimはこれを許可する場合があります(私は使用しないため、コメントできません)。


5

ソリューションのセットに制約を課していると思います。まあ、nullセットのままにしておきます。

を使用:set textwidth=80すると、ライン制限が近づいていることを簡単に確認できないことを除いて、言及したすべての問題が修正されます。の場合:set ruler、ステータスバーのX、Y位置の表示を有効にします。これを使用して、現在の列を確認できます。

それを除けば、何を言えばいいのかわかりません。あなたがしなければならないからといって、数列、折りたたみ列、分割を失うのは残念です:set columns=80


ええ、私はそれを恐れていました...よりグラフィック指向のエディターのように細い垂直線を描くための隠された方法があることを望んでいました。
08年

5

あなたはこれを試すことができます:

au BufWinEnter * if &textwidth > 8
\ | let w:m1=matchadd('MatchParen', printf('\%%<%dv.\%%>%dv', &textwidth+1, &textwidth-8), -1)
\ | let w:m2=matchadd('ErrorMsg', printf('\%%>%dv.\+', &textwidth), -1)
\ | endif

これにより、すべてのバッファに2つのハイライトが設定されます。1つ&textwidthは設定前の8列の文字用で、もう1つはその列を超える文字用です。そうすれば、ある程度の期待が持てます。もちろん、多少の予想が必要な場合は、幅を調整して別の幅を使用できます(これらの列で構文の強調表示が失われるという形で支払います)。


3

まあ、:helpの列を見ると、実際にいじくられているわけではありません。

コンソールでは、通常、コンソールの設定によって決定されます(つまり、自動的に検出されます)。GUIでは、gvimウィンドウの幅を決定します(決定されます)。

したがって、通常はコンソールとウィンドウマネージャーにコメントアウトすることで、 set columns

「行のオーバーフローを確認して予測する」という意味がわかりません。EOLをおおよそ80桁目に挿入する場合は、set textwidthまたはを使用しますset wrapmargin。ソフトラップのみが必要な場合(つまり、ラインはラップされますが、実際のEOLはありません)、set linebreakおよびで遊んでくださいset showbreak


2

これは左のフィールドにはありませんが、行番号がわかっている場合は、現在の分割を80文字にサイズ変更するための素晴らしいマップです。

" make window 80 + some for numbers wide  
noremap <Leader>w :let @w=float2nr(log10(line("$")))+82\|:vertical resize <c-r>w<cr> 

1

これを試して、ウィンドウのサイズを設定し、80文字の実際のテキストを許可できます。ただし、これは垂直分割ではまだ機能しません。

let &co=80 + &foldcolumn + (&number || &relativenumber ? &numberwidth : 0)

これには、vim 7 +、7.3の相対番号が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.