visual-studio-code - 当命令由快捷方式而不是上下文菜单触发时,在扩展中获取焦点资源管理器文件夹或文件
问题描述
这个问题的后续:当用户右键单击资源管理器/上下文中的文件时,如何在 vscode 扩展名中获取文件名或路径?
我的命令希望通过右键单击接收到所选项目的 uri;事实上,如果我通过从上下文菜单中选择命令来调用命令,它确实如此......
但是,如果我将快捷键绑定到此命令(并正确设置“何时”上下文以仅在资源管理器具有焦点时激活)我没有收到 uri;那个参数是undefined
。
显然,有很多“内置”命令(“在文件资源管理器中显示”--Shift+Alt+R)按照我希望自己的命令操作的方式发挥作用。
当使用键盘快捷键调用时,将 uri 获取到我自己的命令有什么技巧?
解决方案
相关问题中有一个提示:Get selected file/folder in Explorer view。
建议使用
vscode.commands.executeCommand('copyFilePath');
见https://github.com/Microsoft/vscode/issues/3553#issuecomment-438969485
所以我对此进行了调查,它可以像这样工作:
async function activate(context) {
let createFile = vscode.commands.registerCommand('folder-operations.createFile', async (folder) => {
// use this if triggered by a menu item,
let newUri = folder; // folder will be undefined when triggered by keybinding
if (!folder) { // so triggered by a keybinding
await vscode.commands.executeCommand('copyFilePath');
folder = await vscode.env.clipboard.readText(); // returns a string
// see note below for parsing multiple files/folders
newUri = await vscode.Uri.file(folder); // make it a Uri
}
createFileOpen(newUri); // use in some function
});
context.subscriptions.push(createFile);
}
笔记 :
这在选择多个文件夹或文件时也有效。然后folder = await vscode.env.clipboard.readText();
将返回类似(在 W10 上):
"C:\\Users\\Mark\\OneDrive\\Test Bed\\zip\r\nC:\\Users\\Mark\\OneDrive\\Test Bed\\zipMultiple"
当两个文件夹(zip
在zipMultiple
这种情况下)被选中,然后为folder-operations.createFile
命令触发键绑定。因此,您必须解析/拆分该字符串才能选择两个文件夹。与多个文件相同。
使用一些键绑定:
{
"key": "shift+alt+c",
"command": "folder-operations.createFile",
"when": "explorerResourceIsFolder && filesExplorerFocus"
}
现在,当某个文件夹集中在资源管理器中并且您触发键绑定时,这将起作用。演示通过键绑定创建新文件:
推荐阅读
- websocket - Can I convert a websocket stream to webRTC?
- firebase - Getting Polyline from Firestore
- c++ - Call static function of specialize template with base class of type T
- matlab - Matlab - plotting function with a for loop over a matrix
- legend - How to create a legend from geojson data with react-leaflet
- stat-density2d - stat_density2d_filled: possible to assign own density?
- jenkins - Jenkins pipeline not able to read method in groovy file
- python - OpenTelemetry Python Instrumentation dbapi 未捕获 odbc 数据库命令
- c# - Asp.net 缓存在 IIS 上不起作用。IIS上有没有设置
- postgresql - 如何将几个 ts_vectors 与 Npgsql 5 中的新表达式索引连接起来?