有没有带历史记录智能提醒的命令行工具?

2019-11-28 01:12:41 +08:00
 Veyhunk

作为前端搬砖工, 常用的命令就那几条, 可是每次重复输入很机械, 写成脚本灵活度又不够, 网上找了几圈, 也没有满意的答案

有没有命令行大佬, 推荐一款带历史记录智能提示的命令行工具?? mac/win 都可以哈

万分感谢

需求很简单

输入 n 按下 tab 选择 npm run dev 或者其他历史记录

输入 g 按下 tab 选择 git checkout dev 或者其他历史记录

6321 次点击
所在节点    程序员
46 条回复
photon006
2019-11-28 10:30:47 +08:00
vim ~/.inputrc

粘贴如下内容:
"\e[A": history-search-backward
"\e[B": history-search-forward
set show-all-if-ambiguous on
set completion-ignore-case on

exit 退出 terminal 重开
YoRolling
2019-11-28 12:16:34 +08:00
vscode 扩展里搜一下 RobotTask 这个看看?

其实,通过把脚本写在 package.json 里,vsc 是有点点鼠标就可以运行对应 script 的功能的
YoRolling
2019-11-28 12:18:02 +08:00
@YoRolling 忘记了是要追溯历史命令的,那就看大佬们的方案吧
superrichman
2019-11-28 12:22:58 +08:00
要是经常输错命令可以试一试 thefuck,输错之后输入 fuck 会自动提示正确的命令
clarkyi
2019-11-28 12:31:17 +08:00
oh my zsh 写出一部分,上下键就可以找出你是你需要的命令
MrUser
2019-11-28 12:58:58 +08:00
^r --------------- 可以执行你指定的历史命令
.inputrc -------- 根据命令的前半部搜索后半部分
z.lua ------------ 直接进入某深层目录,比如 z wj 进入 /data/project/wjxz (类似 fzf )
alias ------------ alias gc="git add . && git commit -m"
----
这些已经够了吧?
tankren
2019-11-28 13:07:24 +08:00
zsh
jeffh
2019-11-28 13:14:11 +08:00
我都是 ctrl+r,然后输入命令,然后多次按 ctrl+r 向上查找。
imcczy
2019-11-28 13:25:36 +08:00
你需要的是 fish shell,但存在跟 bash 不兼容的情况
https://tva1.sinaimg.cn/large/006y8mN6ly1g9doq4uxthg30rs0go127.gif
zthxxx
2019-11-28 14:42:19 +08:00
自带 ctrl+r 过于反人类,每次只能看到一条,永远不知道下一个惊喜和意外哪个会先来 (也不方便搜索)

@KentY
@imycc
@jinliming2
@eclipselu
@tsui
@Davic1
@jeffh

推荐还在用原生 ctrl+r 的可以看看这个
刚做了这样一个历史命令快速查看 /搜索工具,用于替换(增强) zsh 自带的 ctrl+r

https://github.com/zthxxx/zsh-history-enquirer

Ctrl + R 在当前行内展开历史记录的预览 /搜索结果,
npm 直接安装 (所以需要装 nodejs)

npm i -g zsh-history-enquirer

因为是在行内,不会在命令行新开一个界面,看起来很轻量

- 有时候我不是想执行一个历史命令,仅仅是想看看 然后复制一个参数来用
- 多个单词支持模糊匹配
- 自动倒序展开多个命令,方便人眼查看 (自带 ctrl+r 每次只能看一条,永远不知道下一条是惊喜还是意外)
- 方向键上下就能快速选择命令
- 支持 PageUp / PageDown 快速翻页,回车 Entry 选中,Esc 取消
- 选择后还能继续编辑 (方便修改参数)

预览图见下 (imgur 图床,可能需要代理):

imkerberos
2019-11-28 15:05:03 +08:00
zplug "zsh-users/zsh-autosuggestions"

配合 karabiner: 双 shift == ^r
imn1
2019-11-28 15:29:32 +08:00
只是个人用的话,我建议写 alias
nusnevets
2019-11-28 16:44:30 +08:00
@zthxxx 这个不错, 谢谢了,等一下就去试试:) 怎么 bytedance 可以直接用 imgur 的 :p

回楼主,找历史记录一般是在很多命令里面找出想要的,用上面的插件就很好,但是从你的需求来看,我理解你有一个比较小的 set commands 非常常用,那样不如直接用 lias 好了。 比如可以用 alias glog="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 然后把这些放在.[shell]profile 里,我觉得还挺方便的。 这样我只需要 gl tab,就是上面的命令了。
zdnyp
2019-11-28 16:51:39 +08:00
cmder 有没有这样的插件,楼主做的这个厉害
zthxxx
2019-11-28 17:18:36 +08:00
@nusnevets #33 😂 嗯嗯,如果完全是固定不变的长命令,还是自己写个 alias 最简单,甚至还可以把固定的命令组合写成 function 和 alias 一起放到 shell 的 .profile 或者 .rc 文件里

这种我做了很多自用的 🌝 为了方便找地方同步,直接放到了 zsh 主题里

https://github.com/zthxxx/jovial/blob/master/jovial.plugin.zsh
KentY
2019-11-28 17:25:23 +08:00
@zthxxx

"自带 ctrl+r 过于反人类,每次只能看到一条,永远不知道下一个惊喜和意外哪个会先来 (也不方便搜索)..."

"过于反人类" 这个形容... 你可以扩充改善先有的东西, 但是这个评价太主观了. 设想下, 用 c-r 的人类多还是用 suggestion 的人类多? 好吧, 我暂且理解你不吝啬用词的一种夸张表达. 不细钻用词表达.

这个 c-r 的功能本身就不是一个精准定位的功能, 是一个快捷的辅助. 而且你不必每次都从命令开始输入, 比如说, 你前面 有:
command para1 para2 para3 para4|command2 foo para

c-r 以后, 可以直接敲 foo, 这条就可以出来了.

另外还有一些就是个人的使用不同情况了. 我知道 fish 那个灰色的 suggestion 出来以后, zsh 就出现了类似的实现. 我个人看到这个连去试试的冲动都没有, 对我个人来说, 灰色的提示不起什么作用, 反而无谓减慢速度,消耗资源. 因为我个人体会 ctrl-r 的方便之处是, 可以找出"相似"的命令, 从而减少输入. 因为我们不光有 c-r, 我们还有 c-a, c-e, c-h, c-d, c-w alt-w, c-f, alt-f.... 实在长命令不便在命令行多处修改我们还有 c-x-c-e

可能说多了. 使用习惯本身就是个主观的东西.. 算了发出去吧, 就不删改了.
fernandoxu
2019-11-28 17:29:12 +08:00
vscode/webstorm 上点一点就行了
zthxxx
2019-11-28 17:52:02 +08:00
@KentY #36 我也很接受你的说法,以前我也这么想的 🌝;「过于反人类」确实是个夸张的形容,主要是反我自己,以至于不能接受

你说的 「不必每次都从命令开始输入」那就完全是一个搜索工具最基础的条件了
原生 Ctrl+R 的核心问题在我看来就是两个

- 每次只能看一条命令
- 只能精确匹配不能搜索多个单词

以下我会给一个场景跟你讲为什么说「反人类」

第一个问题,以你上面的例子,Ctrl+R 然后敲 foo 搜索,
出来命令不是你想要的,比如是个错误的 typo,怎么办?
当然是继续按 Ctrl+R 再向上查找第二个命令,还是不对,怎么办?
还是只能 Ctrl+R 再查找呀,第三条、第四条都不对呢?

用户在敲第三次 Ctrl+R 就已经会动摇了,不仅是没耐心,还会质疑自己,
到底第几个才是我想找的命令?
还有几次才到我想找的命令?
我会不会按快了没看清就跳过去了?
是不是我输错了按 100 次也没有这句命令?

那么这时会怎么做呢?是直接放弃搜索止损,然后改用 history | grep ;还是继续抱着怀疑人生的心态赌下一个就可能是想要的命令?
可能无解,最后每次都成 history | grep xxxx | tail -n 20

所以我做的工具,本质就是打破一个点,「预览止损」
一次搜索预览 15 条,一目十行扫下去,如果没有找到,用户就会直接对这个词「止损」,
放弃这个关键词换个词,或者增加更多关键词进一步过滤。
通过「止损」来提高效率,改善心态,减少掉发。

当然,如果直接用关键词在 15 条内就找到了 (一般都能找到),那就直接去选中了回车,这个的效率提升就不用讲了 🌝
eclipselu
2019-11-28 23:27:42 +08:00
@zthxxx cool 感谢!不过推荐你可以试试 fzf 非常好用 go 语言写的 安装只有一个 binary 不仅适用于 shell 和 vim Emacs 等结合的也很好 我已经很满意了
tsui
2019-11-29 04:54:24 +08:00
@zthxxx 你这个 zsh-history-enquirer 不是重造了 fzf 的轮子么,为啥不直接用 fzf

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/623793

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX