There's just so much you can do with a touch probe! I now have macros for zeroing the Z axis after a tool change, finding the center of a circular or rectangular pocket, edge-finding, corner-finding, and now for vise alignment.
The attached macro will zero X and Y to the left-rear corner of a vise, then tell you how much off-true the rear jaw is. With this, I am able to zero my vise to within 0.0001" in under two minutes. You'll see the macro has several variables which are loaded from "User DROs" (those with numbers above 1000), but you can simply hard-wire those values in the macro if you don't want to add the DROs to your screenset. These variables are:
ViseWidth - total width of your vise jaws. The two points probed will be BackoffDistance in from each end of the jaw. So, for example, if your jaws are 6" wide, and BackoffDistance is set to 1/4", it will probe 1/4" and 5-3/4" from the left edge of the jaws.
ProbeRadius - radius of the tip of your touch probe. This value is loaded from the Probe diameter DRO on the Offsets page of the standard Mach screenset.
ProbeDistance - maximum distance to move when probing for vise edges
ProbeFeed - feedrate to use when probing
BackoffDistance - distance to backoff from vise jaw edges before doing a rapid. Also used to determine how far from each end of the vise jaws to probe. Note this also defines the maximum "safe" vise misalignment.
To use it, simply install your touch-probe, position it within the distance specified by the "ProbeDistance" variable of the left-front corner of your rear vise jaw, then run the macro. It'll first find the left edge of the jaw, and zero the X DRO to that position, then find the front edge of the jaw, and zero the YDRO to that position, then zip over to the right-hand end of the jaw, and tell you how far off-true it is. Just adjust the vise, and re-run the macro until you're within whatever tolerance you like.
If you want to make this truly universal and fast, add a few more macros.
Your macro outputs the offset in Y, use that variable to calculate the angle based on the distance you traveled in X. Now you can use the angle variable with a coordinate rotation command and run your program on an angle.