From 615826323a5aaf36fa02b7d6738ac5cbf67cb592 Mon Sep 17 00:00:00 2001 From: gydeng Date: Sun, 23 Feb 2020 10:27:59 +0800 Subject: [PATCH] support vim e command in vmdtab and vvim (#1218) --- src/utils/vvim.cpp | 26 ++++++++++++++++++++++++++ src/vmdtab.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/utils/vvim.cpp b/src/utils/vvim.cpp index b76dea9ba7..0911519455 100644 --- a/src/utils/vvim.cpp +++ b/src/utils/vvim.cpp @@ -8,13 +8,18 @@ #include #include #include +#include #include "vconfigmanager.h" #include "veditor.h" #include "utils/veditutils.h" #include "vconstants.h" #include "vmdeditor.h" +#include "vmainwindow.h" +#include "vdirectory.h" +#include "vdirectorytree.h" extern VConfigManager *g_config; +extern VMainWindow *g_mainWin; const QChar VVim::c_unnamedRegister = QChar('"'); const QChar VVim::c_blackHoleRegister = QChar('_'); @@ -5953,6 +5958,27 @@ bool VVim::executeCommand(const QString &p_cmd) } else if (p_cmd == "nohlsearch" || p_cmd == "noh") { // :nohlsearch, clear highlight search. clearSearchHighlight(); + } else if (p_cmd.size() > 3 && p_cmd.left(2) == "e ") { + // :e , open a note in edit mode. + auto filePath = p_cmd.mid(2).trimmed(); + + if(filePath.left(2) == "~/") { + filePath.remove(0, 1).insert(0, QDir::homePath()); + } else if(filePath.left(2) == "./" || filePath[0] != '/') { + VDirectory *dir = g_mainWin->getDirectoryTree()->currentDirectory(); + if(filePath.left(2) == "./") { + filePath.remove(0, 1); + } else { + filePath.insert(0, '/'); + } + filePath.insert(0, dir->fetchPath()); + } + + if(g_mainWin->openFiles(QStringList(filePath), false, OpenFileMode::Edit).size()) { + msg = tr("Open %1 in edit mode.").arg(filePath); + } else { + msg = tr("Unable to open %1").arg(filePath); + } } else { validCommand = false; } diff --git a/src/vmdtab.cpp b/src/vmdtab.cpp index 8b9ebfe2f4..c0892cc39d 100644 --- a/src/vmdtab.cpp +++ b/src/vmdtab.cpp @@ -24,6 +24,8 @@ #include "vsnippetlist.h" #include "vlivepreviewhelper.h" #include "vmathjaxinplacepreviewhelper.h" +#include "vdirectory.h" +#include "vdirectorytree.h" extern VMainWindow *g_mainWin; @@ -1457,6 +1459,30 @@ bool VMdTab::executeVimCommandInWebView(const QString &p_cmd) } else if (p_cmd == "nohlsearch" || p_cmd == "noh") { // :nohlsearch, clear highlight search. m_webViewer->findText(""); + } else if (p_cmd == "e") { + // :e, enter edit mode. + showFileEditMode(); + } else if (p_cmd.size() > 2 && p_cmd.left(2) == "e ") { + // :e , open a note in edit mode. + auto filePath = p_cmd.mid(2).trimmed(); + + if(filePath.left(2) == "~/") { + filePath.remove(0, 1).insert(0, QDir::homePath()); + } else if(filePath.left(2) == "./" || filePath[0] != '/') { + VDirectory *dir = g_mainWin->getDirectoryTree()->currentDirectory(); + if(filePath.left(2) == "./") { + filePath.remove(0, 1); + } else { + filePath.insert(0, '/'); + } + filePath.insert(0, dir->fetchPath()); + } + + if(g_mainWin->openFiles(QStringList(filePath), false, OpenFileMode::Edit).size()) { + msg = tr("Open %1 in edit mode.").arg(filePath); + } else { + msg = tr("Unable to open %1").arg(filePath); + } } else { validCommand = false; }