2

我经常需要在 bash 命令中引用一段文本,例如:

git mv _fav-locations-cluster.html.erb partials/_fav_locations_cluster.html.erb

编辑#1

请注意,它来自破折号 -> 下划线

我想做类似的事情(其中 $0 和选项卡将被评估或其他东西):

git mv _fav-locations-cluster.html.erb partials/'$0 and tab'

其中 $0 和 tab 将引用第一个参数。这可能在bash或zsh中吗?

4

5 回答 5

5

历史扩展确实可以引用当前正在键入的行:

$ git mv _fav-locations-cluster.html.erb partials/!#:2:gs/-/_/

!#指当前行。:2指定第二个单词(文件名),并将该单词中:gs/-/_/所有出现的 替换-_。展开后命令为

$ git mv _fav-locations-cluster.html.erb partials/_fav_locations_cluster.html.erb
于 2012-11-19T20:09:46.450 回答
2

一个简单的技巧是将值粘贴到变量中并使用它;这将适用于您上面的示例:

f=_fav-locations-cluster.html.erb; git mv "$f" partials/"${f//-/_}"

或创建一个函数:

f() { git mv "$1" partials/"${1//-/_}".erb; }; f _fav-locations-cluster.html
于 2012-11-19T19:05:51.527 回答
0

在我的.zshrc我有:

bindkey -M emacs "\M-;" copy-prev-word

这允许我使用Meta+;来复制前一个单词。在您的示例中,默认情况下会复制partials/,但小部件也可以使用数字前缀来指定应使用较早的单词。因此,在绑定之前使用Meta+将完成您正在寻找的内容。2copy-prev-word

Bash 可能有类似的命令可用。

于 2012-11-19T18:52:02.990 回答
0

git mv {,partials/}_fav-locations-cluster.html.erb

于 2012-11-19T18:56:03.480 回答
0

除了其他解决方案:

f=_fav-locations-cluster.html.erb; git mv $f partials/$f

此解决方案的优点是您可以在后续命令中使用 $f。缺点是 a) 需要两个命令来完成相同的任务,并且 b) 之后你得到了一个残差变量 $f。

于 2012-11-19T19:07:22.610 回答