传参数哲学
命令 + 参数(选项) + 参数值(参数)
三大流派
(1)POSIX/Unix 风格(最古老)
使用单横杠 + 单个字母,如 -v
支持参数合并,比如 ls -a -l -h 可以写成 ls -alh
(2)GNU 风格(最流行)
双横杠 + 单词,如 --version 或 --help
解决“字母不够用”的问题,比如 -v 到底是 version 还是 verbose
(3)BSD/X Toolkit 风格(最特立独行)
连横杠都不要了,如 ps aux;或者单横杠后面跟长单词,java -version
规律:
- + 单个字符/多字符组合
-- + 完整单词
传值
一个参数需要传值,通常 -o value 和 -ovalue(紧贴)在旧的 C 工具里是通用的
GNU 风格通常倾向于 --option=value 或 --option value
GNU 工具很多允许选项和参数对调,tool -g arg 和 tool arg -g
但是有些工具不行,所以稳妥建议,还是先选项,再参数
子命令
很多时候,不以传递-的,并不是像 ps aux 一样的参数,而是子命令
主命令 + 动词 + 动作
例子:
git commit -m "msg"
即:hermes --resume "blah",是针对主命令,的全局设置
而:hermes sessions list 是去子工具里干活
再回到 ssh,ssh 太老了,那时子命令还没流行(老派 Unix 风格 vs 现代 CLI 风格)
ssh keygen,是连接一个叫做 keygen 的服务器
所以,ssh-keygen 才是真的生成密钥
包括 apt,以前是 apt-get,现在是 apt + 子命令 get
后续
目前这个文件底下用来记录一些高级工具(不得不说,感谢 Rust)
zellij
Rust
zellij 比 tmux 好用一些,包括直接支持鼠标拖拽比例,以及快捷键显示在下方
Session
├── Tab
│ ├── Pane
│ │ └── Program
│ └── Pane
│ └── Program
└── Tab
└── Pane
└── Program如果只输入 zellij,那就是新建一个 session,并且 zellij 会指定一个随机名字,形容词 + 名词,不同于 tmux 是纯递增数字
zellij -s work zellij a work
玩明白 zellij,你不只是需要明白层级,而是需要知道每个层级应该做什么事情
session 是一个持久的工作目录,比如你的后端开发,一台远程机器,一次长期任务。好比一个浏览器窗口。
Tab 是后端里的每个子内容,比如数据库,日志。好比每一个标签页。
Pane 是子内容的具体开发,左侧 Vim,右侧 Yazi,是你当前正在看的东西。好比标签页内部的分栏。
zellij 目前支持了跨平台,它在 Windows 上没问题,在 mac 上,它默认是 Alt+ 左右 切换 Pane,但是 Alt(Opt)+左右 在 mac 上本质是按词移动光标,所以你可以改成 vim 的样子,Alt+hjkl 去切换
yazi
Rust
你当前所在的目录是左上角显示那个,也就是三栏里左边那个
中间栏显示的,是你选中的,显示在左下角
a 新建文件/目录 r 重命名 y 复制 / yank x 剪切 p 粘贴 d 删除到回收站/删除 Space 选中文件 o 打开 q 退出 : 以当前目录打开命令行,运行临时命令,输出看不到
notes.txt 新建文件 src/ 新建目录
zoxide
Rust
zoxide 安装后,必须执行 init
它的命令是 z 和 zi,这两个不是可执行文件,而是函数
z 本身使用时,它和 cd 的效果一致,如果你自己手打 cd,你可以考虑换成 z
每次 z 执行,都会记录你用了这个目录
如果 z xxx,那个位置不是可以 go 过去的目录,就会匹配一个最相近的目录 go 过去
zi 就是给你推荐你可能想去的目录,类似 Windows 资源管理器左边那个最近常用
注意:不建议在 bash 里 alias cd=z,因为 cd 的结果是固定的,z 的结果不是稳定的,即使是自己用的 fish 也不建议,因为有的 AI 会用,AI 又不嫌 cd 麻烦
fzf
Go
fzf 是一个用于搜索最近使用过的命令的命令
实际上你不会直接打出 fzf
以 fish 为例,按 Ctrl+R 是搜索,不装 fzf 也能搜,装了搜的更好些
fd
Rust
更现代、更好用的 find
find 命令比较难写
find 很好写,你 find test,就能找到 test.txt
它还会默认忽略 .git 目录这种
rg
Rust
全名 ripgrep,对标 grep
rg "SketchObject",在当前目录及子目录中,搜索所有文件内容里包含 SketchObject 的地方
默认即递归,跳过 .git