用Oh-my-zsh管理插件有个很大的缺陷, 就是不支持插件的自动下载安装, 所以换用zplug
进行管理, 顺便重新整理了一些配置的结构, 将配置文件模块化. 不过还是有点乱, 就用文字就理一下配置文件, 以及当前安装的插件.
配置文件
配置文件结构如下, 其中init
文件用于加载文件夹下的其它zsh
文件, 其加载顺序依次是:
parameter.zsh
: 定义一些变量, 比如定义插件的下载路径, 历史记录存储位置, 主题等. 类似于config文件.plugin.zsh
: 管理插件, 所有需要用到的插件都放在这个文件中fzf.zsh
: 模糊搜索插件fzf
的配置, 定义模糊搜索时需要使用的命令.alias.zsh
:定义别名, 注意一定要放在最后, 以免被插件定义的alias覆盖.
~/.config/zsh
├── init.zsh
├── parameter.zsh
├── plugin.zsh
├── fzf.zsh
└── aliases.zsh
不过, ZSH默认读取的文件是~/.zshrc
, 所有我们需要在里面加入如下内容, 让它能自动克隆git仓库并加载init.zsh
.
|
|
插件管理
当前使用zplug
管理插件, 其配置大概长这样子.
|
|
这段配置加载了三个插件, colored-man-pages
fast-syntax-highlighting
用于语法高亮, 无需多介绍, 用就行了~ powerlevel10k
是一个异步加载主题, 特点就是快, 不需要等待插件加载完成才能看到提示符.
Git 插件
这是一款基于fzf
的插件, 提供了git fuzzy
子命令, 分别是:
-
git fuzzy status
:Interact with staged and unstaged changes. -
git fuzzy branch
: Search for, checkout and look at branches. -
git fuzzy log
: Look for commits ingit log
. Typing in the search simply filters in the usualfzf
style. -
git fuzzy reflog
: Look for entries ingit reflog
. Typing in the search simply filters in the usualfzf
style. -
git fuzzy stash
: Look for entries ingit stash
. Typing in the search simply filters in the usualfzf
style. -
git fuzzy diff
: Interactively select diff subjects. Drilling down enables searching through diff contents in a diff browser. -
git fuzzy pr
: Interactively select and open/diff GitHub pull requests.
功能好像重复了和git-fuzzy
, 提供命令forgit::<command>
.
一些快捷键: ?
触发预览; Alt+K/J/P/N
预览上下移动... (有点乱, 其它没看懂emmm
补全插件
Aloxaf/fzf-tab: 一个使用fzf
提供补全菜单的插件 Replace zsh's default completion selection menu with fzf!
zsh-users/zsh-autosuggestions: 显示可自动补全的命令 Fish-like autosuggestions for zsh
提示插件
djui/alias-tips: 提供alias提示 An oh-my-zsh plugin to help remembering those aliases you defined once
ohmyzsh/command-not-found: 对没有安装的命令提供安装提示
工具加载插件
ohmyzsh/fasd: 加载fasd命令
命令行工具
FASD: 目录 & 文件
clvv/fasd: Command-line productivity booster, offers quick access to files and directories, inspired by autojump, z and v.
fasd
是一个可快速提取并打开文件的工具, 其具体原理是将访问过的文件存储在一个列表中, 根据访问频次对列表中的文件进行打分, 当下次搜索时从列表中取出匹配的文件, 并根据评分排序, 默认取出评分最高的文件作为结果输出.
下面的三个alias将分别提取所有查询到的内容; 只提前目录; 只显示文件夹.
|
|
当然有时候我们只想拿到一个结果, 而不是一个列表, 此时我们可用i
选项开启interactive mode
. 好像fasd -a
和fasd -s
的效果是一样的, 可能作者只是单纯想把它凑成fasd
中的s
把(斜眼)
|
|
不过, 单列出文件有啥用呢, 拿到文件我们需要打开它呀, 这时就需要拿出我们的-e <cmd>
选项了. 下面几个alias
分别定义了:
o
: 使用系统默认软件打开;v
: 在终端用 nvim 打开文本文件;c
: 使用 vs-code 打开文本文件;t
: 使用 typora 打开 markdown 文件;p
: 使用 pixea 打开图片
|
|
上面介绍的fasd
主要负责文件的打开操作, 下面介绍一下用于目录跳转的 fasd_cd
命令. 其实fasd_cd
只是一个基于fasd
的函数. 将fasd
得到的结果传给cd
.
|
|
定义如下的alias:
z
: 直接跳转到返回得到的第一个结果;j
: 当有多个匹配结果时需手动选择;jj
: 将当前目录添加到搜索选项中;jh
: 将home
目录添加到搜索选项中;jc
: 将搜索限定在当前工作目录;jd
: 将搜索限定在桌面.
|
|
解释一下-b
-B
选项. b
表示backend
, 也就是搜索对象; -b <name>
表示只使用指定的backend; -B <name>
则将该backend添加到额外的搜索内容中.
这里我定义三个函数作为backend:
current_folder
: 返回当前所在目录的文件夹列表home_folder
: 返回Home
目录的文件夹列表desk_folder
: 返回桌面目录的文件夹列表
|
|
FD: 文件搜索
列出文件
|
|
隐藏文件
可以将需要排除的文件写在~/.config/fd/ignore
文件中
|
|
批量处理
-x, --exec <cmd>
为每个文件单独执行一次命令; -X, --exec-batch <cmd>
则将所有文件一次性传入命令中.
|
|
占位符
{}
表示目录+文件名documents/images/party.jpg
;{//}
表示目录documents/images
{.}
去除扩展名documents/images/party
;{/}
去除路径名party.jpg
;{/.}
: 去除路径和扩展名party
FZF: 模糊搜索
快捷键:
-
C-r
搜索历史记录 -
C-t
搜索文件; -
M-c
改变工作目录 -
C-c
C-G
ESC
退出; -
按
tab
shift-tab
进行多选. -
使用
;<TAB>
自动补全
搜索语法:
sbtrkt
模糊搜索;wild
精确搜索; 可用-e
-exact
选项关闭模糊搜索, 此时'sbtrkt
将打开精确搜索.^music.mp3$
前后缀;!fire
!^music
!.mp3$
排除.^core md$ | zsh$ | py$
‘或’选项, 匹配 md zsh py 结尾的文件;
配置:
|
|
省略tmux内容
文档
可用使用eg
tldr
查询命令, 依赖:
-
srsudar/eg: Useful examples at the command line.
-
tldr-pages/tldr: 📚 Collaborative cheatsheets for console commands
其它有待尝试的工具
Ripgrep: 使用rg
命令进行内容搜索
ranger/ranger: A VIM-inspired filemanager for the console
MIX
- htop-dev/htop:
top
替代工具htop
- nicolargo/glances: