The most useful intuition, in my opinion, comes from understanding the purpose of this operator / Var. Well-designed macros simply could not be written as functions and still offer the same functionality with the same syntax, because if they could, they would actually be written as functions (see the "Well-designed" part above!). 1 So, if you are dealing with a construct that cannot be a regular function, then you know that it is not; otherwise it is possible.
In addition, the usual ways to learn Vars exported by the library tell you if you are dealing with a macro or an up function. This is true for doc ( (doc foo) says that foo is the macro at the top of its output, if that is true), source (since it gives all the code) and M-. (go to the definition in Emacs with nrepl.el or swank-clojure; M-, bounces back). You can expect that the documentation can indicate what a macro is and what not (except that this is not necessarily true for docstrings, since all the usual ways to access docstring already tell you if you are dealing with a macro as described above).
If you discard a piece of code with the intention of forming a rough understanding of what it probably does based on the assumption that the various operators perform the functions suggested by their names, then either (1) the names are quite suggestive and you get an idea which is for the code, so you don’t even have to worry about which operators are macros, or (2) the names are not suggestive enough, so you will need to dive into the documents or source for some operators anyway e, and then the first thing you learn is which ones are registered as macros.
Finally, there is no single naming style for macros, although there are certain conventions specific to specific use cases. For example, with-foo line constructions are usually convenient macros whose purpose is to simplify working with resources like foo ; dofoo -line constructions tend to be macros that take the body of expressions to be executed (how many times and with what additional context setting the macro depends, the most basic member of this do family is actually a special form, not a macro); The deffoo constructs introduce new Vars or type-like objects.
It is worth noting that such models are sometimes violated. For example, most Threading constructs ( -> and Co.) are macros, but xml-> from clojure.data.zip.xml is a function. This makes sense when you consider the provided functionality, which returns us to the goal that the operator is the most useful source of intuition.
1 There may be some exceptions to this rule. One would expect them to be documented. Some projects, of course, are not documented at all (or almost so); here the problem completely goes away, since in any case you need to go to the source to understand everything.