تحل هذه الوحدة محل تجربة تحرير سطر الأوامر في PowerShell للإصدارات 3 وما فوق. وهو يوفر:
من المفترض أن تكون تجربة "الجاهزية" مألوفة جدًا لمستخدمي PowerShell - ولن تكون هناك حاجة لتعلم أي ضغطات مفاتيح جديدة.
بعض الموارد الجيدة حول PSReadLine
:
PSReadLine
.PSReadLine
.PSReadLine
حسب رغبتك. هناك طرق متعددة لتثبيت PSReadLine
.
ستحتاج إلى الإصدار 1.6.0
أو إصدار أعلى من PowerShellGet
لتثبيت أحدث إصدار تجريبي من PSReadLine
.
يأتي Windows PowerShell 5.1 بإصدار أقدم من PowerShellGet
الذي لا يدعم تثبيت الوحدات النمطية للإصدار التجريبي، لذلك يحتاج مستخدمو Windows PowerShell إلى تثبيت أحدث إصدار PowerShellGet
(إن لم يكن بعد) عن طريق تشغيل الأوامر التالية من جلسة Windows PowerShell مرتفعة:
Install-Module - Name PowerShellGet - Force
Exit
بعد تثبيت PowerShellGet
، يمكنك الحصول على أحدث إصدار تجريبي من PSReadLine
عن طريق التشغيل
Install-Module PSReadLine - AllowPrerelease - Force
إذا كنت تريد فقط الحصول على أحدث إصدار ثابت، فقم بتشغيل:
Install-Module PSReadLine
[!ملاحظة] ستحتوي الإصدارات التجريبية على ميزات أحدث وإصلاحات للأخطاء، ولكنها قد تقدم أيضًا مشكلات جديدة.
إذا كنت تستخدم Windows PowerShell على نظام التشغيل Windows 10 أو تستخدم PowerShell 6+، فهذا يعني أن PSReadLine
مثبت بالفعل. يحتوي Windows PowerShell على أحدث إصدار من Windows 10 على الإصدار 2.0.0-beta2
من PSReadLine
. تحتوي إصدارات PowerShell 6+ على الإصدارات التجريبية الأحدث من PSReadLine
.
مع إصدار المعاينة لـ PowerShellGet for PowerShell V3/V4، تم إيقاف التنزيلات من GitHub. لا ننوي تحديث الإصدارات على GitHub، وقد نقوم بإزالة الإصدار بالكامل من GitHub في مرحلة ما.
إذا كنت تستخدم إصدارات Windows PowerShell V5 أو V5.1، أو تستخدم إصدارات PowerShell 6+، فمن الجيد أن تتخطى هذا القسم.
بخلاف ذلك، ستحتاج إلى تعديل ملف التعريف الخاص بك لاستيراد الوحدة. هناك ملفان للملف الشخصي شائع الاستخدام وتختلف التعليمات قليلاً لكل منهما. يتم استخدام الملف C:Users[User]DocumentsWindowsPowerShellprofile.ps1
لجميع الأجهزة المضيفة (مثل ISE
و powershell.exe
). إذا كان لديك هذا الملف بالفعل، فيجب عليك إضافة ما يلي:
if ( $host .Name -eq ' ConsoleHost ' )
{
Import-Module PSReadLine
}
وبدلاً من ذلك، الملف C:Users[User]DocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1
مخصص لـ powershell.exe
فقط. باستخدام هذا الملف، يمكنك ببساطة إضافة:
Import-Module PSReadLine
وفي كلتا الحالتين، يمكنك إنشاء الملف المناسب إذا لم يكن لديك ملف بالفعل.
عند تشغيل أحد الأوامر المقترحة أدناه، تأكد من الخروج من كافة مثيلات powershell.exe
أو pwsh.exe
أو pwsh
، بما في ذلك تلك المفتوحة في محطات VSCode
.
ثم للتأكد من عدم تحميل PSReadLine
:
cmd.exe
أو powershell_ise.exe
أو عبر الاختصار Win+R
؛bash
أو zsh
). إذا كنت تستخدم إصدار PSReadLine
الذي يأتي مع Windows PowerShell، فستحتاج إلى تشغيل: powershell -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"
. ملاحظة: ستحتاج إلى التأكد من تحديث PowershellGet قبل تشغيل هذا الأمر.
إذا كنت تستخدم إصدار PSReadLine
الذي يأتي مع إصدارات PowerShell 6+، فأنت بحاجة إلى تشغيل: <path-to-pwsh-executable> -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"
.
إذا قمت بتثبيت PSReadLine
بنفسك من معرض PowerShell، فيمكنك ببساطة تشغيل: powershell -noprofile -command "Update-Module PSReadLine -AllowPrerelease"
أو <path-to-pwsh-executable> -noprofile -command "Update-Module PSReadLine -AllowPrerelease"
، اعتمادًا على إصدار PowerShell الذي تستخدمه.
إذا حصلت على خطأ مثل:
Remove-Item : Cannot remove item
C:Users{yourName}DocumentsWindowsPowerShellModulesPSReadLineMicrosoft.PowerShell.PSReadLine.dll: Access to the path
'C:Users{yourName}DocumentsWindowsPowerShellModulesPSReadLineMicrosoft.PowerShell.PSReadLine.dll' is denied.
أو تحذير مثل:
WARNING: The version '2.0.0' of module 'PSReadLine' is currently in use. Retry the operation after closing the applications.
إذن فأنت لم تقتل جميع العمليات التي حملت PSReadLine
.
لبدء الاستخدام، ما عليك سوى استيراد الوحدة:
Import-Module PSReadLine
لاستخدام روابط مفاتيح Emacs، يمكنك استخدام:
Set-PSReadLineOption - EditMode Emacs
لعرض روابط المفاتيح الحالية:
Get-PSReadLineKeyHandler
هناك العديد من خيارات التكوين، راجع خيارات Set-PSReadLineOption
. يحتوي PSReadLine
على تعليمات بشأن أوامر cmdlets الخاصة به بالإضافة إلى موضوع about_PSReadLine
- راجع هذه المواضيع للحصول على تعليمات أكثر تفصيلاً.
لتعيين روابط المفاتيح المخصصة الخاصة بك، استخدم cmdlet Set-PSReadLineKeyHandler
. على سبيل المثال، للحصول على تجربة أفضل للتاريخ، حاول:
Set-PSReadLineKeyHandler - Key UpArrow - Function HistorySearchBackward
Set-PSReadLineKeyHandler - Key DownArrow - Function HistorySearchForward
باستخدام هذه الارتباطات، سيعمل السهم لأعلى/السهم لأسفل مثل PowerShell/cmd إذا كان سطر الأوامر الحالي فارغًا. إذا قمت بإدخال بعض النص، فسوف يبحث في السجل عن الأوامر التي تبدأ بالنص الذي تم إدخاله حاليًا.
لتمكين إكمال نمط bash دون استخدام وضع Emacs، يمكنك استخدام:
Set-PSReadLineKeyHandler - Key Tab - Function Complete
فيما يلي مثال أكثر إثارة للاهتمام لما هو ممكن:
Set-PSReadLineKeyHandler - Chord ' " ' , " ' " `
- BriefDescription SmartInsertQuote `
- LongDescription " Insert paired quotes if not already on a quote " `
- ScriptBlock {
param ( $key , $arg )
$line = $null
$cursor = $null
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState([ ref ] $line , [ ref ] $cursor )
if ( $line .Length -gt $cursor -and $line [ $cursor ] -eq $key .KeyChar ) {
# Just move the cursor
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition( $cursor + 1 )
}
else {
# Insert matching quotes, move cursor to be in between the quotes
[ Microsoft.PowerShell.PSConsoleReadLine ]::Insert( " $ ( $key .KeyChar ) " * 2 )
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState([ ref ] $line , [ ref ] $cursor )
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition( $cursor - 1 )
}
}
في هذا المثال، عندما تكتب علامة اقتباس مفردة أو علامة اقتباس مزدوجة، هناك شيئان يمكن أن يحدثا. إذا لم يكن الحرف الذي يلي المؤشر هو الاقتباس المكتوب، فسيتم إدراج زوج من علامات الاقتباس المتطابقة ويتم وضع المؤشر داخل علامات الاقتباس المتطابقة. إذا كان الحرف الذي يلي المؤشر هو الاقتباس المكتوب، فسيتم تحريك المؤشر ببساطة بعد الاقتباس دون إدراج أي شيء. إذا كنت تستخدم Resharper أو أي محرر ذكي آخر، فستكون هذه التجربة مألوفة لك.
لاحظ أنه مع كتابة المعالج بهذه الطريقة، فإنه يتعامل بشكل صحيح مع التراجع - سيتم التراجع عن كلا الاقتباسين بتراجع واحد.
يحتوي نموذج ملف التعريف على مجموعة من الأمثلة الرائعة التي يمكنك التحقق منها. يتم تضمين هذا الملف عند تثبيت PSReadLine
.
راجع الطرق العامة لـ [Microsoft.PowerShell.PSConsoleReadLine]
لمعرفة الوظائف المضمنة الأخرى التي يمكنك تعديلها.
إذا كنت تريد تغيير سطر الأوامر بطريقة غير مطبقة في ربط المفتاح المخصص، فيمكنك استخدام الطرق التالية:
[ Microsoft.PowerShell.PSConsoleReadLine ]::GetBufferState
[ Microsoft.PowerShell.PSConsoleReadLine ]::Insert
[ Microsoft.PowerShell.PSConsoleReadLine ]::Replace
[ Microsoft.PowerShell.PSConsoleReadLine ]::SetCursorPosition
يرجى الاطلاع على دليل المساهمة لمعرفة كيفية التطوير والمساهمة.
لإنشاء PSReadLine
على أنظمة التشغيل Windows أو Linux أو macOS، يجب أن يكون لديك ما يلي مثبتًا:
InvokeBuild
و platyPS
يمكن استخدام البرنامج النصي للبناء build.ps1
لبدء المشروع وإنشائه واختباره.
./build.ps1 -Bootstrap
./build.ps1 -Configuration Debug -Framework net462
./build.ps1 -Configuration Debug -Framework netcoreapp2.1
./build.ps1 -Test -Configuration Debug -Framework net462
./build.ps1 -Test -Configuration Debug -Framework netcoreapp2.1
بعد الإنشاء، يمكن العثور على العناصر المنتجة على <your-local-repo-root>/bin/Debug
. لعزل الوحدة النمطية المستوردة الخاصة بك عن الوحدة المبنية محليًا، تأكد من تشغيل pwsh -NonInteractive -NoProfile
حتى لا يتم تحميل وحدة PSReadLine الافتراضية المثبتة تلقائيًا. بعد ذلك، قم بتحميل وحدة PSReadLine المبنية محليًا بواسطة Import-Module <your-local-repo-root>/bin/Debug/PSReadLine/PSReadLine.psd1
.
سجل التغيير متاح هنا.
تم ترخيص PSReadLine بموجب ترخيص BSD المكون من فقرتين.
يرجى الاطلاع على قواعد السلوك الخاصة بنا قبل المشاركة في هذا المشروع.
بالنسبة لأية مشكلات أمنية، يرجى الاطلاع على سياسة الأمان الخاصة بنا.