public boolean execute(@NotNull Editor editor, @NotNull Caret caret, @NotNull DataContext context, @NotNull ExCommand cmd) { final TextRange range = cmd.getTextRange(editor, caret, context, true); final int[] endOffsets = range.getEndOffsets(); final List<Integer> ends = Lists.newArrayListWithCapacity(endOffsets.length); for (int endOffset : endOffsets) { ends.add(endOffset - 1); } VimPlugin.getChange().indentRange(editor, caret, context, new TextRange(range.getStartOffsets(), ArrayUtil.toIntArray(ends)), cmd.getCommand().length(), 1); return true; } }
public boolean execute(@NotNull Editor editor, @NotNull Caret caret, @NotNull DataContext context, @NotNull ExCommand cmd) { final TextRange range = cmd.getTextRange(editor, caret, context, true); final int[] endOffsets = range.getEndOffsets(); final List<Integer> ends = new ArrayList<>(); for (int endOffset : endOffsets) { ends.add(endOffset - 1); } VimPlugin.getChange().indentRange(editor, caret, context, new TextRange(range.getStartOffsets(), ArrayUtil.toIntArray(ends)), cmd.getCommand().length(), -1); return true; } }
public boolean execute(@NotNull Editor editor, @NotNull DataContext context, @NotNull ExCommand cmd) throws ExException { final String argument = cmd.getArgument(); final RegisterGroup registerGroup = VimPlugin.getRegister(); final char register; if (argument.length() > 0 && !Character.isDigit(argument.charAt(0))) { register = argument.charAt(0); cmd.setArgument(argument.substring(1)); } else { register = registerGroup.getDefaultRegister(); } if (!registerGroup.selectRegister(register)) return false; final CaretModel caretModel = editor.getCaretModel(); final List<Integer> starts = newArrayListWithCapacity(caretModel.getCaretCount()); final List<Integer> ends = newArrayListWithCapacity(caretModel.getCaretCount()); for (Caret caret : caretModel.getAllCarets()) { final TextRange range = cmd.getTextRange(editor, caret, context, true); starts.add(range.getStartOffset()); ends.add(range.getEndOffset() - 1); } return VimPlugin.getCopy().yankRange(editor, new TextRange(ArrayUtil.toIntArray(starts), ArrayUtil.toIntArray(ends)), SelectionType.LINE_WISE, false); } }
public boolean deleteCharacter(@NotNull Editor editor, int count, boolean isChange) { final int caretCount = editor.getCaretModel().getCaretCount(); final List<Integer> startOffsets = Lists.newArrayListWithCapacity(caretCount); final List<Integer> endOffsets = Lists.newArrayListWithCapacity(caretCount); final List<Caret> carets = EditorHelper.getOrderedCaretsList(editor, count > 0 ? CaretOrder.DECREASING_OFFSET : CaretOrder.INCREASING_OFFSET); boolean result = true; for (int i = 0; i < caretCount; i++) { final Caret caret = carets.get(i); final int endOffset = VimPlugin.getMotion().moveCaretHorizontal(editor, caret, count, true); if (endOffset == -1) { result = false; continue; } final int startOffset = caret.getOffset(); startOffsets.add(startOffset); endOffsets.add(endOffset); result = deleteText(editor, new TextRange(startOffset, endOffset), SelectionType.CHARACTER_WISE); final int normalizeOffset = EditorHelper.normalizeOffset(editor, caret.getLogicalPosition().line, startOffset, isChange); if (normalizeOffset != startOffset) MotionGroup.moveCaret(editor, caret, normalizeOffset); } if (caretCount > 1 && result) { final TextRange range = new TextRange(ArrayUtil.toIntArray(startOffsets), ArrayUtil.toIntArray(endOffsets)); VimPlugin.getRegister().storeText(editor, range, range.isMultiple() ? SelectionType.LINE_WISE : SelectionType.CHARACTER_WISE, true); } return result; }