Windows のコマンドライン環境の整備

Windows 11 で PowerShell を中心としたコマンドライン環境を整えてみたので、忘れないうちに導入系のメモです。

昨今の Windows は winget コマンドでソフトウェアのインストールもアップグレードもできるので便利です。この記事でも導入に積極的に使っています。

https://learn.microsoft.com/ja-jp/windows/package-manager/winget/

winget コマンド ライン ツールを使用すると、Windows 10 および Windows 11 コンピューター上でアプリケーションを検出、インストール、アップグレード、削除、および構成することができます。 このツールは、Windows パッケージ マネージャー サービスに対するクライアント インターフェイスです。

winget で導入したパッケージの一括アップグレードコマンド:

# --accept-package-agreements はライセンス同意時に付与のこと
winget upgrade --all --accept-package-agreements

winget でパッケージを探す時のコマンド:

winget search Test #任意の文字列

ターミナル

ターミナルは (Windows) Terminal を使用。 導入:

winget install Microsoft.WindowsTerminal

PowerShell も WSL2 Linux も設定なしいけるので扱いやすいと思います。

設定フォント(PowerLine 含む)は HackGen NF を使わせていただいています。書体が綺麗でかつターミナルマルチプレクサなどを使ってもズレることもありません。

https://github.com/yuru7/HackGen/releases/tag/v2.9.0

白源 (はくげん/HackGen) は、プログラミング向け英文フォント Hack と、源ノ角ゴシックの派生フォント源柔ゴシックを合成したプログラミングフォントです。

外観設定:

Helix Editor の導入

ターミナル上で動作するスクリーンエディタである Helix Editor の導入。Rust でかかれています。なお、実行ファイル名は hx

https://helix-editor.com/

A post-modern text editor.

winget install Helix.Helix

モードがあるタイプの vim のようなテキストエディタで、標準で Language Server Protocol に対応しておりプログラミング向きです。

日本語入力についてはキャレットがずれてしまうなどがあり長文は厳しく、ソースコードコメント程度が入力できるかな、くらいで現在のところ考えた方が良さそうです。

使い方ですが、:tutor コマンドを入力するとチュートリアルファイルが開きますので、一通り下までやると覚えられると思います。また、操作に困った場合も、ESC, SPACE, ? するとファジーファインダー付きでアクションと操作一覧がでますので何とかなります。

vim から hx にくると手癖で苦戦するかもですが、、そうでなければ Helix のほうが操作系は統一されており、画面ヘルプも得やすいことから覚えやすいと感じました。(カーソルが単一幅の選択であり、x ではなく d なのだ、と念じて使うと分かりやすいす)

起動は hx . とカレントディレクトリを指定するとファイルピッカーが起動してくれます。(なお、ホームディレクトリなどファイル数が多いところで hx . をすると時間がかかるのでプロジェクトディレクトリまで cd した後に実行のこと)

複数ファイル編集時のバッファの移動は ESC, SPACE, b にて。プレビューもでて非常に便利です。

:config-open コマンドで Helix の主に見た目のコンフィグレーションをいくつかしています。設定ファイル保存後 :config-reload コマンドで即反映します。

theme = "dark_plus"

[editor]
cursorline = true
true-color = true
color-modes = true

[editor.soft-wrap]
enable = true

[editor.statusline]
right = ["diagnostics", "selections", "position", "total-line-numbers", "file-encoding", "file-type"]

[editor.file-picker]
max-depth = 6

[editor.indent-guides]
render = true
character = "│"

PowerShell 7 と Git と PowerLine と fzf とそれらの設定

PowerShell の 7 系を導入。 5 系と共存できます。

winget install Microsoft.PowerShell

PowerShell のコマンドプロンプトで PowerLine のような表示をする OhMyPosh と Git の導入。表示フォントは前述の HackGen NF を設定のこと。

# Git
winget install Git.Git
# OhMyPosh
winget install JanDeDobbeleer.OhMyPosh

ここで合わせて、コマンドラインでファイルのファジーファインドを行う fzf と PowerShell ラッパー PSFzf の導入。

PowerShell コマンドプロンプトから ctrl + t などの起動ショートカットにてインラインで画面が展開され、カレントディレクトリから再起でファイルを検索、補完入力できます。PowerShell でも便利。

# fzf
winget install junegunn.fzf
# fzf の PowerShell ラッパー
Install-Module -Name PSFzf -scope currentUser

PowerShell 環境のキーアサインや fzf の設定等々(fzf は Ctrl + t で起動するように):

# Helix で PowerSHell プロファイルを編集
hx $profile

# 以下内容 C:\Users\hiromasa\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
# oh-my-post のテーマは Get-PoshThemes で一覧できる
# oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\marcduiker.omp.json" | Invoke-Expression
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\paradox.omp.json" | Invoke-Expression

# Key アサインを Emacs 系に
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineKeyHandler -Key Tab -Function Complete
Set-PSReadLineOption -EditMode Emacs
Set-PSReadLineOption -BellStyle None
Set-PSReadLineKeyHandler -Chord 'Ctrl+d' -Function DeleteChar

# PowerShell のエラー表示を簡素化
$ErrorView = "ConciseView"

# fzf
$Env:FZF_DEFAULT_OPTS = "--height=20 --border=sharp --layout=reverse"
Import-Module PSFzf
Enable-PsFzfAliases
# fzf を ctrl + t で起動
Set-PsFzfOption -PSReadlineChordProvider 'Ctrl+t' -PSReadlineChordReverseHistory 'Ctrl+r'

# Helix をデフォルトエディタに
$Env:EDITOR = "hx"

プログラミング言語

プログラミング言語として Rust と clang を導入。また、それぞれの周辺ツールや Language Server を構成。

# windows sysroot and toolchaine
winget install Microsoft.VisualStudio.2022.BuildTools
# clang 系
winget install LLVM.LLVM
# clang LSP
winget install LLVM.clangd
# make and cmake
winget install Kitware.CMake
winget install GnuWin32.Make
# Rust
winget install Rustlang.Rustup
rustup update
# Rust LSP
rustup component add rust-analyzer

コマンド検索 PATH 環境変数ぶ LLVM(clang)、CMake、make を追加。

C:\Program Files\LLVM\bin
C:\Program Files\CMake\bin
C:\Program Files (x86)\GnuWin32\bin

ここまで設定を進めて、ターミナルを再起動して PATH を反映すると Helix Editor で Language Server が動作するようになります。

Helix 構成確認:

> hx --health rust
Configured language server: rust-analyzer
Binary for language server: C:\Users\hiromasa\.cargo\bin\rust-analyzer.exe
Configured debug adapter: lldb-vscode
Binary for debug adapter: C:\Program Files\LLVM\bin\lldb-vscode.exe
Highlight queries: ✓
Textobject queries: ✓
Indent queries: ✓
> hx --health c
Configured language server: clangd
Binary for language server: C:\Users\hiromasa\AppData\Local\Microsoft\WinGet\Links\clangd.exe
Configured debug adapter: lldb-vscode
Binary for debug adapter: C:\Program Files\LLVM\bin\lldb-vscode.exe
Highlight queries: ✓
Textobject queries: ✓
Indent queries: ✓

Rust プロジェクトを hx で開くと Language Server が走って、入力補完や m コマンドのAST、g, d のシンボルジャンプなどが動作するはずです。うまくいかない場合は、:log-open コマンドでログを開くと解決のヒントがあるかもしれません。

clangd は CMake を構成して compile_commands.json をつくってもらえば include path などが解決されます。(簡単な構造のプログラムなら .json なしでよしなにしてくれるようです)

# for clangd (LSP)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

ちなみに Helix は Rust や clang ともに lldb-vscode で実験的ながらデバッグブレイクもできますが、自分が試した限り現時点の Windows 版ではまだうまく動作しないようでした。(止まるようで止まらない)ちなみにLinux だとブレイクと簡単なウォッチは大丈夫なので、おそらく近いうちに動作すると思います。

Linux 版 Helix で clangd を使って補完やデバッグブレイクしている様子:

gitui

Git のターミナルクライアントである gitui の導入。

winget install StephanDilly.gitui

gitui はキーボードのエンターキーや ESC キーで高速にぱちぱち動かせるので、オープンソースウォッチにも適しているのではないかと思います。

終わりに

普段は Linux を使っているので、実は今回調べてみるまで Windows でも fzf や gitui、 Helix がうまく動作すると知りませんでした。。てなわけで、簡単なコマンドラインツールを作りながら作業を進められるところまでいけたかなと思います。

PowerShell が割と久しぶりなので、また覚えながら。ちなみに Windows Terminal の次の次くらいのバージョンから PS の補完がドロップダウンで出力されるようです。楽しみ。

コメントを残す