mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 22:09:52 +08:00
vim-mode: fix Y and D action in Visual mode
This commit is contained in:
parent
26d14f81d5
commit
eb24360aa9
@ -1317,11 +1317,19 @@ bool VVim::handleKeyPressEvent(int key, int modifiers, int *p_autoIndentPos)
|
|||||||
}
|
}
|
||||||
} else if (modifiers == Qt::ShiftModifier) {
|
} else if (modifiers == Qt::ShiftModifier) {
|
||||||
tryGetRepeatToken(m_keys, m_tokens);
|
tryGetRepeatToken(m_keys, m_tokens);
|
||||||
if (!hasActionToken() && m_mode == VimMode::Normal) {
|
if (!hasActionToken()) {
|
||||||
|
if (checkMode(VimMode::Normal)) {
|
||||||
// D, same as d$.
|
// D, same as d$.
|
||||||
addActionToken(Action::Delete);
|
addActionToken(Action::Delete);
|
||||||
addMovementToken(Movement::EndOfLine);
|
addMovementToken(Movement::EndOfLine);
|
||||||
processCommand(m_tokens);
|
processCommand(m_tokens);
|
||||||
|
} else if (checkMode(VimMode::Visual) || checkMode(VimMode::VisualLine)) {
|
||||||
|
// D, same as dd.
|
||||||
|
addActionToken(Action::Delete);
|
||||||
|
addRangeToken(Range::Line);
|
||||||
|
processCommand(m_tokens);
|
||||||
|
setMode(VimMode::Normal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -1617,7 +1625,7 @@ bool VVim::handleKeyPressEvent(int key, int modifiers, int *p_autoIndentPos)
|
|||||||
tryGetRepeatToken(m_keys, m_tokens);
|
tryGetRepeatToken(m_keys, m_tokens);
|
||||||
if (hasActionToken()) {
|
if (hasActionToken()) {
|
||||||
// This is another y, something like yy.
|
// This is another y, something like yy.
|
||||||
if (checkActionToken(Action::Copy)) {
|
if (checkActionToken(Action::Copy) && checkMode(VimMode::Normal)) {
|
||||||
addRangeToken(Range::Line);
|
addRangeToken(Range::Line);
|
||||||
processCommand(m_tokens);
|
processCommand(m_tokens);
|
||||||
} else {
|
} else {
|
||||||
@ -1637,11 +1645,12 @@ bool VVim::handleKeyPressEvent(int key, int modifiers, int *p_autoIndentPos)
|
|||||||
}
|
}
|
||||||
} else if (modifiers == Qt::ShiftModifier) {
|
} else if (modifiers == Qt::ShiftModifier) {
|
||||||
tryGetRepeatToken(m_keys, m_tokens);
|
tryGetRepeatToken(m_keys, m_tokens);
|
||||||
if (!hasActionToken() && m_mode == VimMode::Normal) {
|
if (!hasActionToken()) {
|
||||||
// Y, same as yy.
|
// Y, same as yy.
|
||||||
addActionToken(Action::Copy);
|
addActionToken(Action::Copy);
|
||||||
addRangeToken(Range::Line);
|
addRangeToken(Range::Line);
|
||||||
processCommand(m_tokens);
|
processCommand(m_tokens);
|
||||||
|
setMode(VimMode::Normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -3176,6 +3185,13 @@ bool VVim::selectRange(QTextCursor &p_cursor, const QTextDocument *p_doc,
|
|||||||
switch (p_range) {
|
switch (p_range) {
|
||||||
case Range::Line:
|
case Range::Line:
|
||||||
{
|
{
|
||||||
|
// Visual mode, just select selected lines.
|
||||||
|
if (checkMode(VimMode::Visual) || checkMode(VimMode::VisualLine)) {
|
||||||
|
expandSelectionToWholeLines(p_cursor);
|
||||||
|
hasMoved = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Current line and next (p_repeat - 1) lines.
|
// Current line and next (p_repeat - 1) lines.
|
||||||
if (p_repeat == -1) {
|
if (p_repeat == -1) {
|
||||||
p_repeat = 1;
|
p_repeat = 1;
|
||||||
@ -3466,14 +3482,12 @@ void VVim::processDeleteAction(QList<Token> &p_tokens)
|
|||||||
case Range::Line:
|
case Range::Line:
|
||||||
{
|
{
|
||||||
// dd, delete current line.
|
// dd, delete current line.
|
||||||
if (repeat == -1) {
|
|
||||||
repeat = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cursor.hasSelection()) {
|
if (cursor.hasSelection()) {
|
||||||
|
repeat = VEditUtils::selectedBlockCount(cursor);
|
||||||
deleteSelectedText(cursor, true);
|
deleteSelectedText(cursor, true);
|
||||||
} else {
|
} else {
|
||||||
VEditUtils::removeBlock(cursor);
|
VEditUtils::removeBlock(cursor);
|
||||||
|
repeat = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message(tr("%1 fewer %2").arg(repeat).arg(repeat > 1 ? tr("lines")
|
message(tr("%1 fewer %2").arg(repeat).arg(repeat > 1 ? tr("lines")
|
||||||
@ -3682,14 +3696,12 @@ void VVim::processCopyAction(QList<Token> &p_tokens)
|
|||||||
case Range::Line:
|
case Range::Line:
|
||||||
{
|
{
|
||||||
// yy, copy current line.
|
// yy, copy current line.
|
||||||
if (repeat == -1) {
|
|
||||||
repeat = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cursor.hasSelection()) {
|
if (cursor.hasSelection()) {
|
||||||
|
repeat = VEditUtils::selectedBlockCount(cursor);
|
||||||
copySelectedText(cursor, true);
|
copySelectedText(cursor, true);
|
||||||
} else {
|
} else {
|
||||||
saveToRegister("\n");
|
saveToRegister("\n");
|
||||||
|
repeat = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message(tr("%1 %2 yanked").arg(repeat).arg(repeat > 1 ? tr("lines")
|
message(tr("%1 %2 yanked").arg(repeat).arg(repeat > 1 ? tr("lines")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user