一个用于制作迷人的 shell 脚本的工具。在脚本和别名中利用 Bubbles 和 Lip Gloss 的强大功能,无需编写任何 Go 代码!
上面的示例是从单个 shell 脚本(源代码)运行的。
Gum 提供高度可配置、即用型实用程序,帮助您只需几行代码即可编写有用的 shell 脚本和点文件别名。让我们构建一个简单的脚本来帮助您为点文件编写常规提交。
询问带有gum select的提交类型:
gum choose " fix " " feat " " docs " " style " " refactor " " test " " chore " " revert "
笔记
该命令本身将打印到标准输出,这并不是很有用。要稍后使用该命令,您可以将标准输出保存到$VARIABLE
或file.txt
。
提示这些更改的范围:
gum input --placeholder " scope "
提示更改摘要和说明:
gum input --value " $TYPE$SCOPE : " --placeholder " Summary of this change "
gum write --placeholder " Details of this change "
提交前确认:
gum confirm " Commit changes? " && git commit -m " $SUMMARY " -m " $DESCRIPTION "
查看将这些命令组合到单个脚本中的完整示例。
使用包管理器:
# macOS or Linux
brew install gum
# Arch Linux (btw)
pacman -S gum
# Nix
nix-env -iA nixpkgs.gum
# Flox
flox install gum
# Windows (via WinGet or Scoop)
winget install charmbracelet.gum
scoop install charm-gum
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg
echo " deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * * " | sudo tee /etc/apt/sources.list.d/charm.list
sudo apt update && sudo apt install gum
echo ' [charm]
name=Charm
baseurl=https://repo.charm.sh/yum/
enabled=1
gpgcheck=1
gpgkey=https://repo.charm.sh/yum/gpg.key ' | sudo tee /etc/yum.repos.d/charm.repo
sudo rpm --import https://repo.charm.sh/yum/gpg.key
# yum
sudo yum install gum
# zypper
sudo zypper refresh
sudo zypper install gum
或者下载:
或者直接使用go
安装它:
go install github.com/charmbracelet/gum@latest
choose
:从选项列表中选择一个选项confirm
:要求用户确认操作file
:从文件夹中选择一个文件filter
:从列表中过滤项目format
:使用模板格式化字符串input
:提示输入一些内容join
:垂直或水平连接文本pager
:滚动浏览文件spin
:运行命令时显示微调器style
:对文本应用颜色、边框、间距table
: 渲染数据表write
:提示输入长格式文本log
:记录要输出的消息您可以使用--flags
和$ENVIRONMENT_VARIABLES
自定义gum
选项和样式。有关每个命令的自定义和配置选项的完整视图,请参阅gum <command> --help
。
使用--flags
自定义:
gum input --cursor.foreground " #FF0 "
--prompt.foreground " #0FF "
--placeholder " What's up? "
--prompt " * "
--width 80
--value " Not much, hby? "
使用ENVIRONMENT_VARIABLES
进行自定义:
export GUM_INPUT_CURSOR_FOREGROUND= " #FF0 "
export GUM_INPUT_PROMPT_FOREGROUND= " #0FF "
export GUM_INPUT_PLACEHOLDER= " What's up? "
export GUM_INPUT_PROMPT= " * "
export GUM_INPUT_WIDTH=80
# --flags can override values set with environment
gum input
使用简单的命令提示输入。
gum input > answer.txt
gum input --password > password.txt
提示输入一些多行文本( ctrl+d
完成文本输入)。
gum write > story.txt
使用模糊匹配过滤值列表:
echo Strawberry >> flavors.txt
echo Banana >> flavors.txt
echo Cherry >> flavors.txt
gum filter < flavors.txt > selection.txt
使用--limit
标志或--no-limit
标志选择多个选项。使用tab
或ctrl+space
进行选择, enter
确认。
cat flavors.txt | gum filter --limit 2
cat flavors.txt | gum filter --no-limit
从选项列表中选择一个选项。
echo " Pick a card, any card... "
CARD= $( gum choose --height 15 {{A,K,Q,J},{10..2}} " " {♠,♥,♣,♦} )
echo " Was your card the $CARD ? "
您还可以使用--limit
或--no-limit
标志选择多个项目,这决定了可以选择的最大项目数。
cat songs.txt | gum choose --limit 5
cat foods.txt | gum choose --no-limit --header " Grocery Shopping "
确认是否执行操作。根据选择,以代码0
(肯定)或1
(否定)退出。
gum confirm && rm file.txt || echo " File not removed "
提示用户从文件树中选择一个文件。
EDITOR $( gum file $HOME )
滚动浏览带有行号和完全可自定义视口的长文档。
gum pager < README.md
运行脚本或命令时显示微调器。给定命令退出后,旋转器将自动停止。
要查看或通过管道传输命令的输出,请使用--show-output
标志。
gum spin --spinner dot --title " Buying Bubble Gum... " -- sleep 5
可用的旋转器类型包括: line
、 dot
、 minidot
、 jump
、 pulse
、 points
、 globe
、 moon
、 monkey
、 meter
、 hamburger
。
从一些表格数据中选择一行。
gum table < flavors.csv | cut -d ' , ' -f 1
使用一个命令可以漂亮地打印具有任何布局的任何字符串。
gum style
--foreground 212 --border-foreground 212 --border double
--align center --width 50 --margin " 1 2 " --padding " 2 4 "
' Bubble Gum (1¢) ' ' So sweet and so fresh! '
垂直或水平组合文本。将此命令与gum style
一起使用来构建布局和漂亮的输出。
提示:在join
命令中将其用作参数时,请始终将gum style
的输出括在引号中以保留换行符 ( n
)。
I= $( gum style --padding " 1 5 " --border double --border-foreground 212 " I " )
LOVE= $( gum style --padding " 1 4 " --border double --border-foreground 57 " LOVE " )
BUBBLE= $( gum style --padding " 1 8 " --border double --border-foreground 255 " Bubble " )
GUM= $( gum style --padding " 1 5 " --border double --border-foreground 240 " Gum " )
I_LOVE= $( gum join " $I " " $LOVE " )
BUBBLE_GUM= $( gum join " $BUBBLE " " $GUM " )
gum join --align center --vertical " $I_LOVE " " $BUBBLE_GUM "
format
处理并格式化文本主体。 gum format
可以解析 markdown、模板字符串和命名表情符号。
# Format some markdown
gum format -- " # Gum Formats " " - Markdown " " - Code " " - Template " " - Emoji "
echo " # Gum Formatsn- Markdownn- Coden- Templaten- Emoji " | gum format
# Syntax highlight some code
cat main.go | gum format -t code
# Render text any way you want with templates
echo ' {{ Bold "Tasty" }} {{ Italic "Bubble" }} {{ Color "99" "0" " Gum " }} '
| gum format -t template
# Display your favorite emojis!
echo ' I :heart: Bubble Gum :candy: ' | gum format -t emoji
有关模板助手的更多信息,请参阅 Termenv 文档。有关命名表情符号的完整列表,请参阅 GitHub API。
log
使用charmbracelet/log
库使用不同级别和样式将消息记录到终端。
# Log some debug information.
gum log --structured --level debug " Creating file... " name file.txt
# DEBUG Unable to create file. name=temp.txt
# Log some error.
gum log --structured --level error " Unable to create file. " name file.txt
# ERROR Unable to create file. name=temp.txt
# Include a timestamp.
gum log --time rfc822 --level error " Unable to create file. "
请参阅 Go time
包以获取可接受的--time
格式。
有关更多用法,请参阅charmbracelet/log
。
如何在日常工作流程中使用gum
:
有关更多实际用例,请参阅示例目录。
git commit -m " $( gum input --width 50 --placeholder " Summary of changes " ) "
-m " $( gum write --width 80 --placeholder " Details of changes " ) "
$EDITOR
中打开文件 $EDITOR $( gum filter )
tmux
会话SESSION= $( tmux list-sessions -F # S | gum filter --placeholder " Pick session... " )
tmux switch-client -t $SESSION || tmux attach -t $SESSION
git
历史记录中选择提交哈希git log --oneline | gum filter | cut -d ' ' -f1 # | copy
skate
密码选择器。 skate list -k | gum filter | xargs skate get
brew list | gum choose --no-limit | xargs brew uninstall
git
分支git branch | cut -c 3- | gum choose --no-limit | xargs git branch -D
gh
检查 GitHub 拉取请求gh pr list | cut -f1,2 | gum choose | cut -f1 | xargs gh pr checkout
gum filter < $HISTFILE --height 20
sudo
替换 alias please= " gum input --password | sudo -nS "
我们很想听听您对此项目的想法。请随时给我们留言!
麻省理工学院
魅力的一部分。
Charm热爱开源 • Charm热爱开源