最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VSCode插件開發(fā)全攻略之命令、菜單、快捷鍵

 更新時間:2020年05月07日 14:51:14   作者:我是小茗同學  
這篇文章主要介紹了VSCode插件開發(fā)全攻略之命令、菜單、快捷鍵,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

命令

我們在前面HelloWord章節(jié)中已經(jīng)提到了命令寫法,這里再重溫一下。

context.subscriptions.push(vscode.commands.registerCommand('extension.sayHello', () => {
 vscode.window.showInformationMessage('您執(zhí)行了extension.sayHello命令!');
}));

然后在清單文件聲明:

"commands": [
	{
		"command": "extension.sayHello",
		"title": "Hello World"
	},
]

vscode.commands.registerCommand是注冊命令的API,執(zhí)行后會返回一個Disposable對象,所有注冊類的API執(zhí)行后都需要將返回結果放到context.subscriptions中去。

回調函數(shù)參數(shù)

回調函數(shù)接收一個可選參數(shù)uri

  • 當從資源管理器中右鍵執(zhí)行命令時會把當前選中資源路徑uri作為參數(shù)傳過;
  • 當從編輯器中右鍵菜單執(zhí)行時則會將當前打開文件路徑URI傳過去;
  • 當直接按Ctrl+Shift+P執(zhí)行命令時,這個參數(shù)為空;

示例:

context.subscriptions.push(vscode.commands.registerCommand('extension.demo.getCurrentFilePath', (uri) => {
 vscode.window.showInformationMessage(`當前文件(夾)路徑是:${uri ? uri.path : '空'}`);
}));

package.json如下:

"menus": {
  "editor/context": [
  {
   "when": "editorFocus",
   "command": "extension.demo.getCurrentFilePath",
   "group": "navigation"
  }
  ],
  "explorer/context": [
  {
   "command": "extension.demo.getCurrentFilePath",
   "group": "navigation"
  }
  ]
 }
	}

最終效果:

編輯器命令

除了上面的注冊普通命令之外,還有一個vscode.commands.registerTextEditorCommand 命令,文本編輯器命令與普通命令不同,它們僅在有被編輯器被激活時調用才生效,此外,這個命令可以訪問到當前活動編輯器textEditor

// 編輯器命令
context.subscriptions.push(vscode.commands.registerTextEditorCommand('extension.testEditorCommand', (textEditor, edit) => {
 console.log('您正在執(zhí)行編輯器命令!');
 console.log(textEditor, edit);
}));

執(zhí)行命令

這里先說一下vscode api的一個習慣設計,很多命令都是返回一個類似于Promise的Thenable對象,如果發(fā)現(xiàn)api里面返回的是這個對象,說明這個方法不是直接返回結果的。

使用代碼執(zhí)行某個命令:

vscode.commands.executeCommand('命令', 'params1', 'params2', ...).then(result => {
	console.log('命令結果', result);
});

獲取所有命令

前面說到了執(zhí)行命令,那我怎么知道某些操作它的命令是什么呢?

有2種方法,第一種通過代碼,getCommands接收一個參數(shù)表示是否過濾內部命令,默認否:

// 獲取所有命令
vscode.commands.getCommands().then(allCommands => {
 console.log('所有命令:', allCommands);
});

一般有上千個命令:

另外一種方法是直接打開快捷鍵設置,這里就能看到所有命令列表,右鍵可以復制命令:

復雜命令

vscode內部有一些復雜命令,所謂復雜命令,就是指一些需要特殊參數(shù)并且通常有返回值、執(zhí)行一些諸如跳轉到定義、執(zhí)行代碼高亮等特殊操作、這類命令有幾十個,作為插件開發(fā)者,很多時候你可能正需要這類命令,復雜命令列表參閱:https://code.visualstudio.com/docs/extensionAPI/vscode-api-commands

以下是演示如何在VS代碼中打開新文件夾的示例:

let uri = Uri.file('/some/path/to/folder');
commands.executeCommand('vscode.openFolder', uri).then(sucess => {
	console.log(success);
});

菜單

一個菜單項的完整配置如下:

"contributes": {
 "menus": {
 "editor/title": [{
  "when": "resourceLangId == markdown",
  "command": "markdown.showPreview",
  "alt": "markdown.showPreviewToSide",
  "group": "navigation"
 }]
 }
}

editor/title是key值,定義這個菜單出現(xiàn)在哪里;when控制菜單合適出現(xiàn);command定義菜單被點擊后要執(zhí)行什么操作;alt定義備用命令,按住alt鍵打開菜單時將執(zhí)行對應命令;group定義菜單分組;

出現(xiàn)的位置

目前插件可以給以下場景配置自定義菜單:

資源管理器上下文菜單 - explorer/context

編輯器上下文菜單 - editor/context

編輯標題菜單欄 -editor/title

編輯器標題上下文菜單 -editor/title/context

調試callstack視圖上下文菜單 - debug/callstack/context

SCM標題菜單 -scm/title

SCM資源組菜單 -scm/resourceGroup/context

SCM資源菜單 -scm/resource/context

SCM更改標題菜單 -scm/change/title

左側視圖標題菜單 -view/title

視圖項菜單 -view/item/context

控制命令是否顯示在命令選項板中 - commandPalette

其中,最常見的應該就explorer/contexteditor/context了,這2個應該不用多做介紹。

editor/title

圖標在commands里面配置,light和dark分別對應淺色和深色主題,如果不配置圖標則直接顯示文字:

"commands": [
 {
 "command": "extension.demo.testMenuShow",
 "title": "這個菜單僅在JS文件中出現(xiàn)",
 "icon": {
  "light": "./images/tool-light.svg",
  "dark": "./images/tool-light.svg"
 }
 }
]

editor/title/context

when

通過可選的when語句,VS Code可以很好地控制什么時候顯示菜單項,當然,when語句語法不僅僅適用于菜單項的控制。

when語句語法有很多,這里列舉幾個常用的:

  • resourceLangId == javascript:當編輯的文件是js文件時;
  • resourceFilename == test.js:當當前打開文件名是test.js時;
  • isLinux 、isMac、isWindows:判斷當前操作系統(tǒng);
  • editorFocus :編輯器具有焦點時;
  • editorHasSelection :編輯器中有文本被選中時;
  • view == someViewId:當當前視圖ID等于someViewId時;
  • 等等等

多個條件可以通過與或非進行組合,例如:editorFocus && isWindows && resourceLangId == javascript。

有關when語句的更多完整語法請參考官方文檔:https://code.visualstudio.com/docs/getstarted/keybindings

alt

alt很好理解,表示沒有按下alt鍵時,點擊右鍵菜單執(zhí)行的是command對應的命令,而按下了alt鍵后執(zhí)行的是alt對應的命令。這里不做過多解釋。

group

組間排序

控制菜單的分組和排序。不同的菜單擁有不同的默認分組。

  • editor/context中有這些默認組:
  • navigation- 放在這個組的永遠排在最前面;
  • 1_modification - 更改組;
  • 9_cutcopypaste - 編輯組z_commands - 最后一個默認組,其中包含用于打開命令選項板的條目。

除了navigation是強制放在最前面之外,其它分組都是按照0-9、a-z的順序排列的,所以如果你想在1_modification9_cutcopypaste插入一個新的組別的話,你可以定義一個諸如6_test

explorer/context有這些默認組:

  • navigation - 放在這個組的永遠排在最前面;
  • 2_workspace - 與工作空間操作相關的命令。
  • 3_compare - 與差異編輯器中的文件比較相關的命令。
  • 4_search - 與在搜索視圖中搜索相關的命令。
  • 5_cutcopypaste - 與剪切,復制和粘貼文件相關的命令。
  • 7_modification - 與修改文件相關的命令。

編輯器選項卡上下文菜單有這些默認組:

  • 1_close - 與關閉編輯器相關的命令。
  • 3_preview - 與固定編輯器相關的命令。

editor/title有這些默認組:

  • 1_diff - 與使用差異編輯器相關的命令。
  • 3_open - 與打開編輯器相關的命令。
  • 5_close - 與關閉編輯器相關的命令。

組內排序

默認同一個組的順序取決于菜單名稱,如果想自定義排序的話可以再組后面通過@<number>的方式來自定義順序,例如:

"editor/context": [
 {
 "when": "editorFocus",
 "command": "extension.sayHello",
		// 強制放在navigation組的第2個
 "group": "navigation@2"
 },
 {
 "when": "editorFocus",
 "command": "extension.demo.getCurrentFilePath",
		// 強制放在navigation組的第1個
 "group": "navigation@1"
 }
]

如上,默認情況下,按照菜單名排序,sayHellogetCurrentFilePath的前面,但是通過自定義順序,把后者放到了前面。

快捷鍵

快捷鍵設置的寫法比較簡單,如下所示:

"contributes": {
 "keybindings": [{
		// 指定快捷鍵執(zhí)行的操作
 "command": "extension.sayHello",
		// windows下快捷鍵
 "key": "ctrl+f10",
		// mac下快捷鍵
 "mac": "cmd+f10",
		// 快捷鍵何時生效
 "when": "editorTextFocus"
 }]
}

這個快捷鍵最終會出現(xiàn)在整個vscode快捷鍵設置界面:

如果您想了解更多有關快捷鍵綁定的詳細細節(jié)可以繼續(xù)閱讀官方文檔:https://code.visualstudio.com/docs/getstarted/keybindings

總結

到此這篇關于VSCode插件開發(fā)全攻略之命令、菜單、快捷鍵的文章就介紹到這了,更多相關VSCode插件開發(fā)命令、菜單、快捷鍵內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于Qt實現(xiàn)駕??颇靠荚囅到y(tǒng)的示例代碼

    基于Qt實現(xiàn)駕??颇靠荚囅到y(tǒng)的示例代碼

    這篇文章主要為大家詳細介紹了如何基于Qt實現(xiàn)駕??颇靠荚囅到y(tǒng),文中的示例代碼講解詳細,對我們學習Qt有一定幫助,需要的可以參考一下
    2022-07-07
  • 深入解析C++中類的多重繼承

    深入解析C++中類的多重繼承

    這篇文章主要介紹了深入解析C++中類的多重繼承,包括多重繼承相關的二義性問題,需要的朋友可以參考下
    2015-09-09
  • OpenCV畫任意圓弧曲線

    OpenCV畫任意圓弧曲線

    這篇文章主要為大家詳細介紹了OpenCV畫任意圓弧曲線,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++獲取文件大小數(shù)值的三種方式介紹

    C++獲取文件大小數(shù)值的三種方式介紹

    最近在做項目時經(jīng)常需要獲得文件的大小操作,雖然在網(wǎng)絡上已經(jīng)有許多篇博客介紹了,但是還是想總結出自己一篇,記錄一下自己在項目中是怎么獲得文件大小的
    2022-10-10
  • C語言 數(shù)據(jù)結構之連續(xù)存儲數(shù)組的算法

    C語言 數(shù)據(jù)結構之連續(xù)存儲數(shù)組的算法

    這篇文章主要介紹了C語言 數(shù)據(jù)結構之連續(xù)存儲數(shù)組的算法的相關資料,需要的朋友可以參考下
    2017-01-01
  • C語言二維數(shù)組指針的概念及使用

    C語言二維數(shù)組指針的概念及使用

    C語言中的二維數(shù)組是按行排列的,也就是先存放a[0]行,再存放a[1]行,最后存放a[2]行;每行中的4個元素也是依次存放。數(shù)組a為int類型,每個元素占用4個字節(jié),整個數(shù)組共占用48個字節(jié)
    2023-02-02
  • C語言實現(xiàn)推箱子游戲

    C語言實現(xiàn)推箱子游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C語言的循環(huán)小練習詳解

    C語言的循環(huán)小練習詳解

    這篇文章主要為大家介紹了C語言的循環(huán)小練習,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C語言數(shù)據(jù)結構樹之后序遍歷的實現(xiàn)

    C語言數(shù)據(jù)結構樹之后序遍歷的實現(xiàn)

    這篇文章主要介紹了C語言數(shù)據(jù)結構之后序遍歷的實現(xiàn)的相關資料,這里提供一個簡單實例來實現(xiàn)后續(xù)遍歷,對于數(shù)據(jù)結構樹的學習很有幫助,需要的朋友可以參考下
    2017-07-07
  • QT實現(xiàn)自定義Http客戶端的示例代碼

    QT實現(xiàn)自定義Http客戶端的示例代碼

    這篇文章主要為大家詳細介紹了QT如何實現(xiàn)自定義Http客戶端的,可以實現(xiàn)支持get,post請求方式;支持連接超時處理;支持網(wǎng)絡錯誤,嘗試重連等功能,感興趣的小伙伴可以學習一下
    2022-11-11

最新評論

鹰潭市| 综艺| 泰来县| 涞源县| 象州县| 千阳县| 尼勒克县| 阜平县| 西宁市| 怀安县| 平利县| 石首市| 虹口区| 渭源县| 正阳县| 云和县| 明星| 阿坝县| 龙井市| 南投县| 禄丰县| 万年县| 伊宁市| 安化县| 疏勒县| 福鼎市| 尖扎县| 连云港市| 贵南县| 巴林左旗| 莱西市| 弥渡县| 盐津县| 体育| 高雄市| 华安县| 衡阳市| 孙吴县| 宁乡县| 吉首市| 鸡西市|