我正试图改用鱼壳,但我遇到了一个问题。如果我将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
答案 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'