it-swarm-ja.tech

設定したテキスト幅の端にVimに線を表示させる

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

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

問題が発生した場合は、主にWindowsでgVimを使用していますが、Vimのバージョン間でソリューションが機能する場合は気に入っています。

26
Herms

(g)vimの場合、以下を使用します。

set colorcolumn=80

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

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

set textwidth=80
set colorcolumn=-2

char位置78に色付きのバーを効果的に描画します。もちろん、テキスト幅を自分で設定することもしないこともあるので、0(デフォルト)になる場合があります。絶対位置形式を使用しています。

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

highlight ColorColumn ctermbg=green guibg=orange

(ただし、THOSEカラーはお勧めしません)

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

43
lornix

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

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

StackOverflow回答 ごと:

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

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

2
jtimberman

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

showing column when lines too long

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 https://stackoverflow.com/questions/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
1
Matthias Braun

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

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

0
Rook