Does a VPN hide what URLs I visit?

It mostly depends on the type of VPN you use, how it is setup and how you use it.

Generally speaking, if your VPN is setup to process all your connections then the attacker will see the initial handshake and then only encrypted data (and some management traffic, from time to time).

So, someone sniffing the network between you and the VPN host will not be able to see what web site you're accessing, what DNS requests you make or anything else.

This, however, relies on a few critical elements that are not always guarantee:

  • The client you're using is secure and properly configured.
  • The attacker does not have any control on any part of the infrastructure you're going to use outside the network he's snooping on (specifically, he does not control the DNS server you're using - which might or might not be provided by your VPN or any other host you're accessing through your tunnel).
  • You connect to your VPN provider before doing any browsing and keep using it all the time afterward until you terminate the session (it's easy to leak information when web sites can do requests in the background and when browsers might be setup to restart your previous session on startup).

Also, be aware that it's possible to setup a VPN connection only to secure data that goes to a specific network. In that case, most of your traffic will actually be unencrypted.

Not if you are still using your ISP DNS

Below is very good answer that explains how to force all the traffic to leave your PC to the VPN

If you configured the above correctly no one will be able to find out which sites you visit even if they were listening to your traffic unless your PC itself is bugged