diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 178440b1363020a093060366d39ccbe7d6c98cae..1eafa0fa6f225babbe43afff90f855ac356cb89c 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -37,6 +37,7 @@
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/editormanager/openeditorsmodel.h>
 #include <coreplugin/filemanager.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/ifile.h>
@@ -97,6 +98,8 @@ const char * const INSTALL_KEY            = "Alt+V,Alt+V";
 const char * const SETTINGS_CATEGORY      = "D.FakeVim";
 const char * const SETTINGS_ID            = "General";
 const char * const SETTINGS_EX_CMDS_ID    = "ExCommands";
+const char * const CMD_FILE_NEXT          = "FakeVim.SwitchFileNext";
+const char * const CMD_FILE_PREV          = "FakeVim.SwitchFilePrev";
 
 } // namespace Constants
 } // namespace FakeVim
@@ -526,6 +529,10 @@ private slots:
     void handleDelayedQuitAll(bool forced);
     void handleDelayedQuit(bool forced, Core::IEditor *editor);
 
+    void switchFile(bool previous);
+    void switchFileNext();
+    void switchFilePrev();
+
 signals:
     void delayedQuitRequested(bool forced, Core::IEditor *editor);
     void delayedQuitAllRequested(bool forced);
@@ -552,6 +559,8 @@ FakeVimPluginPrivate::FakeVimPluginPrivate(FakeVimPlugin *plugin)
     m_fakeVimOptionsPage = 0;
     m_fakeVimExCommandsPage = 0;
 
+    s_defaultExCommandMap[Constants::CMD_FILE_NEXT] = QRegExp("^n(ext)?!?( (.*))?$");
+    s_defaultExCommandMap[Constants::CMD_FILE_PREV] = QRegExp("^(N(ext)?|prev(ious)?)!?( (.*))?$");
     s_defaultExCommandMap[CppTools::Constants::SWITCH_HEADER_SOURCE] = QRegExp("^A$");
     s_defaultExCommandMap[ProjectExplorer::Constants::BUILD] = QRegExp("^make$");
     s_defaultExCommandMap["Coreplugin.OutputPane.previtem"] = QRegExp("^(cN(ext)?|cp(revious)?)!?( (.*))?$");
@@ -613,6 +622,16 @@ bool FakeVimPluginPrivate::initialize()
     connect(theFakeVimSetting(ConfigUseFakeVim), SIGNAL(valueChanged(QVariant)),
         this, SLOT(setUseFakeVim(QVariant)));
 
+    QAction *switchFileNextAction = new QAction(tr("Switch to next file"), this);
+    cmd = actionManager->registerAction(switchFileNextAction, Constants::CMD_FILE_NEXT, globalcontext);
+    cmd->setAttribute(Command::CA_Hide);
+    connect(switchFileNextAction, SIGNAL(triggered()), this, SLOT(switchFileNext()));
+
+    QAction *switchFilePrevAction = new QAction(tr("Switch to previous file"), this);
+    cmd = actionManager->registerAction(switchFilePrevAction, Constants::CMD_FILE_PREV, globalcontext);
+    cmd->setAttribute(Command::CA_Hide);
+    connect(switchFilePrevAction, SIGNAL(triggered()), this, SLOT(switchFilePrev()));
+
     // Delayed operatiosn
     connect(this, SIGNAL(delayedQuitRequested(bool,Core::IEditor*)),
         this, SLOT(handleDelayedQuit(bool,Core::IEditor*)), Qt::QueuedConnection);
@@ -895,8 +914,6 @@ void FakeVimPluginPrivate::writeFile(bool *handled,
 
 void FakeVimPluginPrivate::handleExCommand(const QString &cmd)
 {
-    static QRegExp reNextFile("^n(ext)?!?( (.*))?$");
-    static QRegExp rePreviousFile("^(N(ext)?|prev(ious)?)!?( (.*))?$");
     static QRegExp reWriteAll("^wa(ll)?!?$");
     static QRegExp reQuit("^q!?$");
     static QRegExp reQuitAll("^qa!?$");
@@ -910,13 +927,7 @@ void FakeVimPluginPrivate::handleExCommand(const QString &cmd)
     EditorManager *editorManager = EditorManager::instance();
     QTC_ASSERT(editorManager, return);
 
-    if (reNextFile.indexIn(cmd) != -1) {
-        // :n
-        editorManager->goForwardInNavigationHistory();
-    } else if (rePreviousFile.indexIn(cmd) != -1) {
-        // :N, :prev
-        editorManager->goBackInNavigationHistory();
-    } else if (reWriteAll.indexIn(cmd) != -1) {
+    if (reWriteAll.indexIn(cmd) != -1) {
         // :wa
         FileManager *fm = ICore::instance()->fileManager();
         QList<IFile *> toSave = fm->modifiedFiles();
@@ -1081,6 +1092,25 @@ void FakeVimPluginPrivate::changeSelection
             bt->setExtraSelections(BaseTextEditor::FakeVimSelection, selection);
 }
 
+void FakeVimPluginPrivate::switchFile(bool previous)
+{
+    Core::EditorManager *em = Core::EditorManager::instance();
+    Core::OpenEditorsModel *model = em->openedEditorsModel();
+    IEditor *cur = Core::EditorManager::instance()->currentEditor();
+    int curIdx = model->indexOf(cur).row();
+    int nIdx = (curIdx + model->rowCount() + (previous ? -1 : 1)) % model->rowCount();
+    em->activateEditor(model->index(nIdx, 0), 0);
+}
+
+void FakeVimPluginPrivate::switchFileNext()
+{
+    switchFile(false);
+}
+
+void FakeVimPluginPrivate::switchFilePrev()
+{
+    switchFile(true);
+}
 
 ///////////////////////////////////////////////////////////////////////
 //