当前位置: 首页 > 开发杂谈 >

Day 04:金鱼记忆力太短暂,交给外挂记吧!autosuggestions 与 substring-search

我把从第一天到现在每天的 Home 目录都放上 GitHub 了,README.md 里面有说明
这是今天的 Release https://github.com/simba-fs/2021-ironman-example/releases/tag/day04


今天的内容会比平常多,但是非常紮实!

有时候我们在 CLI 操作时遇到很多重复的指令,像是 git addgit commit -m 'ba la ba la' 等等,这些指令可能又长又复杂,一直都是自己打也不是办法,这时候就该请出 autosuggestions

安装 autosuggestions

老样子,安装外挂只须要修改 ~/.zshrc 就可以了

# plugins
zplug 'romkatv/powerlevel10k', as:theme, depth:1
+ zplug 'zsh-users/zsh-autosuggestions'

因为 autosuggestions 是外挂,不需要特别写 tag 了

[问题]好像有奇怪的字跑出来?

写好之後重开终端机,按下 enter 你可能会发现跳出了一堆东西,这是因为你开启了 p10k 的 Instant Prompt Mode,这个虽然会让你的终端机跑起来比较顺(官方说的,我感觉不出来),但是在 zsh 载入完成之前就不能有任何字输出。
可是你看看,如果我们新增了一个外挂,zplug 会跳出来问我们是否要安装,这时後 Instant Prompt Mode 就出来抱怨了。
这个问题的解决方法直觉上有两个,一是关掉 Instant Prompt Mode,二是让 zplug 先不要吵

关掉 Instant Prompt Mode

关掉 Instant Prompt Mode 很简单,重新设定一次 p10k 就好了,在设定程序问你是否要开启 p10k 时选择 (3) Off,这样下次安装外挂就不会有奇怪的警告讯息跳出来了。

让 zplug 先闭嘴

如果你觉得 Instant Prompt Mode 很重要,需要保留,那你可能会想到这个方法
~/.zshrc 中有一行 zplug load,这行会让 zplug 在 ~/.zshrc 载入时侦测是否要安装新外挂,把这行拿掉再重新开启终端机,以後他就不会自动检查了
这时候如果你要安装新外挂,一样是修改 ~/.zshrc 之後重开终端机,手动下指令 zplug load,zplug 就会开始检查更新。

有没有兼得的方法呢?

以上两种方法都是治标不治本,其实 ~/.zshrc 里面已经有写解决办法了,看看 ~/.zshrc 最上面的注解,这是设定 p10k 时如果你有开启 Instant Prompt Mode 他帮你加的

# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.

他说如果载入过程中会有输出,像是问 y/N 之类的,要放到这段前面
所以我们只需要把 zplug 搬到最前面就可以了,现在 ~/.zshrc 长这样

source ~/.zplug/init.zsh

# plugins
zplug 'romkatv/powerlevel10k', as:theme, depth:1
zplug 'zsh-users/zsh-autosuggestions'

if ! zplug check --verbose; then
	printf "Install? [y/N]: "
	if read -q; then
		echo; zplug install
	fi
fi

zplug load

# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

[问题]为什麽按 方向键上 时会出现和现在指令开头不同的字

假设你现在打过以下指令

$ ls /home/purecli
$ cat ~/.zshrc
$ ls /

这时候你先打 ls,想找到之前 ls 开头的指令按,按 方向键上 会出现 cat ~/.zshrc 呢?这是因为现在的 方向键上 是 zsh 本身的「上一个指令」。
这个问题需要装另一个外挂来解决:zsh-users/zsh-history-substring-search
~/.zshrc 新增一行

# plugins
zplug 'romkatv/powerlevel10k', as:theme, depth:1
zplug 'zsh-users/zsh-autosuggestions'
+ zplug 'zsh-users/zsh-history-substring-search'

然後要绑定按键,一样是放在 ~/.zshrc,位置随便

bindkey "$terminfo[kcuu1]" history-substring-search-up 
bindkey "$terminfo[kcud1]" history-substring-search-down

重开终端机後就可以搜寻同样开头的指令纪录了

[问题]为什麽开新的终端机 autosuggestions 读不到以前下过得指令?

这是因为我们的 ~/.zshrc 中没有设定把 history 存下来,所以 autosuggestions 只能拿到目前这个终端机的纪录,一关掉纪录就不见了,autosuggestions 自然找不到。
要解决也很简单,让他把 history 写进档案就好了,在 ~/.zshrc 中任意地方新增这两行

SAVEHIST=1000
export HISTFILE=~/.zsh_history
setopt share_history

这样 autosuggestions 就可以读到以前下过的指指令了

结尾

今天介绍了好用的 autosuggestions 和 zplug 与 p10k 设定冲突的解决方法。
不的不说 autosuggestions 真是懒人福音,打过的指令不用再打第二次
明天再介绍两个外挂後就 zsh 的部份就差不多完结了,紧接着会进入精彩的 tmux


相关文章:

  • 每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day30
  • 巴西电商市场的分版块总结
  • lazada ASC Traffic 邀品任务
  • 轻松跨越Windows地雷而不会被炸得粉身碎骨
  • wish收入分成分级体系介绍及示例
  • Day 21 装设开源的 Libre-Office
  • Day 18:Kotlin 过滤(filter)集合资料用法
  • CSS基础介绍(3)
  • Spring 初探 (二)
  • 【领域展开 01 式】 术式修炼前的理性条列思考
  • 【D3】发现厨房不能用,需要更换厨房环境: 使用Python 3.8
  • lazada联盟广告Q&A
  • lazada搜索推广充值方式
  • Day25-实作
  • 【踩坑】按钮闪阿闪,gradient 在 hover 时闪烁
  • 自建CDN教程:如何做一个自己的CDN
  • 2020最新Google Voice号码申请方法(非脚本)
  • 海外营销周报:谷歌在搜索中取消Q&A功能,FaceBook Marketplace用户总量达 10 亿人 – 知外贸
  • Google SEO优化排名的技巧:做好这20件事情谷歌排名必定上去
  • 怎么获得菲律宾手机卡和接受短信验证码
  • PayPal国外买东西教程:银联卡(国内储蓄卡信用卡)怎么用PayPal买国外的东西更安全
  • Google:国际化网站即使有相同的英文内容也不属于重复内容
  • 支持支付宝的国外VPS主机服务器大全:用支付宝买国外网站空间服务器VPS
  • 海外适合游戏投放的渠道有哪些?
  • 网站更换域名后副作用大吗?针对谷歌如何更换域名
  • 洛杉矶CN2服务器推荐:PCCW线路VPS,服务器服务商layerhost
  • Bluehost主机好用吗?Bluehost美国主机评测
  • WordPress 为当前文章在【分类】小工具中的所属分类添加current-cat类名
  • 印度独立站怎么做?如何做印度市场独立站商城
  • WordPress 调试模式基本指南