ทำให้ Vim แสดงบรรทัดที่ขอบของชุดความกว้างของข้อความ


26

โปรแกรมแก้ไขข้อความและ IDE ส่วนใหญ่ที่ฉันใช้ในปัจจุบันมีคุณสมบัติที่สามารถแสดงบรรทัดที่ความยาวอักขระที่แน่นอนในบัฟเฟอร์ข้อความ มันมีประโยชน์เมื่อคุณต้องการเก็บบรรทัดในไฟล์ให้มีความยาวที่แน่นอน

มีวิธีใดที่จะให้ Vim ทำเช่นนี้ควรใช้textwidthค่าที่กำหนดไว้แล้ว เส้นจะพันกันโดยอัตโนมัติในจุดนั้น แต่ฉันอยากเห็นว่ามันอยู่ตรงไหน

ในกรณีที่เป็นเรื่องสำคัญฉันใช้ gVim บน Windows เป็นหลัก แต่ฉันชอบถ้าโซลูชันใช้งานได้ในเวอร์ชัน Vim

คำตอบ:


41

สำหรับ (g) เป็นกลุ่มใช้สิ่งต่อไปนี้:

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 gvim 7.3 สำหรับwindowsนั้นมีให้บริการตั้งแต่ตุลาคม 2010 เป็นต้นไป @ คุณสามารถตอบคำถามนี้ได้หรือไม่
poindexter

มันจะดีถ้าใช้งานได้เมื่อใช้หลาย ๆ หน้าต่างแบบเคียงข้างกัน จอแสดงผลของฉันกว้างพอที่จะแสดงหน้าต่างหลายบานติดต่อกันแต่ละอัน> 80 chars แต่ colorColumn ใช้ได้กับหน้าต่างแรก (ซ้ายสุด) เท่านั้น
Eno

3

มีตัวอย่างโค้ดที่Google Code ที่คุณสามารถลองได้:

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

อืม, เธรดดังกล่าวแสดงให้เห็นว่า gvim ของ windows รองรับอยู่แล้ว แต่ฉันไม่สามารถหาวิธีเปิดใช้งานได้
Herms

มีรหัสบางอย่างที่จะเพิ่มในไฟล์ gvimrc ของคุณละเอียดกว่านี้ในเธรด
EBGreen

ดูเหมือนว่าเพียงแค่เปลี่ยนพื้นหลังสำหรับตัวละครที่เกินเส้นนั้น ฉันอยากจะมีไกด์ที่มองเห็นได้ตลอดเวลาเหมือนที่บรรณาธิการคนอื่นมี
Herms

เนื่องจากธรรมชาติของ gui ฉันไม่แน่ใจว่าเป็นไปได้ในปัจจุบัน
EBGreen

สิ่งนี้ไม่ปรับให้เข้ากับความกว้างของข้อความเช่นที่ร้องขอในคำถาม
Steven Roose

2

ต่อคำตอบ StackOverflow :

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

ปรับให้เหมาะกับรสนิยมของคุณ


หืมมมไม่ได้ค่อนข้างสิ่งที่ฉันกำลังมองหา (แสดงเฉพาะเมื่อตัวละครไปที่ผ่านมาสาย) แต่มันไม่มีอะไรดีกว่า
Herms

สิ่งนี้ไม่ปรับให้เข้ากับความกว้างของข้อความเช่นที่ร้องขอในคำถาม
Steven Roose

1

ฉันชอบlornix 'ตอบคำถามมากมาย แต่ฉันไม่ต้องการเน้นคอลัมน์ตลอดเวลาเฉพาะเมื่ออย่างน้อยหนึ่งบรรทัดเกินขีดจำกัดความยาว:

แสดงคอลัมน์เมื่อบรรทัดยาวเกินไป

นี่คือวิธีที่ฉันทำกับไฟล์ 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

เป็นสิ่งที่เป็นกลุ่มสามารถทำอะไรกับสถานที่ที่มีตัวละคร (พวกเขาเป็นตัวอักษรตัวเลขหรือเพียงแค่ช่องว่างธรรมดา) แต่มันไม่สามารถทาสีพื้นหลังเป็นสีอื่น (เช่นคุณต้องการ) ถ้าไม่มีอะไรอยู่ และก่อนที่คุณจะพิมพ์บางอย่างไม่มีสิ่งใดอยู่ที่นั่นดังนั้นจึงไม่สามารถวาดเส้น / ระยะขอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.