! in the vendors and in recipes mean you can't use it/make it in the current state.
For vendors, you probably need to learn a skill before you can use the item. If you open the item, you will usually get a verbal warning about what you need to do before you can use that item (you can still purchase it, but you won't be able to use it until you get that skill completed).
In recipes, there is typically an ingredient missing. Often, if you have your bags loaded with basic items, like I do, you can make that item from the things in your bag...but it will require an extra step or two to get the exact item the recipe needs. Sometimes you just don't have enough of an item, so you need to make more before you can do the recipe.
I believe they also show up in red as well...suspect they do both since some players are color blind and may not see the red, so they get the visual !.
I think way back in the long long ago ! was the separator between host names and was called something like the bang path. That was before I was looking at code.
#! as hashbang in UNIX -- the Brits I used to work with always referred to the ! as bang.