【发布时间】:2020-10-03 07:42:45
【问题描述】:
我有一个 zsh 函数 fvi (find vi),它递归地 grep 搜索具有模式的文件的目录,收集它们并在 vim 中打开它们(在 Mac 上):
function fvi { grep -rl $1 . | xargs sh -c '/Applications/MacVim.app/Contents/MacOS/Vim -g -- "$@" <$0' /dev/tty }
这看起来很糟糕,但工作正常(在 Mac 上)。但我想将 vi 的搜索模式设置为 $1:
function fvi { grep -rl $1 . | xargs zsh -c '/Applications/MacVim.app/Contents/MacOS/Vim -c +/"$1" -g -- "$@" <$0' /dev/tty }
这当然不起作用,因为 xargs/zsh 看到 $1 并将其转换为文件名。我可以手动说 -c +/xyz,它会将模式设置为 xyz。所以我知道 vim 命令语法是有效的。我只是无法将 shell 命令参数 $1 替换为 xargs 字符串。
有什么想法吗?
【问题讨论】:
-
您是否只是要求 vi 看到文字
$1?您是否尝试过单引号而不是双引号(即+/'$1')或转义它(即+/"\$1")? -
不。 '、''、"、\ 和 \\ 不起作用。fvi hello 目前所做的是递归搜索当前目录中包含字符串 hello 的文件,收集该列表并在 vim 中打开所有文件。上面的函数就是这样做的。我想要的是然后用 vim 和 -c +/hello 打开所有这些文件。