通过命令替换启动 vim

通过命令替换启动 vim

我正在两台不同的机器上处理一个项目 - 一台运行 Mac OSX 10.8.3,另一台运行 Red Hat Enterprise Linux。在我的 Mac 上,我可以这样做:

vim $(ls -R */*.@(h|cpp) */*/*.@(h|cpp))

一切正常。在 Linux 机器上,它失败了。所有这些都完全按照我的预期工作:

ls -R */*.@(h|cpp) */*/*.@(h|cpp)
echo $(ls -R */*.@(h|cpp) */*/*.@(h|cpp))
export myfilelist=$(ls -R */*.@(h|cpp) */*/*.@(h|cpp))
echo $myfilelist

vim $(ls -R */*.@(h|cpp) */*/*.@(h|cpp))

产生一组损坏的文件名,例如

^[[00m^[[00mevent_builder/include/eb_service.h^[[00m" [New DIRECTORY]

或者

:ls
  1 %a   "^[[00m^[[00mevent_builder/include/eb_service.h^[[00m" line 1
  2      "^[[00mevent_builder/include/EventBuilder.h^[[00m" line 0

有谁知道为什么?

答案1

您有一个别名(或函数)来为ls输出着色。type -a ls能给你什么?而是使用

vim $(command ls ...)

然而: 不解析ls

尝试

shopt -s nullglob globstar
printf "%s\n" **/*.{h,cpp}

相关内容