LoginSignup
11
11

VScode内のターミナル(Powershell)でコマンド補完(gitとか)(Windows用)

Last updated at Posted at 2017-06-14

2023年1月27日追記
Microsoft.PowerShell_profile.ps1の設置場所が
ドキュメントの
WindowsPowerShell
から
PowerShell
に変更になりました。
posh-gitなども再インストールする必要があります。

具体例
C:\Users\[ユーザー名]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
から
C:\Users\[ユーザー名]\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
に変更されました。

追記終了


VScodeのターミナルで補完が効かなかったので、どうすれば補完してくれるようになるかを調べた備忘録。

Windows10でのGitコマンドの補完

自分の環境

Windows10 64
PowerShell
バージョンを調べる
$PSVersionTable

PSVersion 7.1.3

[Visual Studio Code - Code Editing. Redefined]
(https://code.visualstudio.com/)

VSCodeでの補完

posh-gitのインストール

[posh-git by dahlbyk]
(http://dahlbyk.github.io/posh-git/)

VSCodeのターミナルを開き下記のコマンドを入れます。
インストールコマンド
Install-Module -Name posh-git -AllowPrerelease

設定ファイルMicrosoft.PowerShell_profile.ps1に書き込むコマンド
"Import-Module posh-git" | Add-Content $PROFILE

posh-dockerのインストール

githubリポジトリ
[samneirinck/posh-docker: Powershell tab completion for Docker]
(https://github.com/samneirinck/posh-docker)

Install-Module -Scope CurrentUser posh-docker

確認
Powershellのターミナルから
git c
タブキー
これで
git checkout
と出れば補完が効いています。
更にタブキーを押せばその他の候補がタブキーを押すごとに表示されます。

例(タブキーを押すと候補が順に、シフトタブキーで逆順に表示される。)

git cherry
git cherry-pick
git citool
git clean
git clone
git commit
git config
git checkout ←ループ

※補完が効いていないようならVSCodeを再起動してみてください。

posh-gitのアップデート

Update-Module -Name posh-git -AllowPrerelease

さらに、VSCodeでエイリアスを使いたい場合は

VSCode上のpowershellの設定ファイルを書く。エイリアスを使う、Beep音を消すetc。 - Qiita
https://qiita.com/masakinihirota/items/6ea743af309b39b5ba9b

Q.

PowerShellにはどんなコマンド補完ツールがあるのか?

A.

posh-XXXというツールをインストールすればできるようになる。
gitなら
posh-gitposh-git(github.com)

Dockerなら
posh-docker(github.com)

現在の設定(2021年5月12日現在)

Microsoft.PowerShell_profile.ps1

# エイリアス
# If you want posh-git to detect your own aliases for git, then you must have set the alias before importing posh-git. So if you have Set-Alias g git then ensure it is executed before Import-Module posh-git, and g checkout will complete as if you'd typed git.
# エイリアスはImport-Module posh-gitの上の方に書いておくこと。
# 先に書いておくことでエイリアスでも補完が効くようになる。
# 長いコマンドを短くしたいだけならSet-Aliasを使う。
Set-Alias ll Get-ChildItem
Set-Alias lll Get-ChildItem

# git系
Set-Alias g git

# docker系
Set-Alias do docker

# function Get-Docker { & docker $args }
# New-Alias -Name do -Value Get-Docker -Force -Option AllScope



# unix系のgrepとは挙動が違う
Set-Alias grep Select-String

# 予測 IntelliSense を有効にする
Set-PSReadLineOption -PredictionSource History

Import-Module posh-git
Import-Module posh-docker
Import-Module PSReadLine

# パスとGitステータスを入れ替える
$GitPromptSettings.DefaultPromptWriteStatusFirst = $false

#  現在のディレクトリ以外のパスを~で省略する。
$GitPromptSettings.DefaultPromptAbbreviateHomeDirectory = $true

# 色 HTML Color Names
# https://www.w3schools.com/colors/colors_names.asp
# フルパスの色
# $GitPromptSettings.DefaultPromptPath.ForegroundColor = 'Orange'
# $GitPromptSettings.DefaultPromptPath.ForegroundColor = 0xFFA500
# $GitPromptSettings.DefaultPromptPath.ForegroundColor = 0x7FFFD4
# $GitPromptSettings.DefaultPromptPath.ForegroundColor = 0xB0E0E6
$GitPromptSettings.DefaultPromptPath.ForegroundColor = 0x9ACD32

# パス名とコマンド入力欄の間に改行を入れる。
# コマンド入力欄の前に現在の時刻を表示する。
$GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n$([DateTime]::now.ToString("MM-dd HH:mm:ss "))'

# 無し $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Black
$GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Blue
# $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Cyan
# 無し $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::DarkBlue
# mainの色と同じ
# $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::DarkCyan
# 無し $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::DarkGray
$GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::DarkGreen
# $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::DarkMagenta
# 無し $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::DarkRed
# 無し $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::DarkYellow
# 無し $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Gray
# $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Green
# $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Magenta
# $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Red
# 無し $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::White
# 無し $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Yellow

# ヒストリーをカウントし表示
# $GitPromptSettings.DefaultPromptSuffix = '$((Get-History -Count 1).id + 1)$(" >" * ($nestedPromptLevel + 1)) '

# プロンプトのパス部分を区切り文字で囲む
# $GitPromptSettings.BeforePath = '{'
# $GitPromptSettings.AfterPath = '}'
# $GitPromptSettings.BeforePath.ForegroundColor = 'yellow'
# $GitPromptSettings.AfterPath.ForegroundColor = 'yellow'

# PowerShellコマンドが失敗すると、!が表示されます。(成功するまで)
function global:PromptWriteErrorInfo() {
    if ($global:GitPromptValues.DollarQuestion) { return }

    if ($global:GitPromptValues.LastExitCode) {
        "`e[31m(" + $global:GitPromptValues.LastExitCode + ") `e[0m"
    }
    else {
        "`e[31m! `e[0m"
    }
}

$global:GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n$(PromptWriteErrorInfo)$([DateTime]::now.ToString("MM-dd HH:mm:ss"))'



# ベル音(Beep)を消す
Set-PSReadlineOption -BellStyle None


# 複数wordで空白を含むコマンドの場合fuctionを使う。
function s
{
    npm run start
}

function b
{
    npm run build
}

function d
{
    npm run dev
}

function t
{
    npm run test
}

function gd
{
    git diff --cached
}

function gcm($message)
{
    git commit -m $message
}

function gc
{
    git checkout $args
}


# ローカル専用
function GGG
{
    git checkout main | git merge - | git branch
}
# リポジトリがオンライン上にある場合。
# git push origin HEAD | git checkout main | git merge - | git push origin HEAD | git branch



# ブランチ名を書き換える
function brm
{
    git branch -m  $args | git branch
}

function ma
{
    git checkout main | git branch
}

function merge
{
    git merge $args  | git branch
}



# grep
function gg
{
    git grep $args
}

function gr
{
    git grep $args
}

function gre
{
    git grep $args
}

function st
{
    git status
}



# ブランチを新たに作成
function cb
{
     & git checkout -b $args | Get-GitBranch
}

function main
{


    git checkout main
}


# push
function pu
{
    git push origin
}

function gpu
{
    git push origin
}


# ブランチの削除後 ブランチのリスト表示
function DDD
{
	# mainを間違って削除しないようにする。
	if ($args -ne 'main') {
		git checkout main | git branch -D $args | Get-GitBranch
	}
}

# コマンド実行前にコミットしたかどうかを見る
# ブランチが消せない状態なら用済みブランチは消えない
# mainブランチに移動後main以外のブランチを削除
# その後ブランチを表示
function DDDDD
{
    git checkout main | git branch --merged `
  | Select-String -NotMatch -Pattern "(master|main)" `
  | %{ git branch -d $_.ToString().Trim() } | Get-GitBranch
}



# log表示
function Get-GitTree { & git log --graph --oneline --decorate  }
New-Alias -Name lo -Value Get-GitTree -Force -Option AllScope



# -s ショートフォーマットで表示
# -b ショートフォーマットでも分岐情報や追跡情報を表示します。
function Get-GitStatus { & git status -sb $args }
New-Alias -Name stb -Value Get-GitStatus -Force -Option AllScope



# 全部をaddするなら aa .
# -uのオプションもok
# git add -u (git add --update)
# バージョン管理されていて、変更があったすべてのファイルがaddされる
# バージョン管理されていないファイルはaddされない

function Get-GitAdd { & git add --all $args }
New-Alias -Name aa -Value Get-GitAdd -Force -Option AllScope


# 変更を見てからコミットメセージを編集&コミット
function Get-GitCommit { & git add --all | git commit -ev $args }
New-Alias -Name cm -Value Get-GitCommit -Force -Option AllScope



# コミット
# コマンドがかぶる時ビルトインのコマンドを消去
##### remove-item alias:gc -force

# 変更を見てからコミットメセージを編集&コミット
function Get-GitCommit { & git commit -ev $args }
New-Alias -Name gm -Value Get-GitCommit -Force -Option AllScope


# g co だと補完が効く
function Get-GitCheckout { & git checkout $args }
New-Alias -Name co -Value Get-GitCheckout -Force -Option AllScope

# ブランチ表示
function Get-GitBranch { & git branch $args }
New-Alias -Name br -Value Get-GitBranch -Force -Option AllScope



# function Get-GitPush { & git Push $args }
# New-Alias -Name gps -Value Get-GitPush -Force -Option AllScope

# function Get-GitPull { & git pull $args }
# New-Alias -Name gpl -Value Get-GitPull -Force -Option AllScope

# function Get-GitFetch { & git fetch $args }
# New-Alias -Name f -Value Get-GitFetch -Force -Option AllScope

# function Get-GitRemote { & git remote -v $args }
# New-Alias -Name r -Value Get-GitRemote -Force -Option AllScope


#######################################################
# 実験

# プロンプトの前後に文章を入れる
# function prompt {
#    # Your non-prompt logic here
#    $prompt = Write-Prompt "Text before posh-git prompt " -ForegroundColor ([ConsoleColor]::Green)
#    $prompt += & $GitPromptScriptBlock
#    $prompt += Write-Prompt "Text after posh-git prompt" -ForegroundColor ([ConsoleColor]::Magenta)
#    if ($prompt) { "$prompt " } else { " " }
# }



function touch($filename)
{
	New-Item ($filename)
}


# storybook
function sb
{
    yarn storybook
}


11
11
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
11
11