プロジェクト名
Linux 風 PowerShell (パワーシェル)プロファイル
目的
著者はもともとLinuxかMacで開発勉強してたので、慣れない PowerShell のプロファイルを Linux 風にして使いやすくしました。
設定内容
ウィドウタイトルをカレントディレクトリを表示する。
プロンプトもカレントディレクトリのみを表示する。
git の状態をプロンプトに表示する。
git buranch 名をプロンプトに表示しる。
デフォルトでホームディレクトリから開始する。
[workspace] >
[codebase] (main) * > //コミット判定 False
[codebase] (main) > //コミット判定 Clean
インストール
始める前に、既にプロファイルがある場合は、バックアップする事をお勧めします。
Copy-Item -Path $PROFILE -Destination "$PROFILE.bak"
- PowerShell を開いて、次のコマンドでプロファイルの場所を表示します。
$PROFILE
- プロファイルファイルのパスがかえされるので、エクスプローラで開きます。
- プロファイルがない場合は次のコマンドをターミナルから実行して空のプロファイルを作成することができます。
if (!(Test-Path -Path $PROFILE)) {
New-Item -Type File -Path $PROFILE -Force
}
- 空のプロファイルを作成したら。または、既存のプロファイルを本リポジトリの
Microsoft.PowerShell_profile.ps1
と置き換えるか、用途に合わせて編集します。
"Microsoft.PowerShell_profile.ps1"
ウィドウタイトルの変更
# ターミナルのウィンドウタイトルをカレントディレクトリにする。
function Update-WindowTitle {
$homeDirectory = [System.Environment]::GetFolderPath("UserProfile")
$currentDirectory = Get-Location
if ($currentDirectory -eq $homeDirectory) {
$currentDirectory = "~"
} elseif ($currentDirectory -eq "C:\") {
$currentDirectory = "/"
} else {
$currentDirectory = Split-Path -Leaf $currentDirectory.Path
if ($currentDirectory -eq "C:") {
$currentDirectory = "/"
} else {
$currentDirectory = "$currentDirectory"
}
}
$title = "[$currentDirectory]"
$host.UI.RawUI.WindowTitle = $title
}
Git リポジトリの判定
# Git リポジトリの状態を判別。
function Test-GitRepository {
try {
git rev-parse --is-inside-work-tree 2>$null
if ($?) {
return $true
} else {
return $false
}
} catch {
return $false
}
}
Git ブランチの判定
# Git ブランチの状態を判定する
function Get-GitBranch {
if (-not (Test-GitRepository)) {
return $false
}
try {
$branch = git rev-parse --abbrev-ref HEAD 2>$null
if ($branch) {
return $branch
}
} catch {
return $false
}
return $false
}
Git コミット状況の判定
# コミット判定
function Get-GitStatus {
if (-not (Test-GitRepository)) {
return $false
}
try {
$status = git status --porcelain 2>$null
if ($status) {
return "Dirty"
} else {
return "Clean"
}
} catch {
return $false
}
}
集積した内容の反映
# カレントディレクトリが変更されるたびにウィンドウタイトルを更新し、プロンプトを設定する
function Set-Prompt {
Update-WindowTitle
$currentDirectory = Get-Location
$branchName = if (Test-GitRepository) {
$branch = Get-GitBranch
if ($branch -ne $false) {
" ($branch)"
} else {
""
}
} else {
""
}
$gitStatus = if (Test-GitRepository) {
$status = Get-GitStatus
if ($status -eq "Dirty") {
" *"
} elseif ($status -eq "Clean") {
""
} else {
""
}
} else {
""
}
if ($currentDirectory -eq [System.Environment]::GetFolderPath("UserProfile")) {
$currentDirectory = "~"
} else {
$currentDirectory = Split-Path -Leaf $currentDirectory.Path
}
# # デバッグ出力
# Write-Host "Debug: Current Directory = $currentDirectory"
# Write-Host "Debug: Branch Name = $branchName"
# Write-Host "Debug: Git Status = $gitStatus"
"[$currentDirectory]$branchName$gitStatus > "
}
# プロンプト関数を変更
function prompt {
Set-Prompt
}
# 初回実行
Update-WindowTitle
# PowerShell起動時にホームディレクトリに移動
Set-Location ([System.Environment]::GetFolderPath("UserProfile"))
- 変更内容は、ターミナルを再起動するか次のコマンドを実行して反映できます。
. $PROFILE
以上
ライセンス
このプロジェクトは MIT のもとで公開されています。詳細は LICENSE.txt を参照してください。
リコール
完成後の状態。
メモ
-
PowerShell スクリプトは下記のサイトで紹介されています。
マイクロソフト本家は管理者向けで、ドスパラさんで紹介されている内容の方が初見の方向けって感じです。 -
著者はそんなにPowerShellスクリプトに詳しい訳ではないので、AI と一緒に共同作業しました。
-
著者の AI くんはバグった時の原因切り分けとかが 苦手なので、主にデバッグで エラー が出た時に切り分け手順の作成と要件定義を担当しました。