こんにちは。
Vim (Windwos KaoriYa版) をインストールするスクリプトを作ってみました(PowerShell の練習です)。
合わせて、Chocolatey および less もインストールし、less の中からは Vim へ遷移できるようにしています(キー入力v
)。これを実現するために、Vim は空白なしの名のディレクトリ(例: C:\commands\vim
)へインストールする必要がありました。
PS> .\install_vim.ps1
installing vim.exe into C:\commands\vim\ ...
:
:
PS> vi install_vim.ps1
PS> less install_vim.ps1
install_vim.ps1
# Encoding::Shift-JISfunctionGet-Privilege{if(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`[Security.Principal.WindowsBuiltInRole]"Administrator")){if((Get-ExecutionPolicy)-eq"Restricted"){Write-Warning"Set-ExecutionPolicy RemoteSigned を PowerShell 上で事前に実行してください"-ForegroundColor"Yellow"exit1}}else{Write-Warning"PowerShell を管理者権限で実行してください"-ForegroundColor"Yellow"exit1}}functionCheck-Profile{echo"echo `$profile"echo$profileif((Test-Path"$profile")){cat$profile}else{new-item-typefile-force$profile|out-null}}functionGet-UniqueDir($parentPath){$path=$nullDo{$path=Join-Path$parentPath([IO.Path]::GetRandomFileName())}while(Test-Path$path)return$path}functionMake-Dir($dir){$dirinfo=$nullif(!(Test-Path"$dir")){mkdir"$dir"|out-null}return$dir}functionCreate-Shortcut($TargetFile,$dir){$command=(Get-Item$TargetFile).BaseName$ShortcutFile="$($dir)\$($command).lnk"$WScriptShell=New-Object-ComObjectWScript.Shell$Shortcut=$WScriptShell.CreateShortcut($ShortcutFile)$Shortcut.TargetPath=$TargetFile$Shortcut.Save()}functionSet-ProfileforVim($vim){echo"set shell=powershell.exe">>$profileecho"`$env:VISUAL = `"$($vim)`"">>$profileecho"set-alias vi `"$($vim)`"">>$profileecho"">>$profile.$profile}# Vim - KaoriYa# https://www.kaoriya.net/software/vim/functionInstall-Vim{$vimDir="C:\commands\vim"$url='https://github.com/koron/netupvim/releases/download/v1.1/netupvim-v1.1.zip'$installer="UPDATE.bat"$executable="vim.exe"$executable_g="gvim.exe"$startmenu="C:\ProgramData\Microsoft\Windows\Start Menu\Programs"Write-host" installing $($executable) into $($vimDir)\ ..."$wc=new-objectSystem.Net.WebClient$uri=New-ObjectSystem.Uri($url)$tempDir=(Make-Dir(Get-UniqueDir([IO.Path]::GetTempPath())))$downloaded=(Join-Path$tempDir(Split-Path$uri.AbsolutePath-Leaf))$wc.DownloadFile($uri,$downloaded)$shell_app=new-object-comshell.applicationMake-Dir"$vimDir"$tgtDir=$shell_app.namespace($vimDir)$tgtDir.Copyhere($shell_app.namespace("$downloaded").items())remove-item-path$tempDir-recurse-forcecmd/c(Join-Path$vimDir$installer)Set-ProfileforVim(Join-Path$vimDir$executable)Create-Shortcut(Join-Path$vimDir$executable_g)$startmenu}# Chocolatey# https://chocolatey.org/packagesfunctionInstall-Chocolatey{setChocolateyInstall=C:\ProgramData\chocolatey$url='https://chocolatey.org/install.ps1'$wc=new-objectSystem.Net.WebClientInvoke-Expression($wc.DownloadString($url))chocoinstall-ylesschocolist-lo}Get-PrivilegeCheck-ProfileInstall-VimInstall-Chocolateyexit