感谢 @entimm 老哥建议,现加入自定义扩展指令,希望能帮到有需要的人。
插件地址: https://marketplace.visualstudio.com/items?itemName=yanzf.powertools&ssr=false
使用开发交流群:895768531
新增功能:
插件支持用户通过加载外部 js 文件来达到扩展功能的目的。对于有自定义扩展需求的用户,可以参照以下步骤来实现。
在本地新建一个 js 文件,复制以下内容:
module.exports.helloWorld = function(context) {
var vscode = context.require('vscode');
vscode.window.showInformationMessage("hello world!");
}
这段代码的作用是导出一个名字为helloworld
的自定义指令。
现在我们看看函数的实现,可以注意到函数有一个context
参数,插件会在运行时把当前上下文对象注入到该参数。context
暴露了以下方法供用户使用:
function require(module: string): any;
用于加载外部模块
var vscode = context.require('vscode');
PS: 对于大部分情况,vscode 模块将会是最常使用的,相关 vscode-api 请点击这里查看。
function getEditor(): vscode.TextEditor;
获取当前要执行指令的编辑器
var editor = context.getEditor();
function getProcessSelection(): vscode.Range;
获取当前待处理区域。请注意以下两点:
var editor = context.getEditor();
var selection = context.getProcessSelection();
var text = editor.document.getText(selection);
context.print(text);
public async edit(changes: [vscode.Range, string][]): Promise<boolean>;
更新指定区域文本,支持一次更改多个,在一个事务操作中完成。 例如以下代码将每行第一个字符转成大写:
module.exports.toUpper = async function (context) {
var vscode = context.require('vscode');
var editor = context.getEditor();
var changes = new Array();
var document = editor.document;
for (var index = 0; index < document.lineCount; index++) {
var line = document.lineAt(index);
if (line.isEmptyOrWhitespace) {
continue;
}
var range = line.range.with(new vscode.Position(line.lineNumber, 0), new vscode.Position(line.lineNumber, 1));
var changeText = document.getText(range).toUpperCase();
changes.push([range, changeText]);
}
await context.edit(changes);
}
public isColumnBlock(): boolean;
判断当前选择内容是否列模式
var columnBlock = context.isColumnBlock();
context.print(columnBlock);
public print(): void;
打印文本
文件菜单
-> 首选项
-> 设置
-> 扩展
-> PowerTools
,然后点击在 setting.json 中编辑
。"powertools.CommandFiles": []
操作演示: