Syntax Highlighting för C++ Beter Sig Konstigt i VS Code på Ubuntu 22.04
Senast redigerat
Förtydligande av kod.
Visa signatur
Hej,
Jag lär mig C++ på Linux och fick nyss ett skumt problem med syntax highlighting/semantic highlighting i VS Code, bild nedan:
Ner till rad 56 är "std::cout" inte ljusblått som från rad 57. Hur gör jag så att "cout"-delen blir ljusblå som på rad 57?
Det må vara en kosmetisk detalj men jag får inte samma fel i andra filer med många "std::cout". Om jag klipper och klistrar koden från den ursprungliga filen till en ny fil så kvarstår problemet.
Jag har kollat på inställningar för syntax highlighting och semantic highlighting, ingen av dessa har hjälpt något. Koden kompilerar felfritt med g++ och exekverar utan problem.
Om det behövs kan jag lägga upp koden i sin helhet vid förfrågan.
Det är svårt att se när du inte skickar hela koden. I alla fall, när du skriver '\n' är det en char (till skillnad från char[] eller kanske string i C++), så det kan ställa till det med highlightingen.
Det är svårt att se när du inte skickar hela koden. I alla fall, när du skriver '\n' är det en char (till skillnad från char[] eller kanske string i C++), så det kan ställa till det med highlightingen.
All kod:
#include <limits>
#include <cstddef>
#include <string>
#include <bit>
#include <type_traits>
#include <sstream>
#include <iostream>
template <typename T>
requires std::is_signed_v <T>
std::string to_power_of_two(T val) {
const bool negative = val < 0;
using U = std::make_unsigned_t <T>;
const U uval = negative ? static_cast <U> (- val) : static_cast <U> (val);
const auto width = std::bit_width(uval) - negative;
std::ostringstream ss;
ss << (negative ? '-' : '+') << "2^" << width;
if (! negative) {
ss << "-1";
}
return ss.str ();
}
template <typename T>
requires std::is_unsigned_v <T>
std::string to_power_of_two(T val) {
std::ostringstream ss;
ss << "+2^" << std::bit_width(val);
return ss.str ();
}
int main() {
std::cout << "Below is a list of max and min values for all numeric types on this system: " << '\n';
std::cout << "*********** Integer Ranges ************" << '\n';
std::cout << "**** short int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<short>::min() /* << " = " << to_power_of_two(std::numeric_limits<short>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<short>::max() << " = " << to_power_of_two(std::numeric_limits<short>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned short int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned short int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned short int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned short int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned short int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<int>::min() << " = " << to_power_of_two(std::numeric_limits<int>::min()) << '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<int>::max() << " = " << to_power_of_two(std::numeric_limits<int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<long int>::min() << " = " << to_power_of_two(std::numeric_limits<long int>::min()) << '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<long int>::max() << " = " << to_power_of_two(std::numeric_limits<long int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned long int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned long int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned long int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned long int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** long long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<long long int>::min() << " = " << to_power_of_two(std::numeric_limits<long long int>::min()) << '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<long long int>::max() << " = " << to_power_of_two(std::numeric_limits<long long int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned long long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned long long int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned long long int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned long long int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned long long int>::max()) << '\n';
std::cout << '\n';
std::cout << "*********** Floating Point Ranges ************" << '\n';
std::cout << "**** float ****" << '\n';
std::cout << "Min (±): " << std::dec << std::numeric_limits<float>::min() << '\n';
std::cout << "Max (±): " << std::dec << std::numeric_limits<float>::max() << '\n';
std::cout << '\n';
std::cout << "**** double ****" << '\n';
std::cout << "Min (±): " << std::dec << std::numeric_limits<double>::min() << '\n';
std::cout << "Max (±): " << std::dec << std::numeric_limits<double>::max() << '\n';
std::cout << '\n';
std::cout << "**** long double ****" << '\n';
std::cout << "Min (±): " << std::dec << std::numeric_limits<long double>::min() << '\n';
std::cout << "Max (±): " << std::dec << std::numeric_limits<long double>::max() << '\n';
return 0;
}
Finns en utmärkt tag: [code] kod här tack [/code].
#include <limits>
#include <cstddef>
#include <string>
#include <bit>
#include <type_traits>
#include <sstream>
#include <iostream>
template <typename T>
requires std::is_signed_v <T>
std::string to_power_of_two(T val) {
const bool negative = val < 0;
using U = std::make_unsigned_t <T>;
const U uval = negative ? static_cast <U> (- val) : static_cast <U> (val);
const auto width = std::bit_width(uval) - negative;
std::ostringstream ss;
ss << (negative ? '-' : '+') << "2^" << width;
if (! negative) {
ss << "-1";
}
return ss.str ();
}
template <typename T>
requires std::is_unsigned_v <T>
std::string to_power_of_two(T val) {
std::ostringstream ss;
ss << "+2^" << std::bit_width(val);
return ss.str ();
}
int main() {
std::cout << "Below is a list of max and min values for all numeric types on this system: " << '\n';
std::cout << "*********** Integer Ranges ************" << '\n';
std::cout << "**** short int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<short>::min() /* << " = " << to_power_of_two(std::numeric_limits<short>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<short>::max() << " = " << to_power_of_two(std::numeric_limits<short>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned short int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned short int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned short int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned short int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned short int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<int>::min() << " = " << to_power_of_two(std::numeric_limits<int>::min()) << '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<int>::max() << " = " << to_power_of_two(std::numeric_limits<int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<long int>::min() << " = " << to_power_of_two(std::numeric_limits<long int>::min()) << '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<long int>::max() << " = " << to_power_of_two(std::numeric_limits<long int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned long int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned long int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned long int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned long int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** long long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<long long int>::min() << " = " << to_power_of_two(std::numeric_limits<long long int>::min()) << '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<long long int>::max() << " = " << to_power_of_two(std::numeric_limits<long long int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned long long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned long long int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned long long int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned long long int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned long long int>::max()) << '\n';
std::cout << '\n';
std::cout << "*********** Floating Point Ranges ************" << '\n';
std::cout << "**** float ****" << '\n';
std::cout << "Min (±): " << std::dec << std::numeric_limits<float>::min() << '\n';
std::cout << "Max (±): " << std::dec << std::numeric_limits<float>::max() << '\n';
std::cout << '\n';
std::cout << "**** double ****" << '\n';
std::cout << "Min (±): " << std::dec << std::numeric_limits<double>::min() << '\n';
std::cout << "Max (±): " << std::dec << std::numeric_limits<double>::max() << '\n';
std::cout << '\n';
std::cout << "**** long double ****" << '\n';
std::cout << "Min (±): " << std::dec << std::numeric_limits<long double>::min() << '\n';
std::cout << "Max (±): " << std::dec << std::numeric_limits<long double>::max() << '\n';
return 0;
}
Finns en utmärkt tag: [code] kod här tack [/code].
#include <limits>
#include <cstddef>
#include <string>
#include <bit>
#include <type_traits>
#include <sstream>
#include <iostream>
template <typename T>
requires std::is_signed_v <T>
std::string to_power_of_two(T val) {
const bool negative = val < 0;
using U = std::make_unsigned_t <T>;
const U uval = negative ? static_cast <U> (- val) : static_cast <U> (val);
const auto width = std::bit_width(uval) - negative;
std::ostringstream ss;
ss << (negative ? '-' : '+') << "2^" << width;
if (! negative) {
ss << "-1";
}
return ss.str ();
}
template <typename T>
requires std::is_unsigned_v <T>
std::string to_power_of_two(T val) {
std::ostringstream ss;
ss << "+2^" << std::bit_width(val);
return ss.str ();
}
int main() {
std::cout << "Below is a list of max and min values for all numeric types on this system: " << '\n';
std::cout << "*********** Integer Ranges ************" << '\n';
std::cout << "**** short int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<short>::min() /* << " = " << to_power_of_two(std::numeric_limits<short>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<short>::max() << " = " << to_power_of_two(std::numeric_limits<short>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned short int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned short int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned short int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned short int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned short int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<int>::min() << " = " << to_power_of_two(std::numeric_limits<int>::min()) << '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<int>::max() << " = " << to_power_of_two(std::numeric_limits<int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<long int>::min() << " = " << to_power_of_two(std::numeric_limits<long int>::min()) << '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<long int>::max() << " = " << to_power_of_two(std::numeric_limits<long int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned long int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned long int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned long int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned long int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** long long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<long long int>::min() << " = " << to_power_of_two(std::numeric_limits<long long int>::min()) << '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<long long int>::max() << " = " << to_power_of_two(std::numeric_limits<long long int>::max()) << '\n';
std::cout << '\n';
std::cout << "**** unsigned long long int ****" << '\n';
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned long long int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned long long int>::min()) */<< '\n';
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned long long int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned long long int>::max()) << '\n';
std::cout << '\n';
std::cout << "*********** Floating Point Ranges ************" << '\n';
std::cout << "**** float ****" << '\n';
std::cout << "Min (±): " << std::dec << std::numeric_limits<float>::min() << '\n';
std::cout << "Max (±): " << std::dec << std::numeric_limits<float>::max() << '\n';
std::cout << '\n';
std::cout << "**** double ****" << '\n';
std::cout << "Min (±): " << std::dec << std::numeric_limits<double>::min() << '\n';
std::cout << "Max (±): " << std::dec << std::numeric_limits<double>::max() << '\n';
std::cout << '\n';
std::cout << "**** long double ****" << '\n';
std::cout << "Min (±): " << std::dec << std::numeric_limits<long double>::min() << '\n';
std::cout << "Max (±): " << std::dec << std::numeric_limits<long double>::max() << '\n';
return 0;
}
Tack!
Det händer lite då och då att highlightingen slutar fungera. Men det brukar lösa sig om man startar om vs code eller datorn. Om det är permanent i en fil så kan det vara t.ex. line endings i inklistrade koden som är problemet.
Det händer lite då och då att highlightingen slutar fungera. Men det brukar lösa sig om man startar om vs code eller datorn. Om det är permanent i en fil så kan det vara t.ex. line endings i inklistrade koden som är problemet.
Testade med "std::endl", samma problem:
#include <limits>
#include <cstddef>
#include <string>
#include <bit>
#include <type_traits>
#include <sstream>
#include <iostream>
template <typename T>
requires std::is_signed_v <T>
std::string to_power_of_two(T val) {
const bool negative = val < 0;
using U = std::make_unsigned_t <T>;
const U uval = negative ? static_cast <U> (- val) : static_cast <U> (val);
const auto width = std::bit_width(uval) - negative;
std::ostringstream ss;
ss << (negative ? '-' : '+') << "2^" << width;
if (! negative) {
ss << "-1";
}
return ss.str ();
}
template <typename T>
requires std::is_unsigned_v <T>
std::string to_power_of_two(T val) {
std::ostringstream ss;
ss << "+2^" << std::bit_width(val);
return ss.str ();
}
int main() {
std::cout << "Below is a list of max and min values for all numeric types on this system: " << std::endl;
std::cout << "*********** Integer Ranges ************" << std::endl;
std::cout << "**** short int ****" << std::endl;
std::cout << "Min: " << std::dec << std::numeric_limits<short>::min() /* << " = " << to_power_of_two(std::numeric_limits<short>::min()) */<< std::endl;
std::cout << "Max: " << std::dec << std::numeric_limits<short>::max() << " = " << to_power_of_two(std::numeric_limits<short>::max()) << std::endl;
std::cout << std::endl;
std::cout << "**** unsigned short int ****" << std::endl;
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned short int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned short int>::min()) */<< std::endl;
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned short int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned short int>::max()) << std::endl;
std::cout << std::endl;
std::cout << "**** int ****" << std::endl;
std::cout << "Min: " << std::dec << std::numeric_limits<int>::min() << " = " << to_power_of_two(std::numeric_limits<int>::min()) << std::endl;
std::cout << "Max: " << std::dec << std::numeric_limits<int>::max() << " = " << to_power_of_two(std::numeric_limits<int>::max()) << std::endl;
std::cout << std::endl;
std::cout << "**** unsigned int ****" << std::endl;
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned int>::min()) */<< std::endl;
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned int>::max()) << std::endl;
std::cout << std::endl;
std::cout << "**** long int ****" << std::endl;
std::cout << "Min: " << std::dec << std::numeric_limits<long int>::min() << " = " << to_power_of_two(std::numeric_limits<long int>::min()) << std::endl;
std::cout << "Max: " << std::dec << std::numeric_limits<long int>::max() << " = " << to_power_of_two(std::numeric_limits<long int>::max()) << std::endl;
std::cout << std::endl;
std::cout << "**** unsigned long int ****" << std::endl;
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned long int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned long int>::min()) */<< std::endl;
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned long int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned long int>::max()) << std::endl;
std::cout << std::endl;
std::cout << "**** long long int ****" << std::endl;
std::cout << "Min: " << std::dec << std::numeric_limits<long long int>::min() << " = " << to_power_of_two(std::numeric_limits<long long int>::min()) << std::endl;
std::cout << "Max: " << std::dec << std::numeric_limits<long long int>::max() << " = " << to_power_of_two(std::numeric_limits<long long int>::max()) << std::endl;
std::cout << std::endl;
std::cout << "**** unsigned long long int ****" << std::endl;
std::cout << "Min: " << std::dec << std::numeric_limits<unsigned long long int>::min() /* << " = " << to_power_of_two(std::numeric_limits<unsigned long long int>::min()) */<< std::endl;
std::cout << "Max: " << std::dec << std::numeric_limits<unsigned long long int>::max() << " = " << to_power_of_two(std::numeric_limits<unsigned long long int>::max()) << std::endl;
std::cout << std::endl;
std::cout << "*********** Floating Point Ranges ************" << std::endl;
std::cout << "**** float ****" << std::endl;
std::cout << "Min (±): " << std::dec << std::numeric_limits<float>::min() << std::endl;
std::cout << "Max (±): " << std::dec << std::numeric_limits<float>::max() << std::endl;
std::cout << std::endl;
std::cout << "**** double ****" << std::endl;
std::cout << "Min (±): " << std::dec << std::numeric_limits<double>::min() << std::endl;
std::cout << "Max (±): " << std::dec << std::numeric_limits<double>::max() << std::endl;
std::cout << std::endl;
std::cout << "**** long double ****" << std::endl;
std::cout << "Min (±): " << std::dec << std::numeric_limits<long double>::min() << std::endl;
std::cout << "Max (±): " << std::dec << std::numeric_limits<long double>::max() << std::endl;
return 0;
}
Testade med "std::endl", samma problem:
Menade de osynliga tecken som skrivs ut när man trycker enter.
Testa vad Elgot skrev, tror det går att få vs code att göra alla samma till samma nere i höger hörn.
Jag kan inte reproducera problemet på VSCode på min Windows-PC, men jag har å andra sidan inte heller några särskilda insticksprogram för C++ installerade.
Händer problemet fortfarnade om du copy-pastar koden här från Sweclockers-tråden istället för från din andra fil? Kan ju vara något osynligt skumt tecken som försvunnit på vägen hit till Sweclockers
Jag kan inte reproducera problemet på VSCode på min Windows-PC, men jag har å andra sidan inte heller några särskilda insticksprogram för C++ installerade.
Händer problemet fortfarnade om du copy-pastar koden här från Sweclockers-tråden istället för från din andra fil? Kan ju vara något osynligt skumt tecken som försvunnit på vägen hit till Sweclockers
Testade nyss det, fungerade ej. Bild nedan på alla mina plugins för VS Code:
Testade nyss det, fungerade ej. Bild nedan på alla mina plugins för VS Code:
<Uppladdad bildlänk>
Vad händer om du stänger av alla dina extensions?
Vad händer om du stänger av alla dina extensions?
<Uppladdad bildlänk>
Då försvinner all ljusblå färgläggning på cout:
Då försvinner all ljusblå färgläggning på cout:
<Uppladdad bildlänk>
Då är det ett av dina insticksprogram som orsakar problemet.
Du kan använda Extension Bisect för att ta reda på vilket.
https://code.visualstudio.com/blogs/2021/02/16/extension-bise...
Copyright © 1999–2024 Geeks AB. Allt innehåll tillhör Geeks AB.
Citering är tillåten om källan anges.