我有一个与fishshell有关的问题。
我写了zsh的功能:
function agvim() {
vim $(ag "$@" | peco --query "$LBUFFER" | awk -F : '{print "-c " $2 " " $1}')
}
它有效。
但我刚移植此功能无法正常工作,此功能从zsh移植到fishshell。
function agvim
ag $argv | peco --query "$LBUFFER" | awk -F : '{print "-c " $2 " " $1}' >> $HOME/.agvim_history
vim (tail -n 1 $HOME/.agvim_history)
end
然而它无法正常工作。 vim命令将以tail的输出作为文件名打开。
因为我认为expand-command-substitution与zsh略有不同。
这是尾部的输出示例-c 3 bin/ec
,我想将此输出用作选项。
请告诉我更好的解决方案。
答案 0 :(得分:1)
这是尾部的输出示例-c 3 bin / ec,我想将此输出用作选项。
你遇到的问题是zsh,就像bash一样,会在空格上拆分命令替换,而fish只会在换行符上拆分。
这意味着zsh会将“-c”,“3”和“bin / ec”发送给vim,而fish会发送“-c 3 bin / ec”作为一个参数。
有几种方法可以解决这个问题 - 一种方法,如果你是从git运行鱼,就是使用tail | string split " "
。另一个适用于任何鱼类版本的是使用sed(tail | sed "s/ /\n/g"
)。
答案 1 :(得分:-1)
如果您信任输入,则可以使用eval
function agvim
eval vim (ag $argv | peco --query "$LBUFFER" | awk -F: '{print "-c",$2,$1}')
end