FakeVim: Use registers 0, 1 and -

Command "y" additionally yanks text to register 0 if the default
register " is used.

Delete and change command set register 1, if removed text contains
multiple lines, or to small delete register (-).

Register " is always set.

Change-Id: I9d357911cedaac97fb1a91698523c9b0f3de8621
Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
hluk
2013-12-01 13:35:37 +01:00
committed by hjk
parent 3fd6a52ac7
commit 99d8567103
2 changed files with 60 additions and 2 deletions

View File

@@ -1896,7 +1896,7 @@ public:
void setCurrentRange(const Range &range);
Range currentRange() const { return Range(position(), anchor(), g.rangemode); }
void yankText(const Range &range, int toregister = '"');
void yankText(const Range &range, int toregister);
void pasteText(bool afterCursor);
@@ -6806,7 +6806,26 @@ QString FakeVimHandler::Private::selectText(const Range &range) const
void FakeVimHandler::Private::yankText(const Range &range, int reg)
{
setRegister(reg, selectText(range), range.rangemode);
const QString text = selectText(range);
setRegister(reg, text, range.rangemode);
// If register is not specified or " ...
if (m_register == '"') {
// copy to yank register 0 too
setRegister('0', text, range.rangemode);
// with delete and change commands set register 1 (if text contains more lines) or
// small delete register -
if (g.submode == DeleteSubMode || g.submode == ChangeSubMode) {
if (text.contains(QLatin1Char('\n')))
setRegister('1', text, range.rangemode);
else
setRegister('-', text, range.rangemode);
}
} else {
// Always copy to " register too.
setRegister('"', text, range.rangemode);
}
const int lines = document()->findBlock(range.endPos).blockNumber()
- document()->findBlock(range.beginPos).blockNumber() + 1;