Windows PowerShell 自定义快捷命令

**终端和 pwsh **

Windows Terminal 是一款高效、强大的开源新式终端应用程序,适用于命令提示符 ,** PowerShell WSL ** ​​ ​等Shell程序。 主要功能包括多个选项卡、简单、Unicode、和UTF-8字符支持,GPU加速文本渲染引擎以及自定义主题、样式和配置。

PowerShell 最早于 2006 年推出,从 2.0 版本开始内置在当时的 Windows 7 中,并且在每一代的 Windows 里都会预装。 PowerShell 已经成为一个跨平台的命令行界面,支持 Linux 和 macOS 操作系统,也占领了名字里「Windows」的远端。 PowerShell 是面向现代 GUI 环境和未来终端的工具。

PowerShell + Windows Terminal 也许是 Windows 环境下最优雅最高效的终端方案。 如果习惯了 Unix 和 GNU/Linux 环境下的操作,那 Windows 祖传的命令提示符 cmd.exe 就不好用了,其不支持 ls、pwd、cp、mv、rm 等常用命令,而是用微软特色命令来替代,不支持“ \ ~符号=用户目录”的特征,快捷键也残缺。 现代的 PowerShell 不仅解决了这些问题,还支持用户各种自定义指令、美化方案等,更加现代和强大!

** PowerShell 配置**

PowerShell的默认配置文件为\ $ PROFILE,路径可通过 echo $PROFILE来查看,一般是 ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 。 通过文本编辑器来修改它,创建自己的终端环境,打开新的PowerShell窗口,此配置会被加载一次。

配置主题和补全

[ ** oh-my-posh ** ] ( https://ohmyposh.dev/ ) ​ ​是对标 oh-my-zsh 的主题配置,总的来说我觉得它提供的主题比 omz 好看。 可参考[ 这篇帖子 ] ( https://blog.csdn.net/Likianta/article/details/124950605 )来配置。 终端常用功能命令补全可参考[ 本文帖子 ] ( https://www.cnblogs.com/world-explorer/p/16500936.html )来配置(有报错几乎很大概率是版本问题,终端管理员打开+如果卸载重装)。 我的局部配置如下:

** PowerShell **




# 配置 oh-my-posh 的主题
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\capr4n.omp.json" | 调用表达式
# oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\tonybaloney.omp.json" | 调用表达式
# oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\M365Princess.omp.json" | 调用表达式
# oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/jandedobbeleer.omp.json" | 调用表达式


导入模块 PSReadLine

Set-PSReadlineKeyHandler-Chord Tab-Function MenuComplete #Tab键补全

#右箭头补全历史命令,更符合直觉
设置 PSReadLineOption -PredictionSource 历史记录

# 还有一些帖子推荐下面这个右箭头选择历史命令,但是我觉得不好用,不如上面的
# Set-PSReadLineKeyHandler -Key RightArrow -Function HistorySearchBackward ```


PowerShell

复制

我的 omp 主题是 capr4n ,Windows Terminal 还可以为不同的 shell 应用自定义壁纸和字体颜色:


#### **编写书签函数**

PowerShell编写的函数非常简单,简单的一看语法就懂,稍微复杂点的直接让ChatGPT生成就行。 这里我搞的很多命令本质就是给长命令取别名\ ~在\ $ PROFILE 中添加:

###**壳**

``` shell Function me { Set-Location $env:USERPROFILE } # 即刻 cd ~ 命令

函数 cdssh { cd $env:USERPROFILE\.ssh && ls}
Function sc { cd ~/.ssh && code config } # 编辑 ssh 配置
Function cdd { cd $env:USERPROFILE\Desktop } # 返回桌面目录
Function cdob { cd E:\daleobs\obsidians\ } # 我的黑曜石仓库
功能 ip { ipconfig | findstr IPv4 } # 简单粗暴显示所有ipv4地址,不显示其他内容
函数 ipa { ipconfig /all }    
函数 vim { nvim $args } # neovim 是的!
函数 dale { ping www.dalechu.life }
Function ed { explorer .} #打开当前文件夹
Function exp { explorer $args } #打开指定的文件夹
函数 ns { netstat $args }
函数 cap { cat $PROFILE}
函数 cop { 代码 $PROFILE}
Function co { code $args } # 使用 VS Code 编辑文件
Function m { micro $args } # micro 是与 nano 类似的终端文本编辑器
函数 mk { mkdir $args }
函数 pth { python $args }
函数 nn { nano $args }
函数 na { nano $args }
Function nvims { nvim ~\AppData\Local\nvim\init.vim } # 编辑 neovim 配置

# git 相关
函数 gcl { git clone $args }
函数 gcm { git commit -m $args }
函数 gpom { git push origin main }
函数 gp { git push }
函数 gpu { git pull }
函数 gpull { git pull }
函数 ga { git add $args }
函数 gitconfig { 代码 ~/.gitconfig }
函数同步 { cdob && ./sync.bat} ```


壳

复制

下面这个长函数` py`的作用是:输入` py`直接回车,它会检查当前目录下的.py文件,如果没有一个就直接执行,若有多个文件则给出一个列表,用户输入对应程序的编号再回车就会执行。` py `后也可以接参数(即 .py 文件名)来执行此文件。 这比传统的` python filename.py`命令还是方便很多的。

###**壳**

``` shell函数 py {

    参数(
        [字符串]$scriptName
    )

    如果 ($scriptName) {
        # 如果提供了参数,直接运行指定的 .py 文件
        如果(测试路径 $scriptName){
            python $脚本名称
        } 别的 {
            Write-Host "文件 $scriptName 不存在"
        }
    } 别的 {
        # 获取当前文件夹下的所有.py文件
        $pyFiles = Get-ChildItem -Path "." -Filter "*.py"

        如果 ($pyFiles.Count -eq 0) {
            Write-Host "当前文件夹下没有.py文件"
            返回
        }

        如果 ($pyFiles.Count -eq 1) {
            # 如果只有一个.py文件,直接运行
            python $pyFiles[0].全名
        } 别的 {
            # 如果有多个.py文件,列出所有文件,并让用户选择
            Write-Host "请选择要运行的.py文件:"
            对于 ($i = 0; $i -lt $pyFiles.Count; $i++) {
                写入主机“$($i + 1).$($pyFiles[$i].Name)”
            }

            $selection = Read-Host "输入编号"
            
            如果 ($selection -match '^\d+$' -and $selection -gt 0 -and $selection -le $pyFiles.Count) {
                $selectedFile = $pyFiles[$selection - 1].全名
                python $selectedFile
            } 别的 {
                Write-Host "无效的选择"
            }
        }
    }
` ``


壳

复制

gall 函数为 git 的` add . ` , ` commit`和` push`到main的一条龙服务:

###**壳**

``` shell # 其实我总感觉这个命令挺危险的,但是看起来还是人畜无害的...

功能 gall
    # 提示用户输入提交信息
    $commitMessage = Read-Host "请输入提交信息"

    如果(-not $commitMessage){
        Write-Host "错误:提交信息不能为空"
        返回
    }

    git 添加。
    如果 ($LASTEXITCODE -ne 0) {
        写入主机“错误:git add 失败”
        返回
    }

    git commit -m $提交消息
    如果 ($LASTEXITCODE -ne 0) {
        写入主机“错误:git提交失败”
        返回
    }

    git push
    如果 ($LASTEXITCODE -ne 0) {
        写入主机“错误:git推送失败”
        返回
    }

    写主持人“成功:代码已工作并积极”
` ``


壳

复制

下面这个其实和\ $ PROFILE无关了,它是一个单独的.ps1脚本,功能:当你的剪贴板最新内容是一条git仓库链接时(比如[ https://github.com/Anduin2017/HowToCook.git ] ( https://github.com/Anduin2017/HowToCook.git ) ),它可以将仓库克隆到桌面上并使用打开VS Code文件夹。 为此创建一个快捷方式放到开始菜单里,单击“按 Windows 键 + 输入方式名称”就可以代替“回到桌面 + 右键或打开命令行窗口来 git clone + 使用 VS Code 打开此文件夹”的操作。

###**壳**

``` shell $giturl = Get-Clipboard


#判断$giturl中是否包含“.git”字符串,如果没有就退出程序,如果有就继续执行
如果 ($giturl -notmatch ".git") {
    写入输出“不是 git url”
    出口
}

写入输出“url 是 $giturl”

$repo_name = $giturl -replace '^.*/|(?=\.git).*', ''
写入输出“尝试克隆$repo_name”

cd ~/桌面
git clone $giturl
cd ./$repo_name
代码 。

写入输出“完成^_^”
退出```