2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

開発者向け PowerShell 用に Linux 風プロファイルを作ってみた。

Posted at

プロジェクト名

Linux 風 PowerShell (パワーシェル)プロファイル

目的

著者はもともとLinuxかMacで開発勉強してたので、慣れない PowerShell のプロファイルを Linux 風にして使いやすくしました。

設定内容

ウィドウタイトルをカレントディレクトリを表示する。
プロンプトもカレントディレクトリのみを表示する。
git の状態をプロンプトに表示する。
git buranch 名をプロンプトに表示しる。
デフォルトでホームディレクトリから開始する。

[workspace] >
[codebase] (main) * > //コミット判定 False
[codebase] (main) >  //コミット判定 Clean

インストール

始める前に、既にプロファイルがある場合は、バックアップする事をお勧めします。

Copy-Item -Path $PROFILE -Destination "$PROFILE.bak"
  1. PowerShell を開いて、次のコマンドでプロファイルの場所を表示します。
$PROFILE
  1. プロファイルファイルのパスがかえされるので、エクスプローラで開きます。
  2. プロファイルがない場合は次のコマンドをターミナルから実行して空のプロファイルを作成することができます。
if (!(Test-Path -Path $PROFILE)) {
    New-Item -Type File -Path $PROFILE -Force
}
  1. 空のプロファイルを作成したら。または、既存のプロファイルを本リポジトリの 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"))
  1. 変更内容は、ターミナルを再起動するか次のコマンドを実行して反映できます。
. $PROFILE

以上

ライセンス

このプロジェクトは MIT のもとで公開されています。詳細は LICENSE.txt を参照してください。

リコール

完成後の状態。

Screenshot_2024-07-29_172326.png

メモ

📌 まとめ:コードとドキュメントは https://github.com/meiob/psscdev に公開してあります。参考にしたい方は、どうぞ。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?