package test; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.TextRange; import org.apache.http.util.TextUtils; /** * Created by Administrator on 2017/4/27. */ public class ReplaceCtrID extends AnAction { @Override public void actionPerformed(AnActionEvent event) { Editor mEditor = event.getData(PlatformDataKeys.EDITOR); final Project project = event.getRequiredData(CommonDataKeys.PROJECT); if (null == mEditor) { return; } SelectionModel model = mEditor.getSelectionModel(); String selectedText = model.getSelectedText(); if (TextUtils.isEmpty(selectedText)) { selectedText = getCurrentWords(mEditor); if (TextUtils.isEmpty(selectedText)) { return; } } final Document document = mEditor.getDocument(); String queryText = strip(addBlanks(selectedText)); final int start = model.getSelectionStart(); final int end = model.getSelectionEnd(); Runnable runnable = new Runnable() { @Override public void run() { document.replaceString(start, end, "1111111"); } }; //Making the replacement WriteCommandAction.runWriteCommandAction(project, runnable); model.removeSelection(); /* Runnable r = ()-> EditorModificationUtil.deleteSelectedText(mEditor); WriteCommandAction.runWriteCommandAction(mEditor.getProject(), r); r = ()-> EditorModificationUtil.insertStringAtCaret(mEditor,"111111"); WriteCommandAction.runWriteCommandAction(mEditor.getProject(), r);*/ //mEditor.getDocument().deleteString(0,1); } public String strip(String str) { return str.replaceAll("/\\*+", "") .replaceAll("\\*+/", "") .replaceAll("\\*", "") .replaceAll("//+", "") .replaceAll("\r\n", " ") .replaceAll("\\s+", " "); } public String addBlanks(String str) { String temp = str.replaceAll("_", " "); if (temp.equals(temp.toUpperCase())) { return temp; } String result = temp.replaceAll("([A-Z]+)", " $0"); return result; } public String getCurrentWords(Editor editor) { Document document = editor.getDocument(); CaretModel caretModel = editor.getCaretModel(); int caretOffset = caretModel.getOffset(); int lineNum = document.getLineNumber(caretOffset); int lineStartOffset = document.getLineStartOffset(lineNum); int lineEndOffset = document.getLineEndOffset(lineNum); String lineContent = document.getText(new TextRange(lineStartOffset, lineEndOffset)); char[] chars = lineContent.toCharArray(); int start = 0, end = 0, cursor = caretOffset - lineStartOffset; if (!Character.isLetter(chars[cursor])) { return null; } for (int ptr = cursor; ptr >= 0; ptr--) { if (!Character.isLetter(chars[ptr])) { start = ptr + 1; break; } } int lastLetter = 0; for (int ptr = cursor; ptr < lineEndOffset - lineStartOffset; ptr++) { lastLetter = ptr; if (!Character.isLetter(chars[ptr])) { end = ptr; break; } } if (end == 0) { end = lastLetter + 1; } String ret = new String(chars, start, end-start); return ret; } }
IntelliJ IDEA/Andro Studio Plugin 替换选中字符串
最新推荐文章于 2024-03-25 22:57:00 发布