有没有办法可以指定 bash 重用我之前输入的项目?例如,如果我想重命名一个文件,添加几个字符作为前缀,我想做类似的事情
$> mv file.txt new_{prev}
并最终得到new_file.txt
.
有这样的符号吗?
答案1
您可以使用大括号( {}
),但方式略有不同。在大括号内,prefix{x,y,z...}suffix
, 将展开以将每个逗号分隔的部分放在prefix
和之间suffix
:
$ mv {,new_}file.txt
这将扩展到mv file.txt new_file.txt
.您还可以使用数字或字母范围执行此操作,{a..d}
将扩展到a b c d
,{1..4}
将扩展到1 2 3 4
。您只能在一层大括号内使用其中一个,但可以嵌套:
$ echo {a,c,{1..3}}
a c 1 2 3
有关大括号扩展的更多信息,请参阅以下问题:除了 mkdir 之外还有大括号扩展命令吗?
答案2
您可以定义一个编辑功能来复制光标下的前一个单词。
copy_preceding_word () {
local prefix suffix word
prefix="${READLINE_LINE:0:$READLINE_POINT}"
suffix="${READLINE_LINE:$READLINE_POINT}"
if [[ $prefix =~ ([^[:space:]]+)[[:space:]]+[^[:space:]]*$ ]]; then
word=${BASH_REMATCH[1]}
READLINE_LINE="$prefix$word$suffix"
((READLINE_POINT += ${#word}))
fi
}
bind -x '"\e\C-_": copy_preceding_word'
答案3
我的~/.inputrc
:
"\ej": "!#:$\e^"
!#
是当前行,$
是最后一个单词,\e^
是history-expand-line
。