鱼壳函数在作业控制中显示$ argv,而不是文件

时间:2016-06-08 13:45:38

标签: fish

我正试图改用鱼壳,但我遇到了一个问题。如果我将vi别名为vim并编辑文件,我无法看到我在作业控制中编辑的文件。

polis@josh1 ~> function testvi
                   vim $argv
               end
polis@josh1 ~> functions testvi
function testvi
    vim $argv
end
polis@josh1 ~> testvi foobar
polis@josh1 ~> jobs
Job Group   CPU State   Command
2   26087   0%  stopped vim $argv

如何制作输出:

2   26087   0%  stopped vim foobar

2 个答案:

答案 0 :(得分:1)

这是一种命令缩写优于别名(即函数)的情况:

abbr -a vi vim

现在,当您键入“vi”并按空格键时,它将被“vim”神奇地替换。您可以进行更复杂的扩展。例如,我使用这些缩写很多:

abbr -a gca git commit --amend
abbr -a gcm git checkout master

缩写的优点是它们比函数简单得多,扩展显示在shell历史中,我发现它比别名函数名更有用。

答案 1 :(得分:0)

我们想要首先将$argv扩展为新命令,然后执行该命令。我们可以使用eval

然而,这有皱纹,新命令中的任何特殊字符都将被解释,所以我们需要先解除它们。

整体功能是:

function testvi
    eval "vim "(string escape $argv)
end

这使用新的string内置,它位于刚刚发布的鱼类2.3.0中。

结果的插图,在这里编辑文件' foobar $ baz'表明逃避的作品:

> testvi 'foobar $baz'
> jobs
Job Group   State   Command
 5  60249   stopped vim 'foobar $baz'