โมดูลนี้จะแทนที่ประสบการณ์การแก้ไขบรรทัดคำสั่งของ PowerShell สำหรับเวอร์ชัน 3 ขึ้นไป มันมี:
ประสบการณ์ "นอกกรอบ" มีไว้เพื่อให้ผู้ใช้ PowerShell คุ้นเคยเป็นอย่างดี โดยไม่จำเป็นต้องเรียนรู้การกดปุ่มใหม่ๆ
แหล่งข้อมูลที่ดีเกี่ยวกับ PSReadLine
:
PSReadLine
PSReadLine
PSReadLine
ตามที่คุณต้องการ มีหลายวิธีในการติดตั้ง PSReadLine
คุณจะต้องใช้ PowerShellGet
เวอร์ชัน 1.6.0
หรือสูงกว่าเพื่อติดตั้ง 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 ล่าสุดมี PSReadLine
เวอร์ชัน 2.0.0-beta2
PowerShell เวอร์ชัน 6+ มี PSReadLine
เวอร์ชันก่อนวางจำหน่ายที่ใหม่กว่า
ด้วย PowerShellGet รุ่นตัวอย่างสำหรับ PowerShell V3/V4 การดาวน์โหลดจาก GitHub จะเลิกใช้แล้ว เราไม่ได้ตั้งใจที่จะอัปเดตการเผยแพร่บน GitHub และอาจลบการเผยแพร่ทั้งหมดออกจาก GitHub ในบางจุด
หากคุณใช้ Windows PowerShell เวอร์ชัน V5 หรือ V5.1 หรือใช้ PowerShell เวอร์ชัน 6+ คุณก็พร้อมแล้วและสามารถข้ามส่วนนี้ได้
มิฉะนั้น คุณจะต้องแก้ไขโปรไฟล์ของคุณเพื่อนำเข้าโมดูล ไฟล์โปรไฟล์ที่ใช้กันทั่วไปมีอยู่ 2 ไฟล์ และคำแนะนำสำหรับแต่ละไฟล์จะแตกต่างกันเล็กน้อย ไฟล์ 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 Gallery คุณสามารถเรียกใช้: 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 style ให้สมบูรณ์โดยไม่ต้องใช้โหมด 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 2 ข้อ
โปรดดูจรรยาบรรณของเราก่อนเข้าร่วมโครงการนี้
สำหรับปัญหาด้านความปลอดภัย โปรดดูนโยบายความปลอดภัยของเรา