Quick way to move an object some distance from one external vertex to another external vertex?
A basic script for doing nearly the same (in object mode):

It is visually different as the object will move at first step then at the second one.
But the result is as expected, I think.
Use D key to use it. You can use Blender snapping options (i.e. snap to vertex) or not.
The principle is to use grab operator with invoke default from a modal operator:
import bpy
from mathutils import Vector

class GrabOffset(bpy.types.Operator):
    &quot;&quot;&quot;Move an object by an offset&quot;&quot;&quot;
    bl_idname = &quot;object.grab_offset&quot;
    bl_label = &quot;Grab with offset&quot;

    def modal(self, context, event):

        #Left click
        if event.type in {'LEFTMOUSE'}:
            #Second left click?
            if self.second_locations:
                #Calculate delta and move objects
                for obj, floc, sloc in zip(context.selected_objects, self.first_locations, self.second_locations):
                    obj.location = floc + obj.location - sloc
                return {'FINISHED'}
            #First left click
            else:
                #Keep locations
                self.second_locations = [Vector(o.location) for o in context.selected_objects]
                bpy.ops.transform.translate('INVOKE_DEFAULT')

        #Aborting
        if event.type in {'RIGHTMOUSE', 'ESC'}:
            context.object.location = self.first_location
            return {'CANCELLED'}

        return {'RUNNING_MODAL'}

    def invoke(self, context, event):
        if context.selected_objects:
            #Keep original locations
            self.first_locations = [Vector(o.location) for o in context.selected_objects]
            self.second_locations = None

            context.window_manager.modal_handler_add(self)
            
            #Invoke grab
            bpy.ops.transform.translate('INVOKE_DEFAULT')
            
            return {'RUNNING_MODAL'}
        else:
            self.report({'WARNING'}, &quot;No active object, could not finish&quot;)
            return {'CANCELLED'}

keymaps = []

def register():
    bpy.utils.register_class(GrabOffset)
    wm = bpy.context.window_manager
    kc = wm.keyconfigs.addon
    if kc:
        km = wm.keyconfigs.addon.keymaps.new(name='3D View', space_type='VIEW_3D')
        kmi = km.keymap_items.new(GrabOffset.bl_idname, 'D', 'PRESS', shift=False)
        keymaps.append((km, kmi))

def unregister():
    for km, kmi in keymaps:
        km.keymap_items.remove(kmi)
    keymaps.clear()
    bpy.utils.unregister_class(GrabOffset)

if __name__ == &quot;__main__&quot;:
    register()

    # test call
    #bpy.ops.object.modal_operator('INVOKE_DEFAULT')