Bir komutun çıktısını bir dosyaya kaydetmeye çalışıyorum. Komut:
clang -Xclang -ast-dump -fsyntax-only main.cpp > output.txt
Ancak açıldığında elde edilen output.txt dosyası (ubuntu'daki gedit ve jedit tarafından) bana şunu veriyor:
[0;1;32mTranslationUnitDecl[0m[0;33m 0x4192020[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x4192558[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __int128_t[0m [0;32m'__int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192270[0m [0;32m'__int128'[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x41925b8[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __uint128_t[0m [0;32m'unsigned __int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192290[0m [0;32m'unsigned __int128'[0m
...
Gerçekten böyle görünmesi gerektiğinde:
TranslationUnitDecl 0x4e46020 <<invalid sloc>> <invalid sloc>
|-TypedefDecl 0x4e46558 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128'
| `-BuiltinType 0x4e46270 '__int128'
|-TypedefDecl 0x4e465b8 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128'
| `-BuiltinType 0x4e46290 'unsigned __int128'
...
Kodlamada bir sorun olabileceğini düşündüm, dosyanın kodlamasını kontrol ettim. file -bi output.txt
hangi çıktılar text/plain; charset=us-ascii
.
Kodlamayı utf-8 olarak değiştirirsem sorunun çözüleceğini düşündüm, bu yüzden şunu denedim:
clang -Xclang -ast-dump -fsyntax-only main.cpp | iconv -f us-ascii -t UTF-8 > output.txt
ama bir fark yaratmadı.
Bu sorunu çözmek için ne yapabilirim?
Sorun, sözdizimi ile vurgulanan sürümü görüntülemeye çalışmam değil (ilk etapta görüntülemekte sorun yaşamadım). Clang tarafından oluşturulan AST'yi bir dosyaya kaydetmem ve daha sonra ayrıştırmam gerekir; bu, kalan renk bilgisi için zor olacaktır.
>
çıktı oluşturmaz, yalnızca çıktılarınızı koymak istediğiniz kabuğu belirler.clang
verilen dosyada komut yerine terminal komutunu kullanın. Bundan sonra, aynı şekilde renk kodlarına izin vermeyecek şekilde görüntülüyorsunuz. Eğer olsaydıncat
Terminal devralacak gibi çalışır, ve yapabilirsinizless
aynı şeyi yapmak-R
bayrağı.