取消

Powershell增强:命令补全


安装插件

安装 PSReadLine

PSReadLine 提供了语法高亮、错误提示、多行编辑、键绑定、历史记录搜索等功能:

Install-Module PSReadLine

安装 posh-git

posh-git 可以在 PowerShell 中显示 Git 状态信息,并提供 Git 命令的自动补全:

Install-Module posh-git

配置插件

自定义配置 执行以下命令,第一次会显示找不到该文件,选择创建新文件:

notepad $profile

作用是在 PowerShell 启动时运行一些自定义的设置,比如导入模块、设置别名、定义函数等。

粘贴以下配置内容,可以参考注释根据自己需求修改或者删除:


#------------------------------- Import Modules BEGIN -------------------------------
# 引入 ps-read-line
Import-Module PSReadLine

# 引入 posh-git
Import-Module posh-git

#------------------------------- Import Modules END   -------------------------------

#-------------------------------  Set Hot-keys BEGIN  -------------------------------
# 设置预测文本来源为历史记录
Set-PSReadLineOption -PredictionSource History

# 每次回溯输入历史,光标定位于输入内容末尾
Set-PSReadLineOption -HistorySearchCursorMovesToEnd

# 设置 Tab 为菜单补全和 Intellisense
Set-PSReadLineKeyHandler -Key "Tab" -Function MenuComplete

# 设置 Ctrl+d 为退出 PowerShell
Set-PSReadlineKeyHandler -Key "Ctrl+d" -Function ViExit

# 设置 Ctrl+z 为撤销
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo

# 设置向上键为后向搜索历史记录
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

# 设置向下键为前向搜索历史纪录
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
#-------------------------------  Set Hot-keys END    -------------------------------

其他问题

解决警告: PowerShell 检测到你可能正在使用屏幕阅读器,并且已出于兼容性目的禁用 PSReadLine。如果要重新启用它,请运行 “Import-Module PSReadLine”

  1. 创建一个.ps1文件(名字随便取,比如xiufu_powershell.ps1),粘贴以下代码:
Add-Type -TypeDefinition '
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
public static class ScreenReaderFixUtil
{
    public static bool IsScreenReaderActive()
    {
        var ptr = IntPtr.Zero;
        try
        {
            ptr = Marshal.AllocHGlobal(sizeof(int));
            int hr = Interop.SystemParametersInfo(
                Interop.SPI_GETSCREENREADER,
                sizeof(int),
                ptr,
                0);
            if (hr == 0)
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }
            return Marshal.ReadInt32(ptr) != 0;
        }
        finally
        {
            if (ptr != IntPtr.Zero)
            {
                Marshal.FreeHGlobal(ptr);
            }
        }
    }
    public static void SetScreenReaderActiveStatus(bool isActive)
    {
        int hr = Interop.SystemParametersInfo(
            Interop.SPI_SETSCREENREADER,
            isActive ? 1u : 0u,
            IntPtr.Zero,
            Interop.SPIF_SENDCHANGE);
        if (hr == 0)
        {
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }
    }
    private static class Interop
    {
        public const int SPIF_SENDCHANGE = 0x0002;
        public const int SPI_GETSCREENREADER = 0x0046;
        public const int SPI_SETSCREENREADER = 0x0047;
        [DllImport("user32", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern int SystemParametersInfo(
            uint uiAction,
            uint uiParam,
            IntPtr pvParam,
            uint fWinIni);
    }
}'
if ([ScreenReaderFixUtil]::IsScreenReaderActive()) {
    [ScreenReaderFixUtil]::SetScreenReaderActiveStatus($false)
}

2.在PowerShell中运行这个文件 ` .\xiufu_powershell.ps1 ` 然后重启PowerShell,就解决了。

解决“无法加载文件 ***\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本”

想了解计算机上的现用执行策略,打开 PowerShell 然后输入:

>> get-executionpolicy
Restricted

更改执行策略,以管理员身份打开 PowerShell 输入:

>> set-executionpolicy remotesigned

选择“是”,即可。

如果要更改回Windows 客户端计算机的默认执行策略,则设置为restricted:

```cmd set-executionpolicy restricted ``


参考资料

本文会经常更新,请阅读原文: https://dashenxian.github.io/post/Powershell%E5%A2%9E%E5%BC%BA-%E5%91%BD%E4%BB%A4%E8%A1%A5%E5%85%A8 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com)

登录 GitHub 账号进行评论