GNU History Expansion 参考缺少示例,所以我无法判断这是否可能。
这是我想要做的。我跑了cat long/path/to/file1.txt | less
,然后我跑了vim file2.txt
。使用历史扩展,我想跑cat even/longer/path/to/file3.txt | less
但我不想:
- 键入
long/path/to/file1.txt
,因为键入不方便。 - 用数字引用前一个命令;我想用字符串引用它。即使用
!cat...
,但不!-2...
这能做到吗?
这是我尝试过的(没有效果):
!cat:^!cat:1^even/longer/path/to/file3.txt^
这是我的思考过程:
!cat
- 替换以字符串开头的最后一个命令cat
。:^x^y^
-在该命令中 替换x
为y
!cat:1
- 扩展到最后cat
一条命令的第一个参数,即long/path/to/file1.txt
even/longer/path/to/file3.txt
– 扩展文本的替换
这不起作用的一个明显原因是我在扩展中嵌套了扩展:!cat:1
被解释为文字字符串。
我得到这个输出:
long/path/to/file1.txtlong/path/to/file1.txteven/longer/path/to/file3.txt^: No such file or directory
如果您确定最初仅使用一个文件(而不是)运行该命令:
cat file1 file2 | less
或者
正如您所理解的(您在问题中说过), 指的是以 字符串“ ”开头的最新命令中的第 th 个单词。并且,如Bash参考手册中所述 , 缩写为,因此指的是 从第 th 个单词到最后一个单词。
!cat:n
n
cat
bash(1)
:n*
:n-$
n
或许:
不确定你为什么要用管道输送
cat
,less
对cat file | less
我来说这似乎很愚蠢less file | less
。一般来说,你应该避免直接将文件转储到终端设备,因为如果文件包含控制字符,这可能会扰乱终端。最好使用分页器。
在
zsh
:确实调用了分页器,然后如果您需要将该文件的内容提供给命令,您只需调用命令行(Up)并添加命令:
或者:
或者