आप स्वचालित रूप से विम में ट्रेलिंग व्हाट्सएप को कैसे हटा सकते हैं


197

मैं 'अनुगामी व्हाट्सएप' त्रुटियां प्राप्त कर रहा हूं जो कुछ फाइलों को करने की कोशिश कर रही हैं।

इससे पहले कि मैं अजगर फ़ाइलों को बचाने से पहले मैं इन अनुगामी व्हाट्सएप पात्रों को स्वचालित रूप से हटा देना चाहता हूं।

क्या आप इसे करने के लिए विम कॉन्फ़िगर कर सकते हैं? यदि हां, तो कैसे?


3
यह अकेले अजगर की चिंता नहीं करता है

2
मेरे DeleteTrailingWhitespace प्लगइन का उपयोग करें ।
इंगो करकट

जवाबों:


208

मैं इस सवाल का जवाब मिल गया यहाँ

निम्नलिखित को मेरे .vimrc फ़ाइल में जोड़ने से चाल चली गई।

autocmd BufWritePre *.py :%s/\s\+$//e

1
दिलचस्प! सफेद स्थान को पीछे छोड़ना काम में एक लड़ाई है। मैं इसे घृणा करता हूं, दूसरों को समझ में नहीं आता कि क्यों। हम vim जितना उपयोग करते हैं (मैं vim का उपयोग करता हूं; वे नहीं करते हैं क्योंकि उन्हें इसे स्थापित करना होगा)। मेरे पास एक प्रोग्राम है जिसे मैं stb को Strip Trailing Blanks कहता हूं और एक फ़िल्टर के रूप में उपयोग करता हूं; vi में भी काम करता है। यह बेहतर है।
जोनाथन लेफ्लर

16
यह प्रत्येक सेव पर कर्सर की स्थिति बदलता है। क्या इससे बचना संभव है?
चरणंच

3
चूंकि यह इस प्रश्न के लिए वास्तविक तथ्य है, इसलिए इसे कर्सर स्थिति बनाए रखने के लिए अद्यतन किया जाना चाहिए।
एडू फेलिप

2
यह मल्टी-लाइन स्ट्रिंग्स में ट्रेलिंग स्पेस को भी हटा देगा, जो कुछ मामलों में वांछित नहीं हो सकता है। लेकिन मुझे लगता है कि इससे बचने का कोई आसान तरीका नहीं है?
ल्युएटर

3
शायद आप स्पष्ट कर सकते हैं कि eअंत में इसका मतलब है, अगर हमें पैटर्न नहीं मिला, तो vi स्थानापन्न आदेश को विफल नहीं मानता है
LLainain

169

उपरोक्त प्लस संचय कर्सर स्थिति का संकलन:

fun! <SID>StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    keepp %s/\s\+$//e
    call cursor(l, c)
endfun

autocmd FileType c,cpp,java,php,ruby,python autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()

यदि आप इसे किसी फ़ाइल में सहेजना चाहते हैं, तो दूसरा छोड़ें autocmdऔर वाइल्डकार्ड का उपयोग करें *:

autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()

9
आप अंतिम खोज को सहेज कर और उसे पुनर्स्थापित करके भी अपने कार्य को बेहतर बना सकते हैं। let _s = @ / let @ / = _ s
xApple

3
मैंने autocmd FileType c,cpp,java,php,ruby,python इसे सभी फाइलों पर लागू करने के लिए इसे हटा दिया ।
swt83

8
@xApple: अंतिम खोज को सहेजना और पुनर्स्थापित करना अंदर के कार्यों के लिए आवश्यक नहीं है - फ़ंक्शन के संदर्भ को छोड़ने से इसका ध्यान रखा जाएगा।
तोबियों

3
@ swt83 आप भी बदलने की आवश्यकता <buffer>के साथ *अगर आप सभी फाइलों पर काम करने के लिए यह चाहते
cadlac

3
यदि आप स्थानापन्न कमांड w / को उपसर्ग करते हैं keepp, तो यह आपके खोज इतिहास को परिवर्तित नहीं करेगा, अर्थातkeepp %s/\s\+$//e
jeberle

68

मैं भी आम तौर पर:

match Todo /\s\+$/

मेरी .vimrcफ़ाइल में, ताकि लाइन व्हाट्सएप का अंत hilighted हो।

टोडो एक वाक्यविन्यास hilighting group-name है, जो कि hilighting keywords के लिए प्रयोग किया जाता है TODO, FIXMEया XXX। यह एक कष्टप्रद बदसूरत पीले रंग की पृष्ठभूमि का रंग है, और मुझे लगता है कि यह आपके कोड में नहीं चाहते चीजों को छिपाने के लिए सबसे अच्छा है :-)


7
या आप सूची सेट कर सकते हैं और listchars + = निशान सेट कर सकते हैं:।
ओली

उत्कृष्ट - स्वचालित रूप से ट्रेलिंग व्हाट्सएप को हटाने के बीच यह एकदम सही मध्य का मैदान है (यहां तक ​​कि जब मुझे इसके बारे में पता नहीं हो सकता है, या जब यह किसी और का कोड है जो मैं बस उसी फ़ाइल में काम करने के लिए हो रहा हूं), इसके बारे में कुछ भी नहीं करने के लिए । धन्यवाद।
डैनियल हर्शकोविच

2
दुर्भाग्य से, मेरी पसंदीदा रंग योजना जेनबर्न डेंसट नहीं है
पीटर लॉन्ग

@PeterLong, रेलसेक्स थीम में भी काम नहीं करता है। इसके साथ जांच करें :hi Todo। इसलिए मैं अवलोकन :hi <Tab>और :help hi। मैंने माना Cursorऔर Error, लेकिन मुझे लगता है कि मैं कोशिश करूँगा match VisualNOS /\s\+$/ । मैं autocmdयहाँ अन्य उत्तरों में से कुछ के साथ इसे जोड़ सकता हूँ ।
ब्रैडी ट्रेनर

51

मैं दोनों मौजूदा ट्रेलिंग व्हाट्सएप को हाइलाइट करता हूं और स्ट्रिपिंग व्हॉट्सएप भी।

मैं अंत में सफेद स्थान दिखाने के लिए अपने संपादक (विम) को कॉन्फ़िगर करता हूं, जैसे

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

इसके साथ मेरे .vimrc के नीचे:

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

और मैं उन्हें फाइलों से 'ऑटो-स्ट्रिप' करता हूं, जब उन्हें बचा रहा हूं, मेरे मामले में। * माणिक फ़ाइलों के लिए, मेरे ~ / .vimrc में फिर से।

function! TrimWhiteSpace()
    %s/\s\+$//e
endfunction
autocmd BufWritePre     *.rb :call TrimWhiteSpace()

13

यहाँ एक से अधिक FileType द्वारा फ़िल्टर करने का एक तरीका है।

autocmd FileType c,cpp,python,ruby,java autocmd BufWritePre <buffer> :%s/\s\+$//e

हर फ़ाइल: ऑटोकैड फ़ाइल टाइप * ऑटोकैड BufWritePre <बफर>:% s / \ s \ + $ // e
JREAM

7

Http://blog.kamil.dworakowski.name/2009/09/unobtrusive-highlighting-of-trailing.html से कॉपी और पेस्ट किया गया (लिंक अब काम नहीं करता है, लेकिन आपके लिए आवश्यक बिट नीचे है)

"यह पंक्ति के अंत में आपके द्वारा टाइप किए गए प्रत्येक स्थान को उजागर करने का लाभ है, केवल जब आप एक फ़ाइल खोलते हैं या सम्मिलित मोड छोड़ते हैं। बहुत साफ है।"

highlight ExtraWhitespace ctermbg=red guibg=red
au ColorScheme * highlight ExtraWhitespace guibg=red
au BufEnter * match ExtraWhitespace /\s\+$/
au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
au InsertLeave * match ExtraWhiteSpace /\s\+$/

1
लगता है ब्लॉग लिंक मर गया है।
तोबियों

इस लिंक पर "मैच कमांड का उपयोग" के तहत एक ही समाधान पाया जाता है ।
ryanjdillon

6

मैंने इस समाधान को वीआईएम विकिया की एक टिप्पणी में देखा - अवांछित स्थान निकालें

मुझे बहुत अच्छा लगा। .अवांछित सफेद स्थानों पर जोड़ता है ।

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

इसको अपने में डालो .vimrc

" Removes trailing spaces
function TrimWhiteSpace()
  %s/\s*$//
  ''
endfunction

set list listchars=trail:.,extends:>
autocmd FileWritePre * call TrimWhiteSpace()
autocmd FileAppendPre * call TrimWhiteSpace()
autocmd FilterWritePre * call TrimWhiteSpace()
autocmd BufWritePre * call TrimWhiteSpace()

5

यह मैं कैसे कर रहा हूँ। मुझे याद नहीं है कि मैंने इसे tbh से कहाँ चुराया था।

autocmd BufWritePre * :call <SID>StripWhite()
fun! <SID>StripWhite()
    %s/[ \t]\+$//ge
    %s!^\( \+\)\t!\=StrRepeat("\t", 1 + strlen(submatch(1)) / 8)!ge
endfun

2
हम इसे "*" पर करना बहुत खतरनाक है यदि आप अंततः बाइनरी फ़ाइलों को खोलते हैं, तो वे बहुत खराब आकार में समाप्त हो सकते हैं।
Mat

हाँ शायद होशियार नहीं है, तो फिर मैं एक हेक्स संपादक के लिए भी विम का उपयोग नहीं करता हूं। जब तक आप बचाते हैं, तब तक यह निष्पादित नहीं होगा।
gregf

मुझे लगता है कि यह हर एक फ़ाइल प्रकार को सूचीबद्ध करने का विकल्प है जो आप काम कर सकते हैं, नहीं? मैं rb, php, cs, html, sass, css, js, coffee, xml, xslt, pl, etc, etc, आदि पर काम करता हूँ ... क्या कोई खुशहाल माध्यम है?
डेरेक प्री

4
जब तक आप द्विआधारी फ़ाइलों को विम में नहीं लिख रहे हैं, तब तक शायद यह कभी भी एक मुद्दा नहीं होगा।
gregf

यह पहले %sवैश्विक (छ) ध्वज के रूप में ईओएल पर एक अंतरिक्ष के रूप में बेकार है दिखाई देता है :-)
जेन्स

3

एक समाधान जो फ़ाइल से बस व्हाट्सएप को पीछे छोड़ता है वह सभी परिस्थितियों में स्वीकार्य नहीं है। यह एक ऐसी परियोजना में काम करेगा, जिसकी शुरुआत से ही यह नीति रही है, और इसलिए ऐसी कोई व्हाट्सएप नहीं है कि आपने अपनी आगामी प्रतिबद्धताओं में खुद को नहीं जोड़ा।

मान लीजिए कि आप केवल व्हाट्सएप के नए उदाहरणों को जोड़ने की इच्छा नहीं रखते हैं, बिना मौजूदा व्हाट्सएप को प्रभावित किए बिना, जो आपने संपादित नहीं किए हैं, ताकि आप अपने उन परिवर्तनों से मुक्त रह सकें जो आपके काम के लिए अप्रासंगिक हैं।

उस स्थिति में, गिट के साथ, आप इस तरह से एक स्क्रिप्ट का उपयोग कर सकते हैं:

#!/bin/sh

set -e # bail on errors

git stash save commit-cleanup
git stash show -p | sed '/^\+/s/ *$//' | git apply
git stash drop

यह कहना है, हम परिवर्तनों को रोकते हैं, और फिर +कार्यशील निर्देशिका में परिवर्तन को फिर से लागू करने के रूप में उनकी अनुगामी व्हाट्सएप को हटाने के लिए अलग-अलग सभी लाइनों को फ़िल्टर करते हैं। यदि यह कमांड पाइप सफल होता है, तो हम स्लैश छोड़ देते हैं।


1

यहाँ अन्य दृष्टिकोण किसी तरह से मैकविम में मेरे लिए काम नहीं किया जब .vimrcफ़ाइल में इस्तेमाल किया । तो यहाँ एक है कि क्या करता है और अनुगामी स्थानों पर प्रकाश डाला गया है:

set encoding=utf-8
set listchars=trail:·
set list

निष्पादित set listchars=trail:·कह रही: E474: Invalid argument: listchars=trail:·। क्या आप अपने उदाहरण को मान्य कर सकते हैं?
kenorb



0

जो लोग इसे विशिष्ट फ़ाइल प्रकारों के लिए चलाना चाहते हैं (FileTypes हमेशा विश्वसनीय नहीं होते हैं):

autocmd BufWritePre *.c,*.cpp,*.cc,*.h,*.hpp,*.py,*.m,*.mm :%s/\s\+$//e

या vim7 के साथ:

autocmd BufWritePre *.{c,cpp,cc,h,hpp,py,m,mm} :%s/\s\+$//e

0

यदि आप व्हाट्सएप ट्रिम करते हैं, तो आपको इसे केवल उन फ़ाइलों पर करना चाहिए जो पहले से ही साफ हैं। "जब रोम में..."। यह अच्छा शिष्टाचार है जब कोडबेस पर काम किया जाता है जहां गंभीर परिवर्तन अवांछित होते हैं।

यह फ़ंक्शन व्हॉट्सएप का पता लगाता है और ट्रिमिंग चालू करता है, अगर यह पहले से ही साफ हो।

इस विचार का श्रेय यहां एक टिप्पणी के रत्न को जाता है: https://github.com/atom/whitespace/issues/10 (अब तक का सबसे लंबा बग टिकट टिप्पणी स्ट्रीम)

autocmd BufNewFile,BufRead *.test call KarlDetectWhitespace()

fun! KarlDetectWhitespace()
python << endpython
import vim
nr_unclean = 0
for line in vim.current.buffer:
    if line.rstrip() != line:
        nr_unclean += 1

print "Unclean Lines: %d" % nr_unclean
print "Name: %s" % vim.current.buffer.name
cmd = "autocmd BufWritePre <buffer> call KarlStripTrailingWhitespace()"
if nr_unclean == 0:
    print "Enabling Whitespace Trimming on Save"
    vim.command(cmd)
else:
    print "Whitespace Trimming Disabled"
endpython
endfun

fun! KarlStripTrailingWhitespace()
    let l = line(".")
    let c = col(".")
    %s/\s\+$//e
    call cursor(l, c)
endfun

तुम भी खोज रजिस्टर रख सकता है let _s=@/और अंत `जाने पर इसे फिर से स्थापित @ / = _ इस मामले हम ब्लैक होल रजिस्टर का उपयोग कर रहे .इसके s`
SergioAraujo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.