diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 4925a692bec3cd92c46437cbcee17c7f97e51bef..8c5e79426dacc66dd823936437339c47b9cc30bf 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -1992,6 +1992,19 @@ void EditorManager::addNativeDirAndOpenWithActions(QMenu *contextMenu, DocumentM
         DocumentManager::populateOpenWithMenu(openWith, entry->fileName());
 }
 
+void EditorManager::setPlaceholderText(const QString &text)
+{
+    if (d->m_placeholderText == text)
+        return;
+    d->m_placeholderText = text;
+    emit m_instance->placeholderTextChanged(d->m_placeholderText);
+}
+
+QString EditorManager::placeholderText()
+{
+    return d->m_placeholderText;
+}
+
 void EditorManager::saveDocument()
 {
     EditorManagerPrivate::saveDocument(currentDocument());
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index 62181052e88d5b0cdd5e99672a998e6e333e726e..f5f8d115475f4bc6e2d12bda74f2d7c5a39754a7 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -173,6 +173,9 @@ public:
                                              IEditor *editor = 0);
     static void addNativeDirAndOpenWithActions(QMenu *contextMenu, DocumentModel::Entry *entry);
 
+    static void setPlaceholderText(const QString &text);
+    static QString placeholderText();
+
 signals:
     void currentEditorChanged(Core::IEditor *editor);
     void currentDocumentStateChanged();
@@ -181,6 +184,7 @@ signals:
     void editorAboutToClose(Core::IEditor *editor);
     void editorsClosed(QList<Core::IEditor *> editors);
     void findOnFileSystemRequest(const QString &path);
+    void placeholderTextChanged(const QString &text);
 
 public slots:
     static void saveDocument();
diff --git a/src/plugins/coreplugin/editormanager/editormanager_p.h b/src/plugins/coreplugin/editormanager/editormanager_p.h
index 2d0da3e6cf2a8f500b495b0518b28d0ea35b7463..7af674c1d082f388bfe93efd2cd0c356b9e417bc 100644
--- a/src/plugins/coreplugin/editormanager/editormanager_p.h
+++ b/src/plugins/coreplugin/editormanager/editormanager_p.h
@@ -242,6 +242,8 @@ private:
 
     bool m_autoSaveEnabled;
     int m_autoSaveInterval;
+
+    QString m_placeholderText;
 };
 
 } // Internal
diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index fc0a312460a1544538dfe384bd9eca3ebaa2776f..e7f59ecbae6a90364a1fef278367e6f4d96ef351 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -34,10 +34,12 @@
 #include "editormanager_p.h"
 #include "documentmodel.h"
 
+#include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/editortoolbar.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/infobar.h>
+#include <coreplugin/locator/locatorconstants.h>
 #include <coreplugin/minisplitter.h>
 #include <coreplugin/editormanager/ieditor.h>
 #include <coreplugin/findplaceholder.h>
@@ -119,7 +121,15 @@ EditorView::EditorView(SplitterOrView *parentSplitterOrView, QWidget *parent) :
     }
 
     // for the case of no document selected
-    QWidget *empty = new QWidget;
+    auto empty = new QWidget;
+    empty->hide();
+    auto emptyLayout = new QGridLayout(empty);
+    empty->setLayout(emptyLayout);
+    m_emptyViewLabel = new QLabel;
+    connect(EditorManager::instance(), &EditorManager::placeholderTextChanged,
+            m_emptyViewLabel, &QLabel::setText);
+    m_emptyViewLabel->setText(EditorManager::placeholderText());
+    emptyLayout->addWidget(m_emptyViewLabel);
     m_container->addWidget(empty);
     m_widgetEditorMap.insert(empty, 0);
 
diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h
index 541ceff9557ff6592af3d7b712a62ddf4b4729bb..e90bbb04615554c60f31d51e7cdfbe0ef6390f95 100644
--- a/src/plugins/coreplugin/editormanager/editorview.h
+++ b/src/plugins/coreplugin/editormanager/editorview.h
@@ -145,6 +145,7 @@ private:
     QToolButton *m_statusWidgetButton;
     QList<IEditor *> m_editors;
     QMap<QWidget *, IEditor *> m_widgetEditorMap;
+    QLabel *m_emptyViewLabel;
 
     QList<EditLocation> m_navigationHistory;
     QList<EditLocation> m_editorHistory;
diff --git a/src/plugins/coreplugin/locator/locator.cpp b/src/plugins/coreplugin/locator/locator.cpp
index 54e75abca7218ce9f4e317d41385c5dbf4073487..3baa60b7c93fef81e9f50dde0744a84920012a6e 100644
--- a/src/plugins/coreplugin/locator/locator.cpp
+++ b/src/plugins/coreplugin/locator/locator.cpp
@@ -44,6 +44,7 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/progressmanager/progressmanager.h>
 #include <coreplugin/progressmanager/futureprogress.h>
 #include <extensionsystem/pluginmanager.h>
@@ -96,7 +97,7 @@ void Locator::initialize(CorePlugin *corePlugin, const QStringList &, QString *)
     m_corePlugin->addAutoReleasedObject(view);
 
     QAction *action = new QAction(m_locatorWidget->windowIcon(), m_locatorWidget->windowTitle(), this);
-    Command *cmd = ActionManager::registerAction(action, "QtCreator.Locate",
+    Command *cmd = ActionManager::registerAction(action, Constants::LOCATE,
                                                              Context(Constants::C_GLOBAL));
     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+K")));
     connect(action, SIGNAL(triggered()), this, SLOT(openLocator()));
@@ -148,6 +149,14 @@ void Locator::extensionsInitialized()
         return first->id().alphabeticallyBefore(second->id());
     });
     setFilters(m_filters);
+
+    Command *openCommand = ActionManager::command(Constants::OPEN);
+    Command *locateCommand = ActionManager::command(Constants::LOCATE);
+    connect(openCommand, &Command::keySequenceChanged,
+            this, &Locator::updateEditorManagerPlaceholderText);
+    connect(locateCommand, &Command::keySequenceChanged,
+            this, &Locator::updateEditorManagerPlaceholderText);
+    updateEditorManagerPlaceholderText();
 }
 
 bool Locator::delayedInitialize()
@@ -177,6 +186,50 @@ void Locator::loadSettings()
     m_settingsInitialized = true;
 }
 
+void Locator::updateEditorManagerPlaceholderText()
+{
+    Command *openCommand = ActionManager::command(Constants::OPEN);
+    Command *locateCommand = ActionManager::command(Constants::LOCATE);
+    const QString placeholderText = tr("<html><body style=\"color:#909090; font-size:14pt\">"
+          "<div align='center'>"
+          "<div style=\"font-size:20pt\">Open a document</div>"
+          "<table><tr><td>"
+          "<hr/>"
+          "<div style=\"margin-top: 5px\">&bull; File > Open File or Project (%1)</div>"
+          "<div style=\"margin-top: 5px\">&bull; File > Recent Files</div>"
+          "<div style=\"margin-top: 5px\">&bull; Tools > Locator (%2) and</div>"
+          "<div style=\"margin-left: 1em\">- type to open file from any open project</div>"
+          "%4"
+          "%5"
+          "<div style=\"margin-left: 1em\">- type <code>%3&lt;space&gt;&lt;filename&gt;</code> to open file from file system</div>"
+          "<div style=\"margin-left: 1em\">- select one of the other filters for jumping to a location</div>"
+          "<div style=\"margin-top: 5px\">&bull; Drag and drop files here</div>"
+          "</td></tr></table>"
+          "</div>"
+          "</body></html>")
+         .arg(openCommand->keySequence().toString(QKeySequence::NativeText))
+         .arg(locateCommand->keySequence().toString(QKeySequence::NativeText))
+         .arg(m_fileSystemFilter->shortcutString());
+
+    QString classes;
+    ILocatorFilter *classesFilter = Utils::findOrDefault(m_filters, [](const ILocatorFilter *filter) {
+        return filter->id() == Id("Classes"); // not nice, but anyhow
+    });
+    if (classesFilter)
+        classes = tr("<div style=\"margin-left: 1em\">- type <code>%1&lt;space&gt;&lt;pattern&gt;</code>"
+                     " to jump to a class definition</div>").arg(classesFilter->shortcutString());
+
+    QString methods;
+    ILocatorFilter *methodsFilter = Utils::findOrDefault(m_filters, [](const ILocatorFilter *filter) {
+        return filter->id() == Id("Methods"); // not nice, but anyhow
+    });
+    if (methodsFilter)
+        methods = tr("<div style=\"margin-left: 1em\">- type <code>%1&lt;space&gt;&lt;pattern&gt;</code>"
+                     " to jump to a function definition</div>").arg(methodsFilter->shortcutString());
+
+    EditorManager::setPlaceholderText(placeholderText.arg(classes, methods));
+}
+
 void Locator::saveSettings()
 {
     if (m_settingsInitialized) {
@@ -222,6 +275,7 @@ QList<ILocatorFilter *> Locator::customFilters()
 void Locator::setFilters(QList<ILocatorFilter *> f)
 {
     m_filters = f;
+    updateEditorManagerPlaceholderText(); // possibly some shortcut changed
     m_locatorWidget->updateFilterList();
 }
 
diff --git a/src/plugins/coreplugin/locator/locator.h b/src/plugins/coreplugin/locator/locator.h
index a720316a89e0a3dcabc2bc711c54b521221247f7..901d72e9b7c600ebcb30e3de37ef327d0e4122f4 100644
--- a/src/plugins/coreplugin/locator/locator.h
+++ b/src/plugins/coreplugin/locator/locator.h
@@ -80,6 +80,7 @@ private slots:
 
 private:
     void loadSettings();
+    void updateEditorManagerPlaceholderText();
 
     template <typename S>
     void loadSettingsHelper(S *settings);
diff --git a/src/plugins/coreplugin/locator/locatorconstants.h b/src/plugins/coreplugin/locator/locatorconstants.h
index aeb9e1379ff77554738b13bcd6617f42a1dbfa59..66f2f87fd364ad1277e2231f76a59948659437f8 100644
--- a/src/plugins/coreplugin/locator/locatorconstants.h
+++ b/src/plugins/coreplugin/locator/locatorconstants.h
@@ -36,6 +36,7 @@
 namespace Core {
 namespace Constants {
 
+const char LOCATE[] = "QtCreator.Locate";
 const char FILTER_OPTIONS_PAGE[] = QT_TRANSLATE_NOOP("Locator", "Locator");
 const char CUSTOM_FILTER_BASEID[] = "Locator.CustomFilter";
 const char TASK_INDEX[] = "Locator.Task.Index";