forked from qt-creator/qt-creator
FakeVim: Indent block correctly
In situation:
void f() {
// Cursor is HERE.
}
the code after ">i{" command is indented as (with shiftwidth=4):
void f() {
// Cursor is HERE.
}
Change-Id: I48283c91c32fc407bbdb24349f2491461e401ee9
Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
@@ -1829,6 +1829,59 @@ void FakeVimPlugin::test_vim_indent()
|
|||||||
data.setText("abc");
|
data.setText("abc");
|
||||||
KEYS(">>", "\t\t abc");
|
KEYS(">>", "\t\t abc");
|
||||||
INTEGRITY(false);
|
INTEGRITY(false);
|
||||||
|
|
||||||
|
// indent inner block
|
||||||
|
data.doCommand("set expandtab");
|
||||||
|
data.doCommand("set shiftwidth=2");
|
||||||
|
data.setText("int main()" N
|
||||||
|
"{" N
|
||||||
|
"int i = 0;" N
|
||||||
|
X "return i;" N
|
||||||
|
"}" N
|
||||||
|
"");
|
||||||
|
KEYS(">i{",
|
||||||
|
"int main()" N
|
||||||
|
"{" N
|
||||||
|
" " X "int i = 0;" N
|
||||||
|
" return i;" N
|
||||||
|
"}" N
|
||||||
|
"");
|
||||||
|
KEYS(">i}",
|
||||||
|
"int main()" N
|
||||||
|
"{" N
|
||||||
|
" " X "int i = 0;" N
|
||||||
|
" return i;" N
|
||||||
|
"}" N
|
||||||
|
"");
|
||||||
|
KEYS("<i}",
|
||||||
|
"int main()" N
|
||||||
|
"{" N
|
||||||
|
" " X "int i = 0;" N
|
||||||
|
" return i;" N
|
||||||
|
"}" N
|
||||||
|
"");
|
||||||
|
|
||||||
|
data.doCommand("set expandtab");
|
||||||
|
data.doCommand("set shiftwidth=2");
|
||||||
|
data.setText("int main() {" N
|
||||||
|
"return i;" N
|
||||||
|
X "}" N
|
||||||
|
"");
|
||||||
|
KEYS("l>i{",
|
||||||
|
"int main() {" N
|
||||||
|
" " X "return i;" N
|
||||||
|
"}" N
|
||||||
|
"");
|
||||||
|
KEYS("l>i}",
|
||||||
|
"int main() {" N
|
||||||
|
" " X "return i;" N
|
||||||
|
"}" N
|
||||||
|
"");
|
||||||
|
KEYS("l<i}",
|
||||||
|
"int main() {" N
|
||||||
|
" " X "return i;" N
|
||||||
|
"}" N
|
||||||
|
"");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FakeVimPlugin::test_vim_marks()
|
void FakeVimPlugin::test_vim_marks()
|
||||||
|
|||||||
@@ -3377,12 +3377,17 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommandMovement)
|
|||||||
|| g.submode == YankSubMode
|
|| g.submode == YankSubMode
|
||||||
|| g.submode == InvertCaseSubMode
|
|| g.submode == InvertCaseSubMode
|
||||||
|| g.submode == DownCaseSubMode
|
|| g.submode == DownCaseSubMode
|
||||||
|| g.submode == UpCaseSubMode) {
|
|| g.submode == UpCaseSubMode
|
||||||
|
|| g.submode == IndentSubMode
|
||||||
|
|| g.submode == ShiftLeftSubMode
|
||||||
|
|| g.submode == ShiftRightSubMode)
|
||||||
|
{
|
||||||
fixSelection();
|
fixSelection();
|
||||||
|
|
||||||
if (g.submode != InvertCaseSubMode
|
if (g.submode == ChangeSubMode
|
||||||
&& g.submode != DownCaseSubMode
|
|| g.submode == DeleteSubMode
|
||||||
&& g.submode != UpCaseSubMode) {
|
|| g.submode == YankSubMode)
|
||||||
|
{
|
||||||
yankText(currentRange(), m_register);
|
yankText(currentRange(), m_register);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8133,16 +8138,26 @@ bool FakeVimHandler::Private::selectBlockTextObject(bool inner,
|
|||||||
if (p2 == -1)
|
if (p2 == -1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (inner)
|
g.movetype = MoveExclusive;
|
||||||
|
|
||||||
|
if (inner) {
|
||||||
p1 += sleft.size();
|
p1 += sleft.size();
|
||||||
else
|
bool moveStart = characterAt(p1) == ParagraphSeparator;
|
||||||
|
bool moveEnd = isFirstNonBlankOnLine(p2);
|
||||||
|
if (moveStart)
|
||||||
|
++p1;
|
||||||
|
if (moveEnd)
|
||||||
|
p2 = blockAt(p2).position() - 1;
|
||||||
|
if (moveStart && moveEnd)
|
||||||
|
g.movetype = MoveLineWise;
|
||||||
|
} else {
|
||||||
p2 -= sright.size() - 2;
|
p2 -= sright.size() - 2;
|
||||||
|
}
|
||||||
|
|
||||||
if (isVisualMode())
|
if (isVisualMode())
|
||||||
--p2;
|
--p2;
|
||||||
|
|
||||||
setAnchorAndPosition(p1, p2);
|
setAnchorAndPosition(p1, p2);
|
||||||
g.movetype = MoveExclusive;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user