80 कॉलम लेआउट की चिंता करें


417

जिस तरह से मैं विम में 80-कॉलम संकेत करता हूं वह गलत लगता है set columns=80:। कई बार मैं भी set textwidth, लेकिन मैं set columnsविकल्प के साथ लाइन अतिप्रवाह को देखने और प्रत्याशित करने में सक्षम होना चाहता हूं ।

इसके कुछ दुर्भाग्यपूर्ण दुष्प्रभाव हैं:

  1. मैं उन set numberफ़ाइलों के बीच बंटवारे के डर से नहीं कर सकता जिनमें लाइन नंबरों के अलग-अलग ऑर्डर हैं; यानी <100 लाइन फाइलें और> = 100 लाइन फाइलों को set columnsअतिरिक्त अंकों के प्रदर्शन के लिए उपयोग किए जाने वाले अतिरिक्त कॉलम की वजह से दो अलग-अलग मानों की आवश्यकता होगी ।
  2. मैं भी नई (छ) खिड़कियों के बजाए खड़ी सत्र शुरू करते हैं। यह इसलिए है क्योंकि vsplitमुझे set columnsहर बार जब मैं एक फलक खोलता या बंद करता हूं, तो नया सत्र शुरू करना कम परेशानी वाला होता है।

जब आप चाहते हैं कि आप 80-वर्ण संकेत को कैसे संभालें set numbers, लंबवत रूप से विभाजित करें, आदि।


60
इसे कई मंडलियों में अच्छी कोड शैली माना जाता है; उदाहरण के लिए, पायथन की स्टाइल गाइड (PEP8) 79 चरित्र पंक्तियों की सिफारिश करती है: python.org/dev/peps/pep-0008
cdleary

4
यह पूर्ण नहीं है "आपके पास 80 वर्ण लाइनें होनी चाहिए", लेकिन यह कुछ सिस्टम पर पढ़ने के लिए इसे अच्छा बनाता है, उदाहरण के लिए किसी भी कंसोल आधारित एप्लिकेशन को जो जीयूआई कंसोल विंडो के अंदर नहीं चल रहा है जिसे आकार दिया जा सकता है।
मैथ्यू शार्ले

47
@ देववर: पहले, इसे पढ़ना आसान है। कुछ अध्ययनों से पता चलता है कि एक छोटी लाइन की लंबाई (76 अक्षर एक लाइन) सबसे अधिक सहमत है और ऑनलाइन पढ़ने के लिए सबसे तेज़ है। क्या आप यह जानते हैं: पढ़ते समय अचानक आपकी नज़र गलत लाइन पर होती है? 80 पात्रों के साथ ऐसा कम ही होता है। दूसरी बात यह है कि मैं अक्सर अपने 1600 पिक्सेल चौड़े मॉनीटर पर दो फाइलों को साइड-बाय-साइड एडिट या अलग-अलग करता हूं। यह केवल तभी अच्छी तरह से काम करता है जब फ़ाइल में 80 से अधिक वर्ण न हों। इसलिए मैं अक्सर कुशलतापूर्वक काम करने से पहले लंबी लाइनों को सुधारता हूं।
४al तक

25
@davr यह कई फाइलों को अगल-बगल संपादित करने के लिए अविश्वसनीय रूप से उपयोगी है।
aehlke

2
मैं C / C ++ और JS कोड दोनों में बहुत कम बग बनाता हूं क्योंकि मैंने 80 char लाइन की चौड़ाई (कर्नेल कोडिंग स्टाइल से) को अपनाया था। मैं कभी-कभार इसे एक युगल द्वारा ओवरफ्लो कर देता हूं, लेकिन शायद ही कभी ...
मार्क के कोवान

जवाबों:


586

मैंने इसे अपने .vimrc में सेट किया है:

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

यह पाठ के लिए एक सूक्ष्म लाल रंग की पृष्ठभूमि को उजागर करता है जो 80 कॉलम की सीमा से अधिक है (GUI मोड में सूक्ष्म, वैसे भी - टर्मिनल मोड में ऐसा कम है)।


3
महान विचार! मैंने अपनी आवश्यकताओं को बेहतर तरीके से फिट करने के लिए इसे "ctermbg = darkred" और "guibg = # FFD9D9" में बदल दिया (लाइट बैक इन gvim और डार्क इन cterm मोड)।
एच.एस.

10
मुझे लगता है कि किसी कारण के लिए एक सूक्ष्म सुधार / END%81v.\+/ है। * उन स्थानों को हाइलाइट करता है जहां वर्ण मौजूद नहीं हैं।
1

14
मुझे लगता है कि मैच रेगेक्स के लिए यह रेखा थोड़ी बेहतर है: मैच ओवरलेंथ / END%>80v.\+/ यह 'लाइन के अंत' चरित्र को उजागर नहीं करता है और यह भी अधिक सहज है क्योंकि आपने जो चाहा उसके लिए सिर्फ संख्या निर्धारित की पंक्ति की लंबाई, +1 नहीं है।
डेविड तेरेई

8
किसी कारण से यह केवल मेरे लिए पहले खुले बफर में काम करता है (पहली टैब की पहली खिड़की) मेरी विम में ...
लजार्रे

3
अगर यह समाधान केवल आपके पहले बफर में काम कर रहा है, तो stackoverflow.com/a/10993757/9822 देखें ।
जेसी वोग्ट

769

Vim 7.3 के रूप में, आप set colorcolumn=80( set cc=80संक्षेप में) का उपयोग कर सकते हैं ।

चूंकि पुराने संस्करण इसका समर्थन नहीं करते हैं, इसलिए .vimrcइसके बजाय मेरे उपयोग:

if exists('+colorcolumn')
  set colorcolumn=80
else
  au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif

विकल्प पर ऑनलाइन दस्तावेज़colorcolumn भी देखें ।


26
तुम भी स्वचालित रूप से 'colorcolumn' के मान को आधार बना सकते हैं जैसे कि 'टेक्स्टवर्क' पर कुछ इस तरह है: सेट cc = + 1
ग्रेव्ह

1
है ("colorcolumn") मेरे लिए काम नहीं किया। मुझे इसके बजाय ("और colorcolumn") का उपयोग करना था।
स्पूनमाइजर

5
बहुत अच्छा है, सिवाय इसके कि विम <7.1.40 matchadd का समर्थन नहीं करता है।
ग्रेग जैंडल

19
आप कॉलम का रंग भी बदल सकते हैंhighlight ColorColumn ctermbg=7
null_radix

2
इस विकल्प के लिए प्रलेखन vimdoc.sourceforge.net/htmldoc/options.html#%27colorcolumn%27 पर है
JohnTESlade

54

छोटा रास्ता:

match ErrorMsg '\%>80v.\+'

8
मुझे वास्तव में यह पसंद है क्योंकि यह मेरे बफर को एक लंबी ऊर्ध्वाधर रेखा के साथ प्रदूषित नहीं करता है! (Y)
आयनिक बिज़ुआ जू

ErrorMsgएक है highlight-group। विम में बहुत सारे डिफ़ॉल्ट हाइलाइट समूह हैं जो आप इस मामले के लिए इच्छित रंग एन्कोडिंग के आधार पर उपयोग कर सकते हैं।
क्रिक्रॉन

49

मैं पसंद करता हूं:

highlight ColorColumn ctermbg=gray
set colorcolumn=80

मैं यह पसंद है। मैंने ग्रे के बजाय काले रंग का उपयोग किया और यह अधिक सूक्ष्म था क्योंकि मेरी पृष्ठभूमि लगभग काली है लेकिन काफी नहीं है।
इसोस्पाइनल ऑसिलेशन

30

साइमन हॉवर्ड का जवाब बहुत अच्छा है। लेकिन /\%81v.\+/स्तंभ 81 से अधिक के टैब को हाइलाइट करने में विफल रहता है। इसलिए मैंने थोड़ा ट्विक किया, वीआईएम विकी और एचएस के ऊपर के रंगों की पसंद के सामान के आधार पर :

highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9
match OverLength /\%>80v.\+/

और अब VIM कॉलम 80 को पार करने वाली किसी भी चीज़ को उजागर करेगा।


2
guifg=whiteवहाँ अंत में जोड़ना चाह सकते हैं ।
डैन बेहार्ड

17

यहां छवि विवरण दर्ज करें

मिनिमलिस्टिक, ओवर-द-टॉप दृष्टिकोण। केवल 79 वें वर्ण की रेखाएँ बहुत लंबी होती हैं। यह कुछ सामान्य समस्याओं पर काबू पाती है: नई खिड़कियों पर काम करता है, ओवरफ्लो करने वाले शब्दों को ठीक से हाइलाइट किया जाता है।

augroup collumnLimit
  autocmd!
  autocmd BufEnter,WinEnter,FileType scala,java
        \ highlight CollumnLimit ctermbg=DarkGrey guibg=DarkGrey
  let collumnLimit = 79 " feel free to customize
  let pattern =
        \ '\%<' . (collumnLimit+1) . 'v.\%>' . collumnLimit . 'v'
  autocmd BufEnter,WinEnter,FileType scala,java
        \ let w:m1=matchadd('CollumnLimit', pattern, -1)
augroup END

नोट: FileType scala,javaइस सीमा को स्केला और जावा स्रोत फ़ाइलों तक सीमित करें। आप शायद इसे कस्टमाइज़ करना चाहेंगे। यदि आप इसे छोड़ना चाहते हैं, तो यह सभी फ़ाइल प्रकारों पर काम करेगा।


आपने क्यों जोड़ा FileType scala,java? (मेरे लिए काम नहीं कर रहा)
डोरियन

1
@ डोरियन ने इसे स्कैला और जावा फाइलपेट्स तक सीमित कर दिया है, क्योंकि उस समय मैं जो काम कर रहा था, वह फिलैटिप्स थे। मैंने इसका उल्लेख करने की उपेक्षा की। अद्यतन उत्तर।
डोमिनिकाका मोस्टस्किस

स्क्रीनशॉट में आप किस फ़ॉन्ट का उपयोग कर रहे हैं? मुझे यह आंख को बहुत भाता है।
रूक

@ इडीगास: सहमत, और मुझे ऐसा लग रहा है कि शायद कॉमिक सैन्स एक बुरा विकल्प हो सकते हैं जब मैं मूल रूप से PuTTY की स्थापना करता हूं :)
मार्क के कोवान

मैं इस जवाब में स्निपेट पाने में सक्षम नहीं था Vim 7.4 में काम करने के लिए। (मैंने फ़ाइल टाइप फ़िल्टर को भी हटा दिया।)
Mnebuerquo

13

आप 80 सीमा देखने के लिए भी रेखा खींच सकते हैं:

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

परिणाम:

यहां छवि विवरण दर्ज करें


13

निर्दिष्ट सीमा से बाहर जाने वाले पहले चरित्र को चिह्नित करने का एक अच्छा तरीका है:

highlight ColorColumn ctermbg=magenta "set to whatever you like
call matchadd('ColorColumn', '\%81v', 100) "set column nr

डेमियन कॉनवे की बात से


7

विम के नए संस्करण एक :set numberwidth=xमूल्य की अनुमति देते हैं , जो लाइन नंबर डिस्प्ले की चौड़ाई निर्धारित करता है। मैं वास्तव में फोल्डिंग आदि का उपयोग नहीं करता, इसलिए मुझे इसके बारे में पता नहीं था। यद्यपि एक पतली ऊर्ध्वाधर रेखा खींचना एक सांत्वना अनुप्रयोग की क्षमताओं से परे है। जीवीएम इसे अनुमति दे सकता है (मैं इसका उपयोग नहीं करता, इसलिए वहां कोई टिप्पणी नहीं कर सकता)।


5

मुझे डर है कि आपने समाधान के सेट पर अड़चनें डाल दी हैं, ठीक है, आपको अशक्त सेट के साथ छोड़ दें।

उपयोग :set textwidth=80करने से आपके द्वारा बताई गई सभी समस्याओं को ठीक कर दिया जाएगा, इसके अलावा आप आसानी से लाइन की सीमा को नहीं देख सकते हैं। अगर तुम:set ruler स्थिति पट्टी पर x, y स्थिति प्रदर्शन को सक्षम करेंगे, जिसका उपयोग आप यह देखने के लिए कर सकते हैं कि आप किस स्तंभ में हैं।

इसके अलावा, मुझे यकीन नहीं है कि आपको क्या बताना है। नंबर कॉलम, फोल्ड कॉलम और स्प्लिट्स को खोना शर्म की बात है क्योंकि आपको करना है :set columns=80


हाँ, मुझे इस बात का डर था ... मैं उम्मीद कर रहा था कि एक पतली ऊर्ध्वाधर रेखा खींचने के लिए एक छिपा हुआ रास्ता होगा जैसे कि अधिक ग्राफिक रूप से उन्मुख संपादकों में।
cdleary

5

आप यह कोशिश कर सकते हैं:

au BufWinEnter * if &textwidth > 8
\ | let w:m1=matchadd('MatchParen', printf('\%%<%dv.\%%>%dv', &textwidth+1, &textwidth-8), -1)
\ | let w:m2=matchadd('ErrorMsg', printf('\%%>%dv.\+', &textwidth), -1)
\ | endif

जो कि प्रत्येक बफर में दो हाइलाइट सेट करेगा, 8 कॉलम के पात्रों में से एक जो आपके &textwidthसेट करने से पहले है, और एक उस कॉलम से परे पात्रों के लिए। इस तरह आपके पास कुछ हद तक प्रत्याशा है। यदि आप अधिक या कम प्रत्याशा चाहते हैं (जो आप उन स्तंभों में हाइलाइटिंग सिंटैक्स के नुकसान के रूप में भुगतान करते हैं) का उपयोग करने के लिए निश्चित रूप से आप इसे एक अलग चौड़ाई का उपयोग कर सकते हैं।


3

ठीक है: मदद स्तंभों को देखते हुए, यह वास्तव में गड़बड़ करने के लिए नहीं बनाया जा रहा है।

कंसोल में, यह आमतौर पर कंसोल सेटिंग द्वारा निर्धारित किया जाता है (यानी यह स्वचालित रूप से पाया गया है); GUI में, यह gvim विंडो की चौड़ाई निर्धारित करता है (और इससे निर्धारित होता है)।

इसलिए आम तौर पर आप कॉन्सोल्स और विंडो मैनेजरों को कमेंट करके अपना काम करने देते हैं set columns

मुझे यकीन नहीं है कि आप "देखें और प्रत्याशित लाइन अतिप्रवाह" से क्या मतलब है। यदि आप चाहते हैं कि ईओएल लगभग 80 कॉलम में डाला जाए, तो set textwidthया तो उपयोग करें या set wrapmargin; यदि आप केवल सॉफ्ट रैप चाहते हैं (यानी लाइन रैप की गई है, लेकिन कोई वास्तविक ईओएल नहीं है), तो साथ खेलें set linebreakऔर set showbreak


2

यदि आप लाइन नंबर प्राप्त कर चुके हैं तो यह आपके वर्तमान क्षेत्र से 80 वर्णों के विभाजन के लिए एक छोटा सा नक्शा है, लेकिन इसका अच्छा सा नक्शा है:

" make window 80 + some for numbers wide  
noremap <Leader>w :let @w=float2nr(log10(line("$")))+82\|:vertical resize <c-r>w<cr> 

1

आप वास्तविक पाठ के 80 वर्णों को अनुमति देने के लिए विंडो आकार सेट करने के लिए इसे आज़मा सकते हैं। यह अभी भी ऊर्ध्वाधर विभाजन के साथ काम नहीं करता है।

let &co=80 + &foldcolumn + (&number || &relativenumber ? &numberwidth : 0)

इसके लिए relativenumber के लिए vim 7+, 7.3 की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.