diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 95618e659..4128d14e0 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -927,7 +927,7 @@ QuickFixCmdPre			Before a quickfix command is run (|:make|,
 				|:lgetfile|, |:laddfile|, |:helpgrep|,
 				|:lhelpgrep|, |:cexpr|, |:cgetexpr|,
 				|:caddexpr|, |:cbuffer|, |:cgetbuffer|,
-				|:caddbuffer|).
+				|:caddbuffer|, |:ltag|).
 				The pattern is matched against the command
 				being run.  When |:grep| is used but 'grepprg'
 				is set to "internal" it still matches "grep".
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index a4a875635..6c767bb82 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -7875,6 +7875,23 @@ ex_tag_cmd(exarg_T *eap, char_u *name)
 #endif
     }
 
+#ifdef FEAT_QUICKFIX
+    if (cmd == DT_LTAG)
+    {
+	if (apply_autocmds(EVENT_QUICKFIXCMDPRE, (char_u *)"ltag",
+		    curbuf->b_fname == NULL
+			? (char_u *)buf_spname(curbuf)
+			: curbuf->b_fname,
+		    TRUE, curbuf))
+	{
+# ifdef FEAT_EVAL
+	    if (aborting())
+		return;
+# endif
+	}
+    }
+#endif
+
     do_tag(eap->arg, cmd, eap->addr_count > 0 ? (int)eap->line2 : 1,
 							  eap->forceit, TRUE);
 }
diff --git a/src/tag.c b/src/tag.c
index 284f2c1a0..814be1a92 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -747,6 +747,15 @@ do_tag(
 	    set_vim_var_string(VV_SWAPCOMMAND, IObuff, -1);
 #endif
 
+#ifdef FEAT_QUICKFIX
+	    if (type == DT_LTAG)
+		apply_autocmds(EVENT_QUICKFIXCMDPOST, (char_u *)"ltag",
+			curbuf->b_fname == NULL
+			    ? (char_u *)buf_spname(curbuf)
+			    : curbuf->b_fname,
+			TRUE, curbuf);
+#endif
+
 	    /*
 	     * Jump to the desired match.
 	     */
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index e0ab2b3aa..df2d1fb0f 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -2289,6 +2289,20 @@ func Test_Autocmd()
 	      \ 'postmake']
   call assert_equal(l, g:acmds)
 
+  " Test for :ltag
+  let g:acmds = []
+  set tags=Xtags
+  call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//",
+	      \ "one\tXfile1\t/^one/;\"\tf\tfile:\tsignature:(void)"],
+	      \ 'Xtags')
+  call writefile(['empty', 'one()', 'empty'], 'Xfile1')
+  ltag one
+  let l = ['preltag', 'postltag']
+  call assert_equal(l, g:acmds)
+  set tags&
+  call delete('Xtags')
+  call delete('Xfile1')
+
   if has('unix')
     " Run this test only on Unix-like systems. The grepprg may not be set on
     " non-Unix systems.
