কোনও ফাইল সংরক্ষণের সময় প্রতিটি লাইনের শেষে স্বয়ংক্রিয়ভাবে শ্বেতক্ষেত্রের অক্ষরগুলি সরাতে ভিজ্যুয়াল স্টুডিও ২০০৮ কনফিগার করা সম্ভব? কোনও অন্তর্নির্মিত বিকল্প বলে মনে হচ্ছে না, তাই এটি করার জন্য কি কোনও এক্সটেনশন উপলব্ধ?
কোনও ফাইল সংরক্ষণের সময় প্রতিটি লাইনের শেষে স্বয়ংক্রিয়ভাবে শ্বেতক্ষেত্রের অক্ষরগুলি সরাতে ভিজ্যুয়াল স্টুডিও ২০০৮ কনফিগার করা সম্ভব? কোনও অন্তর্নির্মিত বিকল্প বলে মনে হচ্ছে না, তাই এটি করার জন্য কি কোনও এক্সটেনশন উপলব্ধ?
উত্তর:
কোডমেইড একটি খুব জনপ্রিয় ভিজ্যুয়াল স্টুডিও এক্সটেনশন এবং এটি অন্যান্য দরকারী ক্লিনআপগুলির সাথে স্বয়ংক্রিয়ভাবে এটি করে।
আমি সেভ করে একটি ফাইল সাফ করার জন্য সেট করেছি, এটি আমার বিশ্বাস ডিফল্ট।
নিয়মিত এক্সপ্রেশন ব্যবহার করে সন্ধান করুন / প্রতিস্থাপন করুন
অনুসন্ধান এবং প্রতিস্থাপন কথোপকথনে, অনুসন্ধান বিকল্পগুলি প্রসারিত করুন , ব্যবহার পরীক্ষা করুন , নিয়মিত এক্সপ্রেশন চয়ন করুন
কি সন্ধান করুন : " :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_guidlines.vsmacros এর থেকে পরিবর্তন করেছিলাম যা দ্রুত গুগল অনুসন্ধানের সাথে পাওয়া যায়।
আপনি এই তিনটি ক্রিয়া সহ সহজেই এটি করতে পারেন:
Ctrl+ A(সমস্ত পাঠ্য নির্বাচন করুন)
সম্পাদনা করুন -> উন্নত -> অনুভূমিক সাদা স্থান মুছুন
সম্পাদনা করুন -> উন্নত -> ফর্ম্যাট নির্বাচন
কয়েক সেকেন্ড অপেক্ষা করুন এবং সম্পন্ন করুন।
এটা তোলে এর Ctrl+ + Z'কেস কিছু সক্ষম ভুল হয়েছে।
ইতিমধ্যে প্রদত্ত সমস্ত উত্তর থেকে উপাদান গ্রহণ করা, আমি এখানে কোডটি দিয়ে শেষ করেছি। (আমি মূলত সি ++ কোড লিখি তবে প্রয়োজন অনুসারে বিভিন্ন ফাইল এক্সটেনশনের জন্য এটি পরীক্ষা করা সহজ))
যারা অবদান রেখেছেন তাদের সবাইকে ধন্যবাদ!
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
আপনি রিজেক্স অনুসন্ধানগুলি ব্যবহার করে হোয়াইটস্পেস সরিয়ে এবং পুনর্লিখনের মন্তব্যগুলিতে বর্ণিত ম্যাক্রো ব্যবহার করতে পারেন
দুর্ভাগ্যক্রমে আমি ভিডাব্লুডি 2010 এক্সপ্রেস ব্যবহার করছি যেখানে ম্যাক্রো সমর্থিত নয়। সুতরাং আমি কেবল নোটপ্যাড ++ শীর্ষ বাম মেনুতে Edit
> অনুলিপি / পেস্ট করি Blank Operations
> Trim Trailing Space
অন্যান্য অন্যান্য সম্পর্কিত ক্রিয়াকলাপগুলি উপলব্ধ। তারপরে ভিজ্যুয়াল স্টুডিওতে কপি / পেস্ট করুন।
কেউ নোটপ্যাড ++ এর পরিবর্তে নেটবিয়ান ব্যবহার করতে পারেন , যার "উত্স" মেনুতে "ট্রেলারিং স্পেসস সরান" রয়েছে।
যদি না এটি এক ব্যক্তির প্রকল্প হয় তবে এটি করবেন না। আপনার উত্স কোডের সংগ্রহস্থলের তুলনায় আপনার স্থানীয় ফাইলগুলিকে পৃথক করার জন্য এটি তুচ্ছ হয়ে উঠবে এবং সাদা স্থান স্পষ্ট করা আপনার লাইন পরিবর্তন করতে হবে না। আমি সম্পূর্ণ বুঝতে পারি; আমি আমার সাদা স্থানটিকে সমস্ত ইউনিফর্ম পেতে ভালবাসি - তবে এটি ক্লিনার সহযোগিতার জন্য আপনার ছেড়ে দেওয়া উচিত।
আমি মনে করি যে জেফ মুইর সংস্করণটি কেবলমাত্র কোড কোড ফাইলগুলিকে ছাঁটাই করলে (আমার ক্ষেত্রে সি #, তবে আরও এক্সটেনশন যুক্ত করা সহজ) হলে কিছুটা উন্নতি হতে পারে। এছাড়াও নথির উইন্ডোটি দৃশ্যমান তা নিশ্চিত করার জন্য আমি একটি চেক যুক্ত করেছি কারণ চেক ব্যতীত কিছু পরিস্থিতি আমাকে অদ্ভুত ত্রুটি দেখায় (উদাহরণস্বরূপ, লিংক থেকে এসকিউএল ফাইল '* .dbML'))
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
আমি এটি করতে আর্টিকস্টাইল স্টাইল (সি ++) ব্যবহার করি এবং আমার কোডটি পুনরায় ফর্ম্যাট করি। যাইহোক, আমাকে এটি একটি বাহ্যিক সরঞ্জাম হিসাবে যুক্ত করতে হয়েছিল এবং আপনাকে এটি নিজেরাই ট্রিগার করতে হবে যাতে আপনি এটি পছন্দ না করেন।
যাইহোক, আমি এটি দেখতে পেয়েছি যে আমি কোডটি আরও কাস্টম পদ্ধতিতে পুনরায় ফর্ম্যাট করতে পারি (উদাহরণস্বরূপ, মাল্টলাইন ফাংশন পরামিতি) যা আমি নিজে নিজে চালনার মূল্য দিতে পারি। সরঞ্জামটি বিনামূল্যে is
ডায়াসের জবাব এবং একটি সংযুক্ত প্রতিবেদনের নিয়মিত প্রকাশের ভিত্তিতে তৈরি করা , এখানে এমন একটি ম্যাক্রো রয়েছে যা সমস্ত সংরক্ষণ করে, ট্যাবগুলিকে স্থানগুলির সাথে প্রতিস্থাপন করে না এবং স্থির পরিবর্তনশীলের প্রয়োজন হয় না। এটা কি সম্ভব? এটি কিছুটা ধীর বলে মনে হচ্ছে, সম্ভবত একাধিক কল করার কারণে 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
কী চলছে তা দেখার জন্য আমি ডিবাগ বার্তা বাক্সগুলি যুক্ত করেছি। এটি খুব স্পষ্ট করে দিয়েছে যে একাধিক ফাইল সেভ কাজ করছে না। আপনি যদি তাদের সাথে খেলতে চান তবে এই লাইনগুলিকে অস্বচ্ছন্দ করুন।
মূল পার্থক্যটি ডকুমেন্টটি ব্যবহার করছে documentআপনিভেট করা () ডকুমেন্টটিকে সম্মুখভাগ সক্রিয় বর্তমান নথিতে জোর করতে। ফলাফলটি যদি 4 হয় তবে এর অর্থ হ'ল পাঠ্যটি প্রতিস্থাপন করা হয়েছিল। জিরো মানে কিছুই হয়নি। আপনি প্রতিটি ফাইলের জন্য দুটি সেভ দেখতে পাবেন। প্রথমটি প্রতিস্থাপন করবে এবং দ্বিতীয়টি কিছুই করবে না। সম্ভবত সেভ ফাইলটি লিখতে না পারলে সমস্যা হতে পারে তবে আশা করি এমনটি ঘটলে এই ইভেন্টটি ডাকা হবে না।
মূল স্ক্রিপ্টের আগে, ভিজুয়াল স্টুডিওতে স্ক্রিপ্টটি কীভাবে কাজ করে তা সম্পর্কে আমি অসচেতন ছিলাম। এটি সামান্য অবাক হওয়ার বিষয় যে এটি ভিজ্যুয়াল বেসিকটিকে প্রধান ইন্টারফেস হিসাবে ব্যবহার করে তবে এটি যা করা দরকার তা ঠিক ঠিক কাজ করে।
একটি সরল সংযোজন হ'ল সংরক্ষণের সময় গাড়ীর রিটার্ন সরিয়ে ফেলা।
' Remove all the carriage returns.
result = DTE.Find.FindReplace(vsFindAction.vsFindActionReplaceAll, _
"\x000d\x000a", _
vsFindOptions.vsFindOptionsRegularExpression, _
"\x000a", _
vsFindTarget.vsFindTargetCurrentDocument, , , _
vsFindResultsLocation.vsFindResultsNone)
এই কাজের মূল কীটি \ x000d \ x000a থেকে to x000a এ পরিবর্তন করছে is Pre x উপসর্গটি একটি ইউনিকোড প্যাটার্ন নির্দেশ করে। এটি লিনাক্স সিস্টেমগুলির জন্য উত্স ফাইলগুলি প্রস্তুত করার প্রক্রিয়াটি স্বয়ংক্রিয় করবে।