Skip to content

传参数哲学

命令 + 参数(选项) + 参数值(参数)

三大流派

(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