Bagaimana cara mengatur penggaris di kolom tertentu?

50

Saat mengkode dalam bahasa yang berbeda, saya cenderung perlu membatasi baris saya ke panjang tertentu (biasanya 79 atau 80 karakter).

Saya telah melihat ini dilakukan di editor lain melalui penggunaan penggaris (garis padat ditampilkan di kolom) atau dengan mengubah warna teks untuk menunjukkan bahwa itu sudah berakhir.

Bagaimana saya bisa memiliki Vim menunjukkan kepada saya ketika saya mendekati atau melampaui 79 karakter dalam satu baris?

Kevin Brown
sumber

Jawaban:

64

Anda bisa menampilkan penggaris pada garis tertentu menggunakan opsi :set colorcolumn( :set ccuntuk pendek) yang hanya tersedia di Vim 7.3 atau lebih baru.

set colorcolumn=80

Ini akan mengatur warna latar belakang kolom itu menjadi merah, memberi Anda penggaris visual untuk bekerja.

Gambar kolom warna default diatur ke 80

Jika Anda ingin menggunakan warna lain selain merah (yang benar-benar menonjol), Anda dapat mengubah warnanya dengan mengatur highlightfor ColorColumn.

highlight ColorColumn ctermbg=0 guibg=lightgrey

Warna yang disesuaikan untuk kolom

Anda dapat mengatur warna untuk versi terminal Vim menggunakan ctermargumen dan versi GUI Vim menggunakan guibgargumen. Ini 0adalah nilai kode jalan keluar ASCII untuk hitam, yang berwarna abu-abu saat cerah (yang, secara default). Nilai lightgreyini digunakan untuk versi GUI Vim, seperti gVim, untuk mengubah warna latar belakang menjadi abu-abu terang.

Kevin Brown
sumber
10
Anda bahkan dapat memiliki beberapa kolom warna yang dipisahkan koma!
200_sukses
4
Gabungkan dengan join & range, dan Anda dapat memiliki banyak kolom yang diwarnai dengan kode yang sangat sedikit. .Vimrc saya memiliki:execute "set colorcolumn=" . join(range(81,335), ',')
Polling Cody
19

Sebagai tambahan untuk jawaban Kevin, Anda dapat memiliki beberapa kolom warna. Ketika saya kode, saya kadang-kadang memiliki batas "lunak" pada 80 kolom dan batas "keras" pada 120 kolom. Jadi saya ingin garis di 80, dan kemudian setiap kolom setelah 120 diwarnai.

Saya melakukan ini dengan

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

Tentu saja, ini dapat dengan mudah dimodifikasi ke preferensi lain.

davidlowryduda
sumber
14

Vim 7.3 membawa colorcolumnopsi, sebagaimana dirinci dengan sangat baik dalam jawaban lain.

Namun, jika Anda tidak memiliki versi 7.3 karena alasan apa pun, Anda masih dapat mencapai indikasi visual bahwa Anda melebihi jumlah kolom tertentu menggunakan matchfungsionalitas vim (lihat :help matchdetailnya).

Pada dasarnya, perintah-perintah pencocokan memungkinkan Anda untuk membuat highlight tetap untuk teks yang cocok dengan ekspresi reguler yang diberikan. :match ColorColumn "\%80v."akan menyorot teks dalam kolom 80 dengan grup "ColorColumn". Tentu saja Anda dapat mengganti grup sorotan mana pun, dan nilai kolom apa pun. Jika Anda ingin indikasi visual yang kuat, ekspresi "\%>79v.\+"akan menyoroti kolom 80 dan seterusnya.

( \%80vBerarti "laga di kolom maya 80," dan \%>79vberarti "match setelah kolom maya 79; lihat :help /\%c. Untuk lebih)

Pendekatan ini hanya akan menyoroti ketika ada karakter aktual yang ada di kolom yang ditentukan, yang membuatnya kurang konsisten secara visual colorcolumn.


sumber
4
Secara pribadi saya menemukan pendekatan matches yang kurang konsisten lebih baik, karena menyoroti hanya garis-garis di mana saya melebihi batas 80-kolom, daripada menunjukkan garis merah besar (kepada saya) yang mengganggu di kanan layar. Oleh karena itu dalam vimrc saya untuk Python saya gunakan call matchadd('ColorColumn', '\(\%80v\|\%100v\)')(80 dan 100 adalah panjang yang disarankan dalam PEP 8)
jalanb