किसी फ़ाइल को सहेजते समय प्रत्येक पंक्ति के अंत में व्हाट्सएप वर्णों को स्वचालित रूप से हटाने के लिए विजुअल स्टूडियो 2008 को कॉन्फ़िगर करना संभव है? कोई अंतर्निहित विकल्प प्रतीत नहीं होता है, इसलिए क्या ऐसा करने के लिए कोई एक्सटेंशन उपलब्ध हैं?
किसी फ़ाइल को सहेजते समय प्रत्येक पंक्ति के अंत में व्हाट्सएप वर्णों को स्वचालित रूप से हटाने के लिए विजुअल स्टूडियो 2008 को कॉन्फ़िगर करना संभव है? कोई अंतर्निहित विकल्प प्रतीत नहीं होता है, इसलिए क्या ऐसा करने के लिए कोई एक्सटेंशन उपलब्ध हैं?
जवाबों:
CodeMaid एक बहुत ही लोकप्रिय Visual Studio एक्सटेंशन है और यह अन्य उपयोगी क्लीनअप के साथ स्वचालित रूप से करता है।
मैंने इसे सेव पर एक फाइल को साफ करने के लिए सेट किया है, जो मुझे लगता है कि डिफ़ॉल्ट है।
रेगुलर एक्सप्रेशंस का उपयोग करके खोजें / प्रतिस्थापित करें
ढूँढें और बदलें संवाद में, विकल्प खोजें , विस्तृत करें चेक का उपयोग करें , नियमित अभिव्यक्ति चुनें
क्या खोजें : " :Zs#$
"
इसके साथ बदलें : ""
सभी को बदलें पर क्लिक करें
अन्य संपादकों में (एक सामान्य नियमित अभिव्यक्ति पार्सर) " :Zs#$
" होगा " \s*$
"।
[^\S\r\n]+(?=\r?$)
[:Zs\t]#$
तो एक उपयोगी अनुकूलन है।
आप ऐसा मैक्रो बना सकते हैं जो आपके लिए ऐसा करने के लिए सहेजने के बाद निष्पादित होता है।
अपने मैक्रोज़ के लिए एन्वायरमेंटल इवेन्ट्स मॉड्यूल में निम्नलिखित जोड़ें।
Private saved As Boolean = False
Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _
Handles DocumentEvents.DocumentSaved
If Not saved Then
Try
DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
"\t", _
vsFindOptions.vsFindOptionsRegularExpression, _
" ", _
vsFindTarget.vsFindTargetCurrentDocument, , , _
vsFindResultsLocation.vsFindResultsNone)
' Remove all the trailing whitespaces.
DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
":Zs+$", _
vsFindOptions.vsFindOptionsRegularExpression, _
String.Empty, _
vsFindTarget.vsFindTargetCurrentDocument, , , _
vsFindResultsLocation.vsFindResultsNone)
saved = True
document.Save()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception")
End Try
Else
saved = False
End If
End Sub
मैं पिछले कुछ समय से बिना किसी समस्या के इसका उपयोग कर रहा हूं। मैंने मैक्रो नहीं बनाया, लेकिन इसे ace_guidelines.vsmacros में से एक से संशोधित किया, जिसे एक त्वरित सक्रिय खोज के साथ पाया जा सकता है।
आप इन तीन कार्यों के साथ आसानी से कर सकते हैं:
Ctrl+ A(सभी पाठ का चयन करें)
संपादित करें -> उन्नत -> क्षैतिज व्हाट्सएप हटाएं
संपादित करें -> उन्नत -> प्रारूप चयन
कुछ सेकंड रुकें और किया।
यह Ctrl+ Z'सक्षम होने की स्थिति में कुछ गलत हो गया।
पहले से दिए गए सभी उत्तरों से तत्वों को लेते हुए, यहाँ कोड मेरे साथ समाप्त हुआ। (मैं मुख्य रूप से C ++ कोड लिखता हूं, लेकिन आवश्यकतानुसार विभिन्न फ़ाइल एक्सटेंशनों की जांच करना आसान है।)
योगदान करने वाले सभी को धन्यवाद!
Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _
Handles DocumentEvents.DocumentSaved
Dim fileName As String
Dim result As vsFindResult
Try
fileName = document.Name.ToLower()
If fileName.EndsWith(".cs") _
Or fileName.EndsWith(".cpp") _
Or fileName.EndsWith(".c") _
Or fileName.EndsWith(".h") Then
' Remove trailing whitespace
result = DTE.Find.FindReplace( _
vsFindAction.vsFindActionReplaceAll, _
"{:b}+$", _
vsFindOptions.vsFindOptionsRegularExpression, _
String.Empty, _
vsFindTarget.vsFindTargetFiles, _
document.FullName, _
"", _
vsFindResultsLocation.vsFindResultsNone)
If result = vsFindResult.vsFindResultReplaced Then
' Triggers DocumentEvents_DocumentSaved event again
document.Save()
End If
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception")
End Try
End Sub
आप एक मैक्रो का उपयोग कर सकते हैं जैसे कि व्हाट्सएप को हटाने और टिप्पणियों को फिर से लिखना, रेगेक्स खोजों का उपयोग करके
मैं VWD 2010 एक्सप्रेस का उपयोग कर रहा हूँ जहाँ मैक्रोज़ समर्थित नहीं हैं, दुर्भाग्य से। तो मैं सिर्फ नकल करना / में पेस्ट Notepad ++ शीर्ष छोड़ दिया मेनू Edit
> Blank Operations
>Trim Trailing Space
वहाँ अन्य संबंधित संचालन उपलब्ध भी हैं। फिर कॉपी / पेस्ट वापस Visual Studio में।
नोटपैड ++ के बजाय नेटबिन का भी उपयोग किया जा सकता है , जिसमें "स्रोत" मेनू के तहत "ट्रेलिंग स्पेस निकालें" है।
जब तक यह एक-व्यक्ति परियोजना नहीं है, तब तक ऐसा न करें। यह आपके स्रोत कोड रिपॉजिटरी के खिलाफ आपकी स्थानीय फ़ाइलों को अलग करने के लिए तुच्छ हो गया है, और व्हाट्सएप को साफ़ करने से वे लाइनें बदल जाएंगी जिन्हें आपको बदलने की आवश्यकता नहीं है। मैं पूरी तरह समझ गया; मैं अपने व्हाट्सएप को सभी समान रूप से प्राप्त करना पसंद करता हूं - लेकिन यह कुछ ऐसा है जिसे आपको क्लीनर सहयोग के लिए छोड़ देना चाहिए।
मुझे लगता है कि जेफ मुइर संस्करण में थोड़ा सुधार किया जा सकता है यदि यह केवल स्रोत कोड फ़ाइलों को ट्रिम करता है (मेरे मामले में सी #, लेकिन अधिक एक्सटेंशन जोड़ना आसान है)। इसके अलावा मैंने यह सुनिश्चित करने के लिए एक चेक जोड़ा कि दस्तावेज़ विंडो दिखाई दे रही है क्योंकि उस चेक के बिना कुछ स्थितियाँ मुझे अजीब त्रुटियां दिखाती हैं (उदाहरण के लिए SQL फ़ाइलें '* .dbml' के लिए LINQ)।
Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) Handles DocumentEvents.DocumentSaved
Dim result As vsFindResult
Try
If (document.ActiveWindow Is Nothing) Then
Return
End If
If (document.Name.ToLower().EndsWith(".cs")) Then
document.Activate()
result = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, ":Zs+$", vsFindOptions.vsFindOptionsRegularExpression, String.Empty, vsFindTarget.vsFindTargetCurrentDocument, , , vsFindResultsLocation.vsFindResultsNone)
If result = vsFindResult.vsFindResultReplaced Then
document.Save()
End If
End If
Catch ex As Exception
MsgBox(ex.Message & Chr(13) & "Document: " & document.FullName, MsgBoxStyle.OkOnly, "Trim White Space exception")
End Try
End Sub
मुझे व्यक्तिगत रूप से ट्रेलिंग व्हॉट्सएप विज़ुअलाइज़र विज़ुअल स्टूडियो एक्सटेंशन से प्यार है, जिसका विजुअल स्टूडियो 2012 के माध्यम से समर्थन है।
मुझे लगता है कि मेरे पास इस मैक्रो का एक संस्करण है जो रिफलेक्टर पर VS2010 को क्रैश नहीं करेगा, और गैर-पाठ फ़ाइलों को सहेजते समय आईडीई को लटकाएगा भी नहीं। इसे इस्तेमाल करे:
Private Sub DocumentEvents_DocumentSaved( _
ByVal document As EnvDTE.Document) _
Handles DocumentEvents.DocumentSaved
' See if we're saving a text file
Dim textDocument As EnvDTE.TextDocument = _
TryCast(document.Object(), EnvDTE.TextDocument)
If textDocument IsNot Nothing Then
' Perform search/replace on the text document directly
' Convert tabs to spaces
Dim convertedTabs = textDocument.ReplacePattern("\t", " ", _
vsFindOptions.vsFindOptionsRegularExpression)
' Remove trailing whitespace from each line
Dim removedTrailingWS = textDocument.ReplacePattern(":Zs+$", "", _
vsFindOptions.vsFindOptionsRegularExpression)
' Re-save the document if either replace was successful
' (NOTE: Should recurse only once; the searches will fail next time)
If convertedTabs Or removedTrailingWS Then
document.Save()
End If
End If
End Sub
मैं ArtisticStyle का उपयोग करता हूं (C ++) का उपयोग करता हूं और अपने कोड को भी सुधारता हूं। हालाँकि, मुझे इसे एक बाहरी उपकरण के रूप में जोड़ना था और आपको इसे स्वयं ट्रिगर करना होगा ताकि आप इसे पसंद न करें।
हालांकि, मुझे यह उत्कृष्ट लगता है कि मैं अधिक कस्टम तरीके (उदाहरण के लिए, बहुस्तरीय फ़ंक्शन मापदंडों) में कोड सुधार कर सकता हूं कि मैं इसे मैन्युअल रूप से चलाने की कीमत का भुगतान कर सकता हूं। उपकरण नि: शुल्क है।
डायस के उत्तर पर और एक कनेक्ट रिपोर्ट से एक नियमित अभिव्यक्ति का निर्माण , यहां एक मैक्रो है जो सभी को बचाता है, रिक्त स्थान के साथ टैब को प्रतिस्थापित नहीं करता है, और एक स्थिर चर की आवश्यकता नहीं है। इसका संभव नकारात्मक पहलू? यह थोड़ा धीमा लगता है, शायद कई कॉल के कारण FindReplace
।
Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _
Handles DocumentEvents.DocumentSaved
Try
' Remove all the trailing whitespaces.
If vsFindResult.vsFindResultReplaced = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
"{:b}+$", _
vsFindOptions.vsFindOptionsRegularExpression, _
String.Empty, _
vsFindTarget.vsFindTargetFiles, _
document.FullName, , _
vsFindResultsLocation.vsFindResultsNone) Then
document.Save()
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception")
End Try
End Sub
किसी अन्य व्यक्ति ने विज़ुअल स्टूडियो 2012 ऐड-इन में इसका उपयोग करने का प्रयास किया है, मैंने जो नियमित अभिव्यक्ति का उपयोग किया है वह है [ \t]+(?=\r?$)
(यदि आवश्यक हो तो बैकस्लैश से बचना न भूलें)। मैं गाड़ी की वापसी से मेल खाने में असफल होने के कच्चे रूपांतरण के साथ समस्याओं को ठीक करने के कई प्रयासों के बाद यहां पहुंचा {:b}+$
।
अनुगामी व्हॉट्सएप को कैसे हटाया जाए, यह वास्तव में एक अच्छा उदाहरण है। इस मैक्रो का उपयोग करके मैंने जो कुछ खोजा है, उसके आधार पर मैं कुछ चीजें बदलूंगा। सबसे पहले, मैक्रो स्वचालित रूप से टैब को रिक्त स्थान में परिवर्तित करता है। यह हमेशा वांछनीय नहीं होता है और लोगों के लिए चीजों को बदतर बनाने की ओर ले जा सकता है जो टैब (आमतौर पर लिनक्स-आधारित) से प्यार करते हैं। टैब की समस्या वास्तव में अतिरिक्त व्हाट्सएप समस्या वैसे भी नहीं है। दूसरे, मैक्रो मानता है कि केवल एक फ़ाइल को एक बार में सहेजा जा रहा है। यदि आप एक साथ कई फ़ाइलों को सहेजते हैं, तो यह व्हाट्सएप को सही ढंग से नहीं हटाएगा। वजह साफ है। वर्तमान दस्तावेज़ को वह दस्तावेज़ माना जाता है जिसे आप देख सकते हैं। तीसरा, यह खोज परिणामों पर कोई त्रुटि जाँच नहीं करता है। ये परिणाम बेहतर बुद्धिमत्ता दे सकते हैं कि आगे क्या करना है। उदाहरण के लिए, यदि कोई व्हाट्सएप नहीं मिला है और उसे बदल दिया गया है, फ़ाइल को फिर से सहेजने की आवश्यकता नहीं है। सामान्य तौर पर, मुझे वैश्विक ध्वज को बचाने या नहीं होने की आवश्यकता पसंद नहीं थी। यह अज्ञात राज्यों के आधार पर परेशानी पूछने के लिए जाता है। मुझे संदेह है कि झंडा अनंत लूप को रोकने के लिए पूरी तरह से जोड़ा गया था।
Private Sub DocumentEvents_DocumentSaved(ByVal document As EnvDTE.Document) _
Handles DocumentEvents.DocumentSaved
Dim result As vsFindResult
'Dim nameresult As String
Try
document.Activate()
' Remove all the trailing whitespaces.
result = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
":Zs+$", _
vsFindOptions.vsFindOptionsRegularExpression, _
String.Empty, _
vsFindTarget.vsFindTargetCurrentDocument, , , _
vsFindResultsLocation.vsFindResultsNone)
'nameresult = document.Name & " " & Str$(result)
'MsgBox(nameresult, , "Filename and result")
If result = vsFindResult.vsFindResultReplaced Then
'MsgBox("Document Saved", MsgBoxStyle.OkOnly, "Saved Macro")
document.Save()
Else
'MsgBox("Document Not Saved", MsgBoxStyle.OkOnly, "Saved Macro")
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Trim White Space exception")
End Try
End Sub
मैंने डिबग संदेश बक्से जोड़े जो यह देखने के लिए कि क्या चल रहा था। इसने यह स्पष्ट कर दिया कि एकाधिक फ़ाइल सेव काम नहीं कर रहा था। यदि आप उनके साथ खेलना चाहते हैं, तो उन लाइनों को अनइंस्टॉल करें।
मुख्य अंतर दस्तावेज़ का उपयोग कर रहा है। सक्रिय करें () दस्तावेज़ को अग्रभूमि में सक्रिय वर्तमान दस्तावेज़ को बाध्य करने के लिए। यदि परिणाम 4 है, तो इसका मतलब है कि पाठ को बदल दिया गया था। शून्य का अर्थ होता है कुछ नहीं हुआ। आपको हर फाइल के लिए दो सेव दिखाई देंगे। पहला बदलेगा और दूसरा कुछ नहीं करेगा। संभावित रूप से परेशानी हो सकती है यदि सेव फ़ाइल नहीं लिख सकता है, लेकिन उम्मीद है कि ऐसा होने पर इस ईवेंट को कॉल नहीं किया जाएगा।
मूल स्क्रिप्ट से पहले, मैं इस बात से अनभिज्ञ था कि विजुअल स्टूडियो में स्क्रिप्टिंग कैसे काम करती है। यह थोड़ा आश्चर्य की बात है कि यह विज़ुअल बेसिक को मुख्य इंटरफ़ेस के रूप में उपयोग करता है लेकिन यह ठीक काम करता है कि इसे क्या करना है।
बचत के दौरान गाड़ी के रिटर्न को हटाने के लिए एक सरल जोड़ है।
' Remove all the carriage returns.
result = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
"\x000d\x000a", _
vsFindOptions.vsFindOptionsRegularExpression, _
"\x000a", _
vsFindTarget.vsFindTargetCurrentDocument, , , _
vsFindResultsLocation.vsFindResultsNone)
इस कार्य की कुंजी \ x000d \ x000a से \ x000a में बदल रही है। \ X उपसर्ग एक यूनिकोड पैटर्न को इंगित करता है। यह लिनक्स सिस्टम के लिए तैयार स्रोत फ़ाइलों को प्राप्त करने की प्रक्रिया को स्वचालित करेगा।