1/ Can you recommend an IDE that will do what I want?
2/ There are dozens of ESP32 modules out there; is there one that you recommend as a good introductory and learning platform?
1. Since you know and like VisualMicro, why not keep using it? The website expressly mentions that one of the supported debuggers is Espressif’s official debugger (ESP-PROG), so it stands to reason that ESP32’s can also be programmed.
Bear in mind that the Arduino framework on ESP32 is fundamentally a lightweight wrapper for the underlying ESP-IDF framework that runs on RTOS. It’s less common to do bare metal on ESP32, and some of the ESP32’s key features, notably Wi-Fi and Bluetooth, can only be used via the official API, as they are deliberately undocumented at the register level.
Anyway, what isn’t obvious to many is that you can access the entire ESP-IDF command set from within Arduino, since ESP-IDF and FreeRTOS are always used under the hood. At most you need to provide a path for the ESP-IDF header files so the compiler knows they exist. This means you can use familiar Arduino syntax for everyday stuff, and then use direct ESP-IDF (and FreeRTOS) calls as needed.
IIRC it’s also theoretically possible to use ESP-IDF as the “primary” IDE and include the Arduino framework as you would any other library.
The other super common toolchain for ESP32 with Arduino framework is, as others have said, PlatformIO. That’s what I use most of the time. It doesn’t support quite as many boards as Arduino IDE, though.
2. There are tons of good boards, from the ubiquitous DEVKITC series of boards from Espressif, to the various clones and improved clones thereof (like Adafruit’s delightful Feather line), to more complex boards from Espressif (like the LyraT and Korvo lines for audio development and the BOX series with color LCDs for HMI applications) and others.
Regardless of which IDE you use, if you use ESP32 with the Arduino framework, beware that not all ESP32 chips are supported in the Arduino framework. The original ESP32 (no suffix), the ESP32-S2, -S3, -C3, -C6, and -H2 are supported, but the others are not. (Currently, that means the -P, -C2, -C5, and -C61 aren’t supported; you’d have to use these with ESP-IDF itself.)