Buat Vim menampilkan garis di tepi textwidth yang ditetapkan


26

Sebagian besar editor teks dan IDE yang saya gunakan hari ini memiliki fitur di mana mereka dapat menampilkan garis pada panjang karakter tertentu dalam buffer teks. Ini berguna ketika Anda ingin menjaga baris dalam file di bawah panjang tertentu.

Apakah ada cara untuk membuat Vim melakukan ini, lebih disukai menggunakan nilai yang sudah ditentukan textwidth? Garis akan secara otomatis membungkus pada titik itu, tetapi saya benar-benar ingin dapat melihat di mana itu juga.

Dalam hal ini penting, saya terutama menggunakan gVim di Windows, tetapi saya akan senang jika solusi ini bekerja di seluruh versi Vim.

Jawaban:


41

untuk (g) vim, gunakan yang berikut:

set colorcolumn=80

atau berapa pun lebar yang Anda inginkan. Bekerja di vim & gvim. Saya memiliki milik saya dalam IF jadi tergantung pada jenis file yang saya edit.

Anda juga dapat menggunakan + x / -x untuk mendasarkan posisi kolom +/- dari & textwidth.

set textwidth=80
set colorcolumn=-2

akan efektif menggambar bar berwarna pada posisi char 78. Tentu saja, Anda mungkin atau mungkin tidak mengatur sendiri lebar teks, sehingga mungkin 0 (default). Saya menggunakan formulir posisi absolut.

Anda juga dapat mengubah warna yang digunakan jika Anda ingin:

highlight ColorColumn ctermbg=green guibg=orange

(Saya tidak merekomendasikan warna MEREKA)

Opsi ini ditambahkan dalam (g) vim 7.3.


Versi Vim apa yang didukung ini? Ini tidak berfungsi untuk saya di gvim 7.2.
Herms

Saya menjalankan 7.3. Saya baru saja menarik kode sumber dan melihat, perintah ini diperkenalkan pada 7.3.
lornix

Bekerja untuk saya di Ubuntu 12.04 dengan vim 7.3. gvim 7.3 for windows telah tersedia setidaknya sejak Oktober 2010. @Siapa bisa Anda menjawabnya?
poindexter

Alangkah baiknya jika ini bekerja ketika menggunakan beberapa jendela berdampingan. Monitor saya cukup lebar untuk menampilkan beberapa jendela berturut-turut, masing-masing> 80 karakter tetapi colorColumn hanya berfungsi pada jendela pertama (paling kiri).
Eno

3

Ada cuplikan di Google Code yang dapat Anda coba:

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

Hmm, utas itu menunjukkan bahwa gvim windows sudah mendukungnya, tapi saya tidak tahu cara menyalakannya.
Herms

Ada beberapa kode untuk ditambahkan ke file gvimrc Anda lebih lanjut di utas.
EBGreen

Sepertinya itu hanya mengubah latar belakang untuk karakter yang melampaui garis itu. Saya lebih suka memiliki panduan yang selalu terlihat seperti editor lainnya.
Herms

Karena sifat gui saya tidak positif yang saat ini mungkin.
EBGreen

Ini tidak beradaptasi dengan lebar teks seperti yang diminta dalam pertanyaan.
Steven Roose

2

Per jawaban StackOverflow :

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

Sesuaikan dengan selera Anda.


Hm, tidak persis apa yang saya cari (hanya menampilkan ketika karakter melewati garis), tetapi lebih baik daripada tidak sama sekali.
Herms

Ini tidak beradaptasi dengan lebar teks seperti yang diminta dalam pertanyaan.
Steven Roose

1

Saya suka jawaban lornix banyak tetapi saya tidak ingin menyorot kolom sepanjang waktu , hanya ketika setidaknya satu baris melebihi batas panjang:

menampilkan kolom ketika garis terlalu panjang

Inilah cara saya melakukannya untuk file Haskell saya:

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

Ini sering dibahas di #vim, dan di beberapa forum. Sejauh hal berdiri sekarang, itu tidak mungkin. Jadi solusi yang disebutkan adalah satu-satunya pilihan Anda, afaik.

Masalahnya, vim dapat melakukan apa saja dengan tempat-tempat di mana ada karakter (mereka menjadi huruf, angka atau hanya spasi kosong). Tapi itu tidak bisa melukis latar belakang dalam warna yang berbeda (seperti yang Anda inginkan), jika tidak ada di sana. Dan sebelum Anda mengetik sesuatu, tidak ada apa pun di sana, jadi tidak dapat menggambar garis / margin.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.