diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/fakevim/fakevim_test.cpp | 11 | ||||
-rw-r--r-- | src/plugins/fakevim/fakevimactions.cpp | 1 | ||||
-rw-r--r-- | src/plugins/fakevim/fakevimactions.h | 1 | ||||
-rw-r--r-- | src/plugins/fakevim/fakevimhandler.cpp | 19 |
4 files changed, 32 insertions, 0 deletions
diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp index b5fd9c4169..14f8d7dd31 100644 --- a/src/plugins/fakevim/fakevim_test.cpp +++ b/src/plugins/fakevim/fakevim_test.cpp @@ -4071,6 +4071,17 @@ void FakeVimPlugin::test_vim_command_J() KEYS("3J", lmid(0, 5) + " " + lmid(5, 1) + " " + lmid(6, 1).mid(4) + "| " + lmid(7)); KEYS("uu", lmid(0, 4) + "\nint |main(int argc, char *argv[])\n" + lmid(5)); COMMAND("redo", lmid(0, 4) + "\nint |main(int argc, char *argv[]) " + lmid(5)); + + // Joining comments + data.doCommand("set formatoptions=f"); + data.setText("// abc" N "// def"); + KEYS("J", "// abc def"); + + data.setText("/*" N X "* abc" N "* def" N "*/"); + KEYS("J", "/*" N "* abc def" N "*/"); + + data.setText("# abc" N "# def"); + KEYS("J", "# abc def"); } void FakeVimPlugin::test_vim_command_put_at_eol() diff --git a/src/plugins/fakevim/fakevimactions.cpp b/src/plugins/fakevim/fakevimactions.cpp index edd40a7bea..c32ca25a57 100644 --- a/src/plugins/fakevim/fakevimactions.cpp +++ b/src/plugins/fakevim/fakevimactions.cpp @@ -113,6 +113,7 @@ FakeVimSettings::FakeVimSettings() createAction(ConfigBackspace, QString("indent,eol,start"), "ConfigBackspace", "bs"); createAction(ConfigIsKeyword, QString("@,48-57,_,192-255,a-z,A-Z"), "IsKeyword", "isk"); createAction(ConfigClipboard, QString(), "Clipboard", "cb"); + createAction(ConfigFormatOptions, QString(), "formatoptions", "fo"); // Emulated plugins createAction(ConfigEmulateVimCommentary, false, "commentary"); diff --git a/src/plugins/fakevim/fakevimactions.h b/src/plugins/fakevim/fakevimactions.h index 95f1ff4dd2..828ad5204d 100644 --- a/src/plugins/fakevim/fakevimactions.h +++ b/src/plugins/fakevim/fakevimactions.h @@ -107,6 +107,7 @@ enum FakeVimSettingsCode ConfigShowCmd, ConfigScrollOff, ConfigRelativeNumber, + ConfigFormatOptions, // Plugin emulation ConfigEmulateVimCommentary, diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index a442b1b938..fe3f2262e5 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -7615,6 +7615,13 @@ void FakeVimHandler::Private::joinLines(int count, bool preserveSpace) { int pos = position(); const int blockNumber = m_cursor.blockNumber(); + + const QString currentLine = lineContents(blockNumber + 1); + const bool startingLineIsComment + = currentLine.contains(QRegularExpression("^\\s*\\/\\/")) // Cpp-style + || currentLine.contains(QRegularExpression("^\\s*\\/?\\*")) // C-style + || currentLine.contains(QRegularExpression("^\\s*#")); // Python/Shell-style + for (int i = qMax(count - 2, 0); i >= 0 && blockNumber < document()->blockCount(); --i) { moveBehindEndOfLine(); pos = position(); @@ -7625,6 +7632,18 @@ void FakeVimHandler::Private::joinLines(int count, bool preserveSpace) } else { while (characterAtCursor() == ' ' || characterAtCursor() == '\t') moveRight(); + + // If the line we started from is a comment, remove the comment string from the next line + if (startingLineIsComment && config(ConfigFormatOptions).toString().contains('f')) { + if (characterAtCursor() == '/' && characterAt(position() + 1) == '/') + moveRight(2); + else if (characterAtCursor() == '*' || characterAtCursor() == '#') + moveRight(1); + + if (characterAtCursor() == ' ') + moveRight(); + } + m_cursor.insertText(QString(' ')); } } |