rozpoczynanie vima od podstawiania poleceń

2

Pracuję nad projektem na dwóch różnych komputerach - jednym z systemem Mac OSX 10.8.3 i jednym z systemem Red Hat Enterprise Linux. Na komputerze Mac mogę to zrobić:

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

i wszystko działa dobrze. W systemie Linux nie działa. Wszystkie działają dokładnie tak, jak się spodziewam:

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

Ale

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

tworzy zestaw zniekształconych nazw plików, np

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

lub

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

Czy ktoś wie dlaczego?

Gabriel Perdue
źródło
Jak podkreśla Glenn, chodzi [[00mtu o sekwencje ansi używane do kolorowania wydruków na terminalu kompatybilnym z ansi. ls --color=nevermoże pomóc, zobacz stronę podręcznika man.
goldilocks

Odpowiedzi:

9

Masz alias (lub funkcję), lsktóry koloryzuje dane wyjściowe. Co type -a lsci daje Zamiast tego użyj

vim $(command ls ...)

Jednak: nie analizujls

Próbować

shopt -s nullglob globstar
printf "%s\n" **/*.{h,cpp}
Glenn Jackman
źródło
Ach, oczywiście kolory. Świetna odpowiedź, dziękuję! (Dla ls -Fh', and on the Linux box it is = ls is aliased to przypomnienia , na moim komputerze Mac wpisz -a ls = ls jest aliasowany do ls -F --color ')
Gabriel Perdue
1
@GabrielPerdue Napraw swój alias: zrób to alias ls='ls -F --color=auto'.
Gilles