跳至内容

关于 . $PROFILE

TIP

  • . $PROFILE 会重新加载 PowerShell 配置文件
  • 它会影响 PSCompletions 的补全菜单
  • 因此,在使用 . $PROFILE 后,需要重新运行 psc 来重新加载补全菜单
  • 这是最简单直接的方式,无论你是以下哪种情况

psc menu config enable_menu 1

  • PSCompletions 使用以下方式来提供补全菜单

    • <key>psc menu config trigger_key 的值,默认值为 Tab
    powershell
    Set-PSReadLineKeyHandler -Key <Key> -ScriptBlock {
      # ...
    }
  • 然而,在使用 . $PROFILE 之后

  • PowerShell 会自动重置按键绑定

    powershell
    Set-PSReadLineKeyHandler -Key Tab -Function TabCompleteNext
  • 同时,由于模块已经加载,模块中的相关按键绑定逻辑不再触发

  • 最终,补全菜单相关的按键绑定因被 TabCompleteNext 覆盖而失效

  • 因此,需要运行 psc 来重新加载按键绑定

psc menu config enable_menu 0

  • PSCompletions 使用 MenuComplete 来提供补全菜单
    • <key>psc menu config trigger_key 的值,默认值为 Tab
    powershell
    Set-PSReadLineKeyHandler -Key <Key> -Function MenuComplete
  • 然而,在使用 . $PROFILE 之后
  • PowerShell 会自动重置按键绑定
    powershell
    Set-PSReadLineKeyHandler -Key Tab -Function TabCompleteNext
  • 同时,由于模块已经加载,模块中的相关按键绑定逻辑不再触发
  • 最终,补全菜单相关的按键绑定因被 TabCompleteNext 覆盖而失效
  • 因此,需要运行 psc 来重新加载按键绑定

NOTE

  • 在这种情况下,你可以在 $PROFILE 中显式指定按键绑定来解决问题
    powershell
    Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
  • 它应该在 Import-Module PSCompletions 之前
  • 参考 正确的导入顺序