diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js
index 5f87a05067bf11756addd428aba2040cff5cd227..e4901f856476f724dceb9b0860350ffe6d036fa8 100644
--- a/app/assets/javascripts/dispatcher.js
+++ b/app/assets/javascripts/dispatcher.js
@@ -79,7 +79,18 @@ import initSettingsPanels from './settings_panels';
       path = page.split(':');
       shortcut_handler = null;
 
-      new GfmAutoComplete(gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources).setup();
+      $('.js-gfm-input').each((i, el) => {
+        const gfm = new GfmAutoComplete(gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources);
+        const enableGFM = gl.utils.convertPermissionToBoolean(el.dataset.supportsAutocomplete);
+        gfm.setup($(el), {
+          emojis: true,
+          members: enableGFM,
+          issues: enableGFM,
+          milestones: enableGFM,
+          mergeRequests: enableGFM,
+          labels: enableGFM,
+        });
+      });
 
       function initBlob() {
         new LineHighlighter();
diff --git a/app/views/projects/_zen.html.haml b/app/views/projects/_zen.html.haml
index bff11d888a76304808f539f40c0405a3f4cc1da8..afc40ca4eabd06699f0ead75fd2ce52217e9013e 100644
--- a/app/views/projects/_zen.html.haml
+++ b/app/views/projects/_zen.html.haml
@@ -1,10 +1,15 @@
 - @gfm_form = true
 - current_text ||= nil
+- supports_autocomplete = local_assigns.fetch(:supports_autocomplete, true)
 - supports_quick_actions = local_assigns.fetch(:supports_quick_actions, false)
 .zen-backdrop
   - classes << ' js-gfm-input js-autosize markdown-area'
   - if defined?(f) && f
-    = f.text_area attr, class: classes, placeholder: placeholder, data: { supports_quick_actions: supports_quick_actions }
+    = f.text_area attr,
+      class: classes,
+      placeholder: placeholder,
+      data: { supports_quick_actions: supports_quick_actions,
+        supports_autocomplete: supports_autocomplete }
   - else
     = text_area_tag attr, current_text, class: classes, placeholder: placeholder
   %a.zen-control.zen-control-leave.js-zen-leave{ href: "#" }
diff --git a/app/views/projects/snippets/show.html.haml b/app/views/projects/snippets/show.html.haml
index 847f3c2f348385d929b4d08af05ff765694d54b7..37b114e7a3a85ff659c8c84530968d0588620881 100644
--- a/app/views/projects/snippets/show.html.haml
+++ b/app/views/projects/snippets/show.html.haml
@@ -9,4 +9,4 @@
   .row-content-block.top-block.content-component-block
     = render 'award_emoji/awards_block', awardable: @snippet, inline: true
 
-  #notes= render "shared/notes/notes_with_form", :autocomplete => true
+  #notes= render "shared/notes/notes_with_form", :autocomplete => false
diff --git a/app/views/shared/notes/_form.html.haml b/app/views/shared/notes/_form.html.haml
index 32ff505cbdaa2b3a9b4e9c85106d5a78215c093e..c6b5dcc3647d37996840ee331087506cdf439052 100644
--- a/app/views/shared/notes/_form.html.haml
+++ b/app/views/shared/notes/_form.html.haml
@@ -1,3 +1,4 @@
+- supports_autocomplete = local_assigns.fetch(:supports_autocomplete, true)
 - supports_quick_actions = note_supports_quick_actions?(@note)
 - if supports_quick_actions
   - preview_url = preview_markdown_path(@project, quick_actions_target_type: @note.noteable_type, quick_actions_target_id: @note.noteable_id)
@@ -27,7 +28,8 @@
       attr: :note,
       classes: 'note-textarea js-note-text',
       placeholder: "Write a comment or drag your files here...",
-      supports_quick_actions: supports_quick_actions
+      supports_quick_actions: supports_quick_actions,
+      supports_autocomplete: supports_autocomplete
     = render 'shared/notes/hints', supports_quick_actions: supports_quick_actions
     .error-alert
 
diff --git a/app/views/shared/notes/_notes_with_form.html.haml b/app/views/shared/notes/_notes_with_form.html.haml
index 5902798dfd06119d5957412a7866969cda71e707..0cca8d875d2dd73ce02bed165f4b716624baaf7a 100644
--- a/app/views/shared/notes/_notes_with_form.html.haml
+++ b/app/views/shared/notes/_notes_with_form.html.haml
@@ -12,7 +12,7 @@
         %a.author_link{ href: user_path(current_user) }
           = image_tag avatar_icon(current_user), alt: current_user.to_reference, class: 'avatar s40'
       .timeline-content.timeline-content-form
-        = render "shared/notes/form", view: diff_view
+        = render "shared/notes/form", view: diff_view, supports_autocomplete: autocomplete
 - elsif !current_user
   .disabled-comment.text-center.prepend-top-default
     Please
diff --git a/spec/features/projects/snippets_spec.rb b/spec/features/projects/snippets_spec.rb
index 18689c17fe93c7238bc3653e6e28aabdd6797835..da46b950440c75583cac8c76fa35bd73c76dd2ed 100644
--- a/spec/features/projects/snippets_spec.rb
+++ b/spec/features/projects/snippets_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe 'Project snippets', feature: true do
+describe 'Project snippets', :js, feature: true do
   context 'when the project has snippets' do
     let(:project) { create(:empty_project, :public) }
     let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) }
@@ -26,5 +26,28 @@ describe 'Project snippets', feature: true do
         expect(page).to have_content(snippets[1].title)
       end
     end
+
+    context 'when submitting a note' do
+      before do
+        login_as :admin
+        visit namespace_project_snippet_path(project.namespace, project, snippets[0])
+      end
+
+      it 'should not have autocomplete' do
+        wait_for_requests
+        request_count_before = page.driver.network_traffic.count
+
+        find('#note_note').native.send_keys('')
+        fill_in 'note[note]', with: '@'
+
+        wait_for_requests
+        request_count_after = page.driver.network_traffic.count
+
+        # This selector probably won't be in place even if autocomplete was enabled
+        # but we want to make sure
+        expect(page).not_to have_selector('.atwho-view')
+        expect(request_count_before).to eq(request_count_after)
+      end
+    end
   end
 end
diff --git a/spec/features/snippets/notes_on_personal_snippets_spec.rb b/spec/features/snippets/notes_on_personal_snippets_spec.rb
index 44b0c89fac720f52cf71dfddeeb38ee38a452f92..04b596d29a1486d90bee9582d2e290f7f61e6fed 100644
--- a/spec/features/snippets/notes_on_personal_snippets_spec.rb
+++ b/spec/features/snippets/notes_on_personal_snippets_spec.rb
@@ -70,6 +70,22 @@ describe 'Comments on personal snippets', :js, feature: true do
 
       expect(find('div#notes')).to have_content('This is awesome!')
     end
+
+    it 'should not have autocomplete' do
+      wait_for_requests
+      request_count_before = page.driver.network_traffic.count
+
+      find('#note_note').native.send_keys('')
+      fill_in 'note[note]', with: '@'
+
+      wait_for_requests
+      request_count_after = page.driver.network_traffic.count
+
+      # This selector probably won't be in place even if autocomplete was enabled
+      # but we want to make sure
+      expect(page).not_to have_selector('.atwho-view')
+      expect(request_count_before).to eq(request_count_after)
+    end
   end
 
   context 'when editing a note' do