在我的工作流程中,我经常做:
cat this/very/long/filename.txt
cd !$
bash: cd: this/very/long/filename.txt: Not a directory
Run Code Online (Sandbox Code Playgroud)
这是预期的:(
现在我恢复最后一个命令,手动删除文件部分,然后重复cd,现在可以正常工作.这是太多的打字!
如果有一条bash快捷方式,那将是非常好的:
cd !§
Run Code Online (Sandbox Code Playgroud)
哪个可以给我最后一个参数的父级.我知道!§不存在,我只是希望它能做到!有什么能满足这个吗?
Rob*_*ale 39
Etvoilà. 历史修饰语来救援!
$ cd !!:$:h
Run Code Online (Sandbox Code Playgroud)
可以缩写为
$ cd !$:h
Run Code Online (Sandbox Code Playgroud)
这个命令会将最后一个参数上一个命令,并删除尾部的路径名.
更多细节:
!! 扩展到上一个命令:$ 扩展到上一个命令的最后一个参数:h采取标题 ; 也就是说,删除文件名(这是上一个参数的尾部)作为旁白,
!!:$:t
Run Code Online (Sandbox Code Playgroud)
完全相反.
有关深入讨论,请参阅Bash文档.
kon*_*box 15
这个较短的版本也可以工作:
cd !$:h
Run Code Online (Sandbox Code Playgroud)
细节:
!$是同义词,!!:$它表示上一个命令的最后一个参数.: 将修饰符与事件字指示符分开.h 是删除尾随文件名组件的修饰符.基于其他几个人提出的答案,理想的工作流程是cd !$:h在cat this/very/long/filename.txt命令后输入.这个答案,cd !$:h仍然cd !$可以使用,但是,一旦你犯了这个错误,你可以使用更短的!:h,重复最后一个命令(cd this/very/long/filename.txt),但只取最后一个字的头.
我正在使用这些鲜为人知的缩写:
!word_designator相当于
非数字word_designator(例如, 相当于)和!!:word_designator!$!!:$!:modifier相当于
(例如,相当于).!!:modifier!:h!!:h在这种情况下,我通常会这样做:(我有emacs键绑定)
cd Alt-dotAlt-b(n次)Ctrl-K
更好:
cdAlt-dotALT-Backspace(n次)
注意alt-b或ALT-Bs可以多次按下,直到你对路径感到满意为止.
cat this/very/long/filename.txt
cd !!^:h
cd this/very/long
Run Code Online (Sandbox Code Playgroud)
!! 指的是最后一个命令^ 第一个参数,第二个词(单词指示符):h 删除尾随路径名组件,留下头部(修改器).