diff --git a/src/plugins/fakevim/fakevimactions.cpp b/src/plugins/fakevim/fakevimactions.cpp
index 6024c1e8a2c..96c3b5ab3d9 100644
--- a/src/plugins/fakevim/fakevimactions.cpp
+++ b/src/plugins/fakevim/fakevimactions.cpp
@@ -160,6 +160,12 @@ FakeVimSettings *theFakeVimSettings()
item->setCheckable(true);
instance->insertItem(ConfigAutoIndent, item, QLatin1String("autoindent"), QLatin1String("ai"));
+ item = new SavedAction(instance);
+ item->setDefaultValue(true);
+ item->setSettingsKey(group, QLatin1String("IncSearch"));
+ item->setCheckable(true);
+ instance->insertItem(ConfigIncSearch, item, QLatin1String("incsearch"), QLatin1String("is"));
+
item = new SavedAction(instance);
item->setDefaultValue(QLatin1String("indent,eol,start"));
item->setSettingsKey(group, QLatin1String("Backspace"));
diff --git a/src/plugins/fakevim/fakevimactions.h b/src/plugins/fakevim/fakevimactions.h
index 064cb9f2e5d..45b3f9fb059 100644
--- a/src/plugins/fakevim/fakevimactions.h
+++ b/src/plugins/fakevim/fakevimactions.h
@@ -49,6 +49,7 @@ enum FakeVimSettingsCode
ConfigShiftWidth,
ConfigExpandTab,
ConfigAutoIndent,
+ ConfigIncSearch,
// indent allow backspacing over autoindent
// eol allow backspacing over line breaks (join lines)
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 44a108bda4f..fb3c3b15c49 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -1018,7 +1018,19 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
m_commandHistoryIndex = m_commandHistory.size() - 1;
updateMiniBuffer();
} else if (key == '/' || key == '?') {
- emit q->findRequested(key == '?');
+ if (hasConfig(ConfigIncSearch)) {
+ // re-use the core dialog.
+ emit q->findRequested(key == '?');
+ } else {
+ // FIXME: make core find dialog sufficiently flexible to
+ // produce the "default vi" behaviour too. For now, roll our own.
+ enterExMode(); // to get the cursor disabled
+ m_mode = (key == '/') ? SearchForwardMode : SearchBackwardMode;
+ m_commandBuffer.clear();
+ m_searchHistory.append(QString());
+ m_searchHistoryIndex = m_searchHistory.size() - 1;
+ updateMiniBuffer();
+ }
} else if (key == '`') {
m_subsubmode = BackTickSubSubMode;
} else if (key == '#' || key == '*') {
@@ -1290,11 +1302,17 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
m_tc = EDITOR(cursorForPosition(QPoint(0, EDITOR(height()) / 2)));
handleStartOfLine();
finishMovement();
- } else if (key == 'n') {
- emit q->findNextRequested(false);
+ } else if (key == 'n') { // FIXME: see comment for '/'
+ if (hasConfig(ConfigIncSearch))
+ emit q->findNextRequested(false);
+ else
+ search(lastSearchString(), m_lastSearchForward);
recordJump();
} else if (key == 'N') {
- emit q->findNextRequested(true);
+ if (hasConfig(ConfigIncSearch))
+ emit q->findNextRequested(true);
+ else
+ search(lastSearchString(), !m_lastSearchForward);
recordJump();
} else if (key == 'o' || key == 'O') {
setDotCommand("%1o", count());
diff --git a/src/plugins/fakevim/fakevimoptions.ui b/src/plugins/fakevim/fakevimoptions.ui
index 8909fd08c0c..2f3d6f674a7 100644
--- a/src/plugins/fakevim/fakevimoptions.ui
+++ b/src/plugins/fakevim/fakevimoptions.ui
@@ -6,7 +6,7 @@
0
0
- 358
+ 394
322
@@ -55,45 +55,45 @@
- -
+
-
Shift width:
- -
+
-
- -
+
-
Smart tabulators:
- -
+
-
- -
+
-
Start of line:
- -
+
-
- -
+
-
vim's "tabstop" option
@@ -103,17 +103,17 @@
- -
+
-
- -
+
-
Backspace:
- -
+
-
-
@@ -133,6 +133,20 @@
+ -
+
+
+ Incremental search:
+
+
+
+ -
+
+
+
+
+
+
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index f457c010753..50bdb9dd9d8 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -158,6 +158,8 @@ QWidget *FakeVimOptionPage::createPage(QWidget *parent)
m_group.insert(theFakeVimSetting(ConfigAutoIndent),
m_ui.checkBoxAutoIndent);
+ m_group.insert(theFakeVimSetting(ConfigIncSearch),
+ m_ui.checkBoxIncSearch);
connect(m_ui.pushButtonCopyTextEditorSettings, SIGNAL(clicked()),
this, SLOT(copyTextEditorSettings()));
@@ -179,6 +181,8 @@ void FakeVimOptionPage::copyTextEditorSettings()
m_ui.lineEditShiftWidth->setText(QString::number(ts.m_indentSize));
m_ui.checkBoxSmartTab->setChecked(ts.m_smartBackspace);
m_ui.checkBoxAutoIndent->setChecked(ts.m_autoIndent);
+ // FIXME: Not present in core
+ //m_ui.checkBoxIncSearch->setChecked(ts.m_incSearch);
}
void FakeVimOptionPage::setQtStyle()
@@ -188,6 +192,7 @@ void FakeVimOptionPage::setQtStyle()
m_ui.lineEditShiftWidth->setText("4");
m_ui.checkBoxSmartTab->setChecked(true);
m_ui.checkBoxAutoIndent->setChecked(true);
+ m_ui.checkBoxIncSearch->setChecked(true);
m_ui.lineEditBackspace->setText("indent,eol,start");
}
@@ -198,6 +203,7 @@ void FakeVimOptionPage::setPlainStyle()
m_ui.lineEditShiftWidth->setText("8");
m_ui.checkBoxSmartTab->setChecked(false);
m_ui.checkBoxAutoIndent->setChecked(false);
+ m_ui.checkBoxIncSearch->setChecked(false);
m_ui.lineEditBackspace->setText(QString());
}