15KB
公開:

2025/04/29

 PowerShellのプロファイルを設定する。
 PowerShellのConfigは$PROFILEにある。なければ作成する。

# 参考:https://sheepla.github.io/sheepla-note/posts/powershell-customization/
New-Item -Type File -Path $PROFILE -Force

 こういう機能にあまり興味がないので、まだ3つしかない。いろいろなところから拾っている。
 真ん中のfunctionは、プロンプトのところの表示をいい感じにするためのコードで、ほとんどAIに書いてもらった。画面共有するのにユーザー名は出てほしくないけれど、ドライブ名は常に出てほしいし、カレントディレクトリも表示してほしい、というあまり興味がないと言うにはあまりにも強いこだわりにより、やけに長いものになった。
 無茶苦茶な要求にAIも辟易していそうだったけれど、おかげで満足行くConfigが書けた。

# zsh-like tab completion
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete

function prompt {
     $currentDir = (Convert-Path .)

     if ($currentDir.Contains($HOME)) {
         $currentDir = $currentDir.Replace($HOME, "~")
     }

     if ($currentDir.Length -gt 40) {
         $currentDirectoryName = Split-Path -Leaf $currentDir
         $parentPath = Split-Path -Parent $currentDir

         if ($parentPath) {
             $maxLengthForParent = 40 - $currentDirectoryName.Length - 3 - 2 # "..." と区切り文字、少しの余裕を持たせる
             if ($maxLengthForParent -lt 0) {
                 $maxLengthForParent = 0 # 親パスに割り当てる長さが負の数にならないようにする
             }
             if ($parentPath.Length -gt $maxLengthForParent) {
                 $prefixLengthForParent = [Math]::Floor($maxLengthForParent * 1 / 3)
                 $suffixLengthForParent = $maxLengthForParent - $prefixLengthForParent
                 $parentPath = $parentPath.Substring(0, $prefixLengthForParent) + "..." + $parentPath.Substring($parentPath.Length - $suffixLengthForParent)
             }
             $currentDir = Join-Path -Path $parentPath -ChildPath $currentDirectoryName
         } else {
             # 親パスがない場合(ルートディレクトリなど)、先頭から省略
             $currentDir = "..." + $currentDir.Substring($currentDir.Length - 37) # ... とcurrentDir名で40文字以内
         }
     }

     $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
       else { '' }) + 'PS ' + $currentDir +
         $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
 }

# zoxide用
Invoke-Expression (& { (zoxide init powershell | Out-String) })

 そんなことよりも、コーディングのAutoCompletionのほうが整備したい。ZedでのRustの書き心地(写経しているだけだけど)がとても良くて(ZedはRustで書かれているというのは大きそう)、メインのエディタ(Sublime Text)や適当な環境(仮想環境内とか)、他の言語でも同じくらい型や関数の説明やSuggestなどがほしい、という気持ち。rust-analyzerが強いので、どんな環境でもそれなりのが得られはするけれど、Zedはとても良かった。VSCodeも普通によい。ただ、やはり少しマイナーなのを応援したいという気持ちがある。
 nvimで全部構築してCLIで一発Cloneすれば環境が整う、みたいな感じにしたい。
 GUIで言うと、学生なのでRustRoverとかのJetBrainsのも使って(使わせてもらって)いて、これは重めだけどインストールするだけで大体使える環境が出来上がっていて体験が良い。
 また、Windows以外では基本的にzshを使っているので、こっちの設定も作っていきたいという気持ち。ただ、zshは素の状態でもそれなりに使えて、ほとんどいじっていない。常にgit使う人だったらstarshipみたいなのを入れてもいいと思うんだけれど、jjとか使っているし、なかなかうまくはいかない。

 色々触ってはいるものの、どれもよく使う操作Top5くらいしか使えるようになっておらず、ショートカットやコマンドが身についていないので、これが一番良くないと思っている。今も、キーボードを組んだらショートカットを組み込んで、覚えますから…と言い訳なんかしちゃってる。
 英語配列もQWERTYから変えてみようかな、とか思ったりもするのだけれど、これに関しては相当ハードルが高くてどうにもなっていない。Vimの操作とかどうなっちまうんだ…ってなってる。iでインサートとかそういうのちゃんとあるのがぐちゃぐちゃになるのが怖い。

 以上、私の最近のソフトウェア周りの雑談でした。