停止按向上(箭头)来查找上一个命令

2025-06-10

停止按向上(箭头)来查找上一个命令

有没有想过,有没有办法提高终端和 Shell 的效率?感觉有点笨重?以下是一些适合从未涉足系统管理或开发运维工作的朋友的小贴士。


问题:我是否需要多次向上按(箭头)才能找到需要运行的上一个命令?如果我只想再次运行上一个命令怎么办?

解决方案:拜托,别再(反复按向上键,然后目测)了!这效率低得可笑!三点建议!

-- FIRST --只需运行上一个命令而不离开键盘主行:(ctrl-p“上一个”的助记符),然后按<Enter>键。跳过了我们的命令?ctrl-n(“下一个”的助记符)。

-- 第二 --如果我们知道这不是最后一个命令,以下可能是我最依赖的实用程序:reverse-i-search。此实用程序将我们的(命令)history视为堆栈,并(模糊)找到历史记录中存在的任何术语/关键字的最新匹配项。要初始化它,请点击ctrl-r。一旦我们输入了某些内容,它就会到达我们的第一个匹配项。如果第一个匹配项不是我们要找的,则ctrl-r再次点击,它将转到下一个上一个匹配项。如果我们已经过了它,请使用ctrl-s/ <Shift>-ctrl-r(取决于我们的操作系统)。要退出搜索,请使用ctrl-g。这几乎完全消除了我对别名的所有使用。

假设我们的历史记录如下所示。注意:左侧的数字对应于我的 bash 历史记录中的行号

$ history
2311  ls -l
2312  rg --files | fzf
2313  vim reverse_singly_linked_list.py
2314  python -m unittest reverse_singly_linked_list.py
2315  ping google.com
2317  mix routes
2318  mix phx.routes
2319  git branch
2320  git log -3 --reverse
2322  htop
2326  jobs
2327  git status
2328  git diff -w
2329  ./deploy.sh
2330  less README.md
2331  man awk

现在,我在提示符下搜索包含以下字符的最后一个命令:test。如果我们仔细查看上面的内容,我们会注意到它的命令编号2314与我用 Python 为链表运行的单元测试相对应。大多数人的做法是按下十二次,我再说一遍,十二次!按下ctrl-r,然后输入字符 ,test就能找到完整的命令。我们只需按下 即可<Enter>调用(运行)它。

                     👇 # what we type will display here
$ (reverse-i-search)`test': python -m unittest reverse_singly_linked_list.py
                                          👆 # match begins here

-- 最后(第三步)——我们可以用管道符“ historyinto ” grep(不带尖括号)。这将提取包含给定术语的命令的所有匹配项。如果我们只能记住命令的某些片段,并且避免ctrl-r在有多个匹配项时多次执行,这将非常有用。

$ history | grep <term/keyword(s)>

问题:这个东西有哪些选项?(一些 Unix 实用程序)我每次都要去 Google 吗?

解决方案:内置的 Unix 实用程序(例如ls,,,,cd通常有很多选项。最快捷的参考资料之一是手册,也称为 man-pages,只需使用 ,即可轻松调用rm例如)。我发现(长格式)、(带目录的长格式)和(按时间排序的长格式)特别有用。xargsps$ man <utility>$ man lsls -lls -lals -lt


问题:好的,我现在正在使用手册页,但是我该如何浏览它或找到我要搜索的内容?这东西太大了!

解决方案:手册页通常采用vi格式(几乎所有 Unix/Linux 系统(包括 macOS)上都流行的文本编辑器)。搜索方式很简单,先点击/(正斜杠)开始搜索,然后输入一些关键字或选项(例如/foobar或),即可在页面中/-a搜索foobar或。-a


问题:好的,搜索只会带我到第一个匹配的实例。我该如何找到一个?或者返回上一个

解决方案:我们可以使用n(小写字母和“下一个”的助记符)转到下一个实例,使用<Shift>-n(大写字母)返回(上一个实例)


问题:有没有办法创建一个新目录并立即切换到该目录?

解决方案$ mkdir foo && cd $_。最后一个命令参数被捕获在_(下划线) 变量中。要访问变量,我们使用$前缀


问题:有没有更简单的方法在目录之间来回切换?

解决方案:使用-

$ pwd
/Users/me/Desktop

$ cd foo
foo $

$ pwd
/Users/me/Desktop/foo

$ cd -
/Users/me/Desktop

$ cd -
/Users/me/Desktop/foo

问题:如何在已输入的命令文本中移动或编辑上一个命令?如何跳转到行首或行尾?

解决方案:readline 快捷键 - 允许我们在一行内导航并执行编辑。这极大地提高了效率。令人惊讶的是,我们的大多数工具都是用 readline 构建的,所以这些快捷键通常在任何允许我们输入文本的地方都能使用(例如 Chrome 或 Firefox 地址栏、Google Doc 等),所以即使在 shell 之外,它们也值得学习。

试试这些。注意:在 macOS 上,我们必须配置 meta 键才能使基于 option 键的命令正常工作(操作方法见以下命令)。如果我们注重人体工程学,一个常见的按键重新映射方法是将 Caps-Lock 键更改为ctrl。这可以通过系统键盘偏好设置的修饰键(在 macOS 上)来完成:

alt-b / option-b (macOS): move cursor back one word
alt-f / option-f (macOS): move cursor forward one word
ctrl-a: move cursor to the beginning of line
ctrl-b: move cursor backward (←)
ctrl-d: delete a character
ctrl-e: move cursor to the end of line
ctrl-f: move cursor forward (→)
ctrl-k: kill the line after the cursor, add to clipboard
ctrl-n: next line, next command in history (↓)
ctrl-p: previous line, previous command in history (↑)
ctrl-u: kill the line before the cursor, add to clipboard
ctrl-w: delete a word
ctrl-y: undo / paste from the clipboard

如何在 macOS 上的 iTerm2 中使用选项键设置前进和后退的元键:

  1. 前往个人资料 > 密钥
  2. 加载预设 > 自然文本编辑
  3. 从“正常”>“Esc+”切换左/右选项
鏂囩珷鏉ユ簮锛�https://dev.to/wulymammoth/stop-pressing-up-arrow-to-find-a-previous-command-5370
PREV
给新开发人员前 5 天的 5 个建议 1. 与产品/工程团队以外的人会面 2. 花一些时间设置您的开发环境 3. 编写一些代码,进行提交 4. 按时下班 5. 努力工作,但不要太努力
NEXT
为什么我要放弃 Drupal 转而选择 Laravel