mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-06-19 12:39:55 +02:00
Support 0 in copy command to copy to top of file
This commit is contained in:
parent
6404e1127e
commit
cac36627aa
src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands
vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands
@ -32,5 +32,170 @@ class CopyCommandTest : VimTestCase() {
|
|||||||
""".trimIndent())
|
""".trimIndent())
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add another test with 'nostartofline'. This should maintain the cursor column
|
@VimBehaviorDiffers(
|
||||||
|
originalVimAfter = """
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Nunc tincidunt viverra ligula non ${c}scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""",
|
||||||
|
description = "Caret placement is wrong",
|
||||||
|
shouldBeFixed = true
|
||||||
|
)
|
||||||
|
@Test
|
||||||
|
fun `test duplicate line below with 'nostartofline'`() {
|
||||||
|
doTest(
|
||||||
|
exCommand("copy ."),
|
||||||
|
"""
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ligula non ${c}scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""".trimIndent(),
|
||||||
|
"""
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
${c}Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""".trimIndent(),
|
||||||
|
) {
|
||||||
|
enterCommand("set nostartofline")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@VimBehaviorDiffers(
|
||||||
|
originalVimAfter = """
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
${c}accumsan vitae, facilisis ac nulla.
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""",
|
||||||
|
description = "Caret placement is incorrect",
|
||||||
|
shouldBeFixed = true
|
||||||
|
)
|
||||||
|
@Test
|
||||||
|
fun `test copy range to above first line`() {
|
||||||
|
doTest(
|
||||||
|
exCommand("3,4copy 0"),
|
||||||
|
"""
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ${c}ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""".trimIndent(),
|
||||||
|
"""
|
||||||
|
${c}Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""".trimIndent(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@VimBehaviorDiffers(
|
||||||
|
originalVimAfter = """
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
${c}accumsan vitae, facilisis ac nulla.
|
||||||
|
""",
|
||||||
|
description = "Caret placement is incorrect",
|
||||||
|
shouldBeFixed = true
|
||||||
|
)
|
||||||
|
@Test
|
||||||
|
fun `test copy range to below last line`() {
|
||||||
|
doTest(
|
||||||
|
exCommand("3,4copy $"),
|
||||||
|
"""
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ${c}ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""".trimIndent(),
|
||||||
|
"""
|
||||||
|
|Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
|Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
|Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
|accumsan vitae, facilisis ac nulla.
|
||||||
|
|${c}Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
|accumsan vitae, facilisis ac nulla.
|
||||||
|
|""".trimMargin(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@VimBehaviorDiffers(
|
||||||
|
originalVimAfter = """
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
${c}accumsan vitae, facilisis ac nulla.
|
||||||
|
""",
|
||||||
|
description = "Caret placement is incorrect",
|
||||||
|
shouldBeFixed = true
|
||||||
|
)
|
||||||
|
@Test
|
||||||
|
fun `test copy with no space between command and address`() {
|
||||||
|
doTest(
|
||||||
|
exCommand("3,4copy$"),
|
||||||
|
"""
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ${c}ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""".trimIndent(),
|
||||||
|
"""
|
||||||
|
|Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
|Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
|Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
|accumsan vitae, facilisis ac nulla.
|
||||||
|
|${c}Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
|accumsan vitae, facilisis ac nulla.
|
||||||
|
|""".trimMargin(),
|
||||||
|
)
|
||||||
|
assertPluginError(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
@VimBehaviorDiffers(
|
||||||
|
originalVimAfter = """
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
${c}accumsan vitae, facilisis ac nulla.
|
||||||
|
""",
|
||||||
|
description = "Caret placement is wrong",
|
||||||
|
shouldBeFixed = true
|
||||||
|
)
|
||||||
|
@Test
|
||||||
|
fun `test copy to below first address of range with no errors`() {
|
||||||
|
doTest(
|
||||||
|
exCommand("3,4copy 4,1,2,.,0"),
|
||||||
|
"""
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ${c}ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""".trimIndent(),
|
||||||
|
"""
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
|
||||||
|
Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
|
||||||
|
${c}Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
|
||||||
|
accumsan vitae, facilisis ac nulla.
|
||||||
|
""".trimIndent(),
|
||||||
|
)
|
||||||
|
assertPluginError(false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,9 +14,9 @@ import com.maddyhome.idea.vim.api.VimEditor
|
|||||||
import com.maddyhome.idea.vim.api.getText
|
import com.maddyhome.idea.vim.api.getText
|
||||||
import com.maddyhome.idea.vim.api.injector
|
import com.maddyhome.idea.vim.api.injector
|
||||||
import com.maddyhome.idea.vim.command.OperatorArguments
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
import com.maddyhome.idea.vim.state.mode.SelectionType
|
|
||||||
import com.maddyhome.idea.vim.ex.ranges.Range
|
import com.maddyhome.idea.vim.ex.ranges.Range
|
||||||
import com.maddyhome.idea.vim.put.PutData
|
import com.maddyhome.idea.vim.put.PutData
|
||||||
|
import com.maddyhome.idea.vim.state.mode.SelectionType
|
||||||
import com.maddyhome.idea.vim.vimscript.model.ExecutionResult
|
import com.maddyhome.idea.vim.vimscript.model.ExecutionResult
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,16 +41,31 @@ public data class CopyTextCommand(val range: Range, val argument: String) : Comm
|
|||||||
|
|
||||||
val transferableData = injector.clipboardManager.getTransferableData(editor, range, text)
|
val transferableData = injector.clipboardManager.getTransferableData(editor, range, text)
|
||||||
val textData = PutData.TextData(text, SelectionType.LINE_WISE, transferableData, null)
|
val textData = PutData.TextData(text, SelectionType.LINE_WISE, transferableData, null)
|
||||||
val putData = PutData(
|
var mutableCaret = caret
|
||||||
textData,
|
val putData = if (address1 == 0) {
|
||||||
null,
|
// TODO: This should maintain current column location
|
||||||
1,
|
mutableCaret = mutableCaret.moveToOffset(0)
|
||||||
insertTextBeforeCaret = false,
|
PutData(
|
||||||
rawIndent = true,
|
textData,
|
||||||
caretAfterInsertedText = false,
|
null,
|
||||||
putToLine = address1 - 1,
|
1,
|
||||||
)
|
insertTextBeforeCaret = true,
|
||||||
injector.put.putTextForCaret(editor, caret, context, putData)
|
rawIndent = true,
|
||||||
|
caretAfterInsertedText = false,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PutData(
|
||||||
|
textData,
|
||||||
|
null,
|
||||||
|
1,
|
||||||
|
insertTextBeforeCaret = false,
|
||||||
|
rawIndent = true,
|
||||||
|
caretAfterInsertedText = false,
|
||||||
|
putToLine = address1 - 1
|
||||||
|
)
|
||||||
|
}
|
||||||
|
injector.put.putTextForCaret(editor, mutableCaret, context, putData)
|
||||||
}
|
}
|
||||||
return ExecutionResult.Success
|
return ExecutionResult.Success
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user