Vimに設定されたtextwidthの端に線を表示させる


26

最近使用しているほとんどのテキストエディターとIDEには、テキストバッファー内の特定の文字長で行を表示できる機能があります。ファイル内の行を特定の長さ未満に保ちたい場合に便利です。

できれば既に定義されているtextwidth値を使用して、Vimにこれを実行させる方法はありますか?その時点で行は自動的に折り返されますが、それがどこにあるかを確認したいのです。

それが重要な場合、私は主にWindowsでgVimを使用していますが、Vimのバージョン間でソリューションが機能する場合は気に入っています。

回答:


41

(g)vimには、次を使用します。

set colorcolumn=80

またはあなたが望む幅。vimとgvimの両方で動作します。私はIF内に私のものを持っているので、編集するファイルのタイプに基づいて条件付きです。

また、+ x / -xを使用して、&textwidthの+/-列の位置を基準にすることもできます。

set textwidth=80
set colorcolumn=-2

文字の位置78に色付きのバーを効果的に描画します。もちろん、テキスト幅を自分で設定してもしなくてもかまいません。したがって、0(デフォルト)になります。絶対位置形式を使用します。

必要に応じて、使用する色を変更することもできます。

highlight ColorColumn ctermbg=green guibg=orange

(ただし、これらの色はお勧めしません)

このオプションは(g)vim 7.3で追加されました。


これはどのバージョンのVimでサポートされていますか?gvim 7.2では私にとってはうまくいきません。
-Herms

7.3を実行しています。ソースコードを引っ張って見たところ、このコマンドは7.3で導入されました。
lornix

Ubuntu 12.04とvim 7.3で動作します。Windows用のgvim 7.3は、少なくとも2010年の10月から利用可能になりました。@ Hermsはこれを答えにできますか?
poindexter

複数のウィンドウを並べて使用するときにこれがうまくいけばいいと思います。私のモニターは、それぞれが80文字を超える複数のウィンドウを連続して表示できる幅ですが、colorColumnは最初の(左端の)ウィンドウでのみ機能します。
イーノ

3

Google Codeには次のスニペットがあります:

augroup vimrc_autocmds
au!
    autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929 
    autocmd BufRead * match OverLength /\%81v.*/
augroup END

うーん、そのスレッドは、Windowsのgvimが既にそれをサポートしていることを示唆していますが、それをオンにする方法がわかりません。
エルムス

スレッドのさらに下のgvimrcファイルに追加するコードがいくつかあります。
EBGreen 2009

その行を超えるキャラクターの背景を変更するだけのようです。他の編集者が持っているような、常に見えるガイドが欲しいです。
-Herms

guiの性質上、現在可能なことは肯定的ではありません。
EBGreen 2009

これは、質問で要求されたようなテキスト幅には適応しません。
スティーブンルース

2

StackOverflowの回答ごとに:

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

好みに合わせて調整してください。


フム、ない非常に何(の文字がラインを越えて行くときにのみ表示されます)私が探しているが、それは何もないよりはましです。
-Herms

これは、質問で要求されたようなテキスト幅には適応しません。
スティーブンルース

1

私はlornixの答えが大好きですが、少なくとも1行が長さの制限を超えている場合にのみ、列を常に強調表示したくないです:

行が長すぎるときに列を表示する

Haskellファイルに対してどのように行うかを以下に示します。

augroup HaskellCommands
autocmd!
  " When a Haskell file is read or the text changes in normal or insert mode,
  " draw a column marking the maximum line length if a line exceeds this length
  autocmd BufRead,TextChanged,TextChangedI *.hs call ShowColumnIfLineTooLong(80)
augroup END

" Color the column marking the lengthLimit when the longest line in the file
" exceeds the lengthLimit
function! ShowColumnIfLineTooLong(lengthLimit)
  " See /programming/2075276/longest-line-in-vim#2982789
  let maxLineLength = max(map(getline(1,'$'), 'len(v:val)'))

  if maxLineLength > a:lengthLimit
    highlight ColorColumn ctermbg=red guibg=red
    " Draw the vertical line at the first letter that exceeds the limit
    execute "set colorcolumn=" . (a:lengthLimit + 1)
  else
    set colorcolumn=""
  endif
endfunction

0

これは、多くの場合、#vimやいくつかのフォーラムで議論されました。現在の状況では、不可能です。したがって、言及された解決策はあなたの唯一の選択肢です、afaik。

問題は、vimは文字がある場所(文字、数字、または単なる空白)で何でもできることです。ただし、何もない場合は、背景を別の色でペイントすることはできません(好きなように)。そして、何かを入力する前は何もありませんので、線や余白を描くことはできません。

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