diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index d65ca876f4c12e287709bb34230b103a519ed63d..c739aa9ca415c99bfb76aa71848499cada912d48 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -2669,19 +2669,17 @@ void FakeVimHandler::Private::shiftRegionLeft(int repeat) int endLine = lineForPosition(position()); if (beginLine > endLine) qSwap(beginLine, endLine); - int shift = config(ConfigShiftWidth).toInt() * repeat; - int tab = config(ConfigTabStop).toInt(); - int firstPos = firstPositionInLine(beginLine); + const int shift = config(ConfigShiftWidth).toInt() * repeat; + const int tab = config(ConfigTabStop).toInt(); + const int firstPos = firstPositionInLine(beginLine); beginEditBlock(firstPos); - for (int line = beginLine; line <= endLine; ++line) { + for (int line = endLine; line >= beginLine; --line) { int pos = firstPositionInLine(line); - setPosition(pos); - setAnchor(pos); - QString text = m_tc.block().text(); + const QString text = lineContents(line); int amount = 0; int i = 0; - for (; i < text.size() && amount <= shift; ++i) { + for (; i < text.size() && amount < shift; ++i) { if (text.at(i) == ' ') amount++; else if (text.at(i) == '\t') @@ -2689,9 +2687,7 @@ void FakeVimHandler::Private::shiftRegionLeft(int repeat) else break; } - setPosition(pos + i); - text = selectedText(); - removeSelectedText(); + removeText(Range(pos, pos + i)); setPosition(pos); } endEditBlock();