我编写了一个函数,可以在 Python 文件中找到函数或类定义。它生成一个与 vim 一起使用的参数列表。它适用于第一个参数/文件,但对于后续文件失败,因为结尾的 " 被添加到文件名中。
尽管生成了正确的输出,但当传递给 vim 时它不起作用。但是,当在命令行复制和粘贴相同的输出时,它可以工作。问题是"
当它应该是命令字符串的结尾时,结尾被解析为文件名的一部分:
vim +cmd1 file1 +"file2_cmd file2_cmd file2" +"file3_cmd file3_cmd file3"
我需要在\"
添加命令时添加文字双引号 ( ) 的函数,然后在与 vim 一起使用时解析文字引号。奇怪的是第一个字面引号被解析,而不是结尾字面引号。
vim +cmd file1 +" <-- this quote works, but this one doesn't --> "
代码:
function vpfd {
local args=''
find . -name "*.py" \
| xargs grep -En "(def|class) ${@}[(:]" \
| uniq \
| while read line; do
name=$(echo "${line}" | awk 'BEGIN { FS=":" }; { print $1 }')
num=$(echo "${line}" | awk 'BEGIN { FS=":" }; { print $2 }')
if [ ! "${args}" ]; then
args="+${num} ${name}"
else
args+=" +\"tabnew +${num} ${name}\""
fi
done
if [ "${args}" ]; then
echo "vim ${args}"
read p
vim $(echo ${args})
fi
例子:
$ vpfd main
vim +33 ./bar.py +"tabnew +15 ./foo.py"
如果我复制并粘贴上面的行它工作得很好,但是当函数试图打开 vim 并传递它时它不起作用${args}
。
在 vim 中:
- 错误信息:
Vim: not an editor command: 33 ./bar.py +"tabnew +15 ./foo.py"
- 只有空文件可见
- 我退出空文件
- vim 然后
./bar.py
在正确的行打开,并在第二个选项卡上打开不正确的文件./foo.py"
(尾随"
)
如果我复制并粘贴输出行,那么它可以正常工作:
$ vim +33 ./bar.py +"tabnew +15 ./foo.py"