您好,登錄后才能下訂單哦!
這篇文章主要介紹“VSCode中如何添加并使用多光標”,在日常操作中,相信很多人在VSCode中如何添加并使用多光標問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”VSCode中如何添加并使用多光標”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
按住?鍵不放,再將光標移動到任何你想添加光標的地方直接點擊就會增加一個光標。
VSCode 中和光標相關的快捷鍵中都有 ? 鍵
我們可以通過?+K,?+S快捷鍵組合打開 VSCode 快捷鍵表,搜索 cursor
會列出所有和光標有關的快捷鍵,搜索 add cursor
就可以查看和 添加光標
相關的快捷鍵:
同一列添加光標:
?+?+↓: 在下一行同一列添加光標
?+?+↑: 在上一行同一列添加光標
VSCode 編輯器中可以同時存在多個光標,也可以同時存在多個選區。在 VSCode 中大多數添加選區的命令,添加選區的同時也會添加一個光標。因此我們可以利用添加選區的快捷鍵來添加多光標。
常用的有:
?+D:添加選區到下一個查找到的匹配,如果匹配到多個,每觸發一次就多添加一個
?+?+L: 添加選區到所有查找到的匹配
上面兩個快捷鍵雖然是說查到到的匹配,實際上使用的時候并不會展開搜索框。
VSCode 提供的命令很多時候是滿足對稱性的,例如?+D是添加選區到下一個查找到匹配,那么大概率就會有一個命令用于添加選區到前一個查到到的匹配。
如過要查找的文本比較復雜,我們可以直接先打開搜索,利用搜索框提供的 大小寫忽略
,匹配整個單詞
,正則
功能來查找復雜的文本,再使用?+?+L來選中所有。
如果已經有一個選區,我們可以使用快捷鍵?+?+I來在選區的所有行尾添加光標。如果這個時候你想將光標移動到行首,直接輸入 Home
鍵即可。
下面的例子就是先選中多行,再將光標添加到所有行的行尾,將 TypeScript 的 interface 改成使用逗號來分隔屬性:
多光標編輯的時候顯然是不能使用鼠標定位的,這就要求我們使用按鍵去移動。最基本的上下左右四個箭頭,Home, End 鍵就不用多說了。除此之外,常用的還有每次移動一個單詞,或者單詞的一部分。
通過搜索 cursor right
,cursor end
之類的可以查看和移動光標相關的快捷鍵:
單詞級別的移動是非常常用的:
?+→:向右移動光標到下一個詞尾
^+?+→:向右移動光標到單詞的下一部分,駝峰,詞首和詞尾都是停留點
之前說過 VSCode 命令的對稱式設計,?+→是向右移動到下一個詞尾,那么?+←就是向左移動上一個詞首。
而且這里也驗證了之前我們說的,和光標相關的快捷鍵都有?。所以我們自定義快捷鍵時,和光標相關的快捷鍵最好也帶上?。例如可以定義?+J為移動到上一個 git change 處,再對稱式設計?+K移動到下一個 git change 處。方便記憶,也方便搜索。
有些 Mac 用戶可能會覺得光標移動太慢,這個可以在 設置
-> 鍵盤
中調節,讓光標移動的更絲滑:
拖移 重復前延遲
滑塊以設置字符開始重復前的等待時間。
拖移 按鍵重復
滑塊以設置字符重復的速率。
建議把 按鍵重復
速度調快,這樣光標移動就會更快更絲滑。
在多光標編輯時,最常見操作便是移動,選中,刪除,插入等。
移動光標的快捷鍵加上?就是選中移動區域的快捷鍵
稍微列舉幾個例子驗證這個規律:
→是向右移動一個字符,?+→可以向右選中下一個字符
↑是向上移動一行,?+↑就是向上選中一行
?+→是向右移動到詞尾,?+?+→就是選中光標當前位置到下一個詞尾
^+?+→是向右移動到單詞的下一部分,?+^+?+→就是向右選中單詞的一部分
有個需要單獨介紹的選中命令是 smart select
。我們知道快捷鍵 cmd + D
可以選中一個單詞,但如果想選中一個字符串它就不行了,這個時候可以就可以用智能選中來實現。
^+?+→:擴大選中范圍
^+?+←:減小選中范圍
最近 antfu 有寫一個用雙擊來智能選中文本的擴展,雖然和多光標編輯沒啥關系,不過感興趣的讀者可以體驗一下:vscode-smart-clicks。
移動光標的快捷鍵加上?鍵就是向左刪除光標移動區域的快捷鍵,加上 fn +?就是向右刪除光標移動區域的快捷鍵
Mac 上?+→表示 End
鍵,?+←表示 Home
鍵,fn +?表示 Delete
鍵這個規則應該是所有應用都通用的。
?+?: 向左刪除到詞首
^+?+?: 向左刪除詞的一部分
因為 backspace 本身就帶有方向性,因此快捷鍵里面不需要搭配方向鍵。
在多光標編輯時我們可以借助 VSCode 自帶的或者第三方擴展提供的命令來快捷插入特定文本或者將選中文本轉換成特定文本。
VSCode 內置的有下面幾個,以單詞 letterCase
舉例,轉換結果分別為:
Transform to Uppercase:LETTERCASE
Transform to Lowercase:lettercase
Transform to Title Case:LetterCase
Transform to Snake Case:letter_case
搜索 transform to
就可以找到所有文本轉換命令了
除了 VSCode 內置的文本處理命令,還可以借助第三方插件,這里推薦:Text Power Tools。推薦理由:維護積極,功能豐富。
有能力的讀者也可以自己編寫 VSCode 擴展去實現更多的插入,轉換,甚至刪除等文本處理命令。需要注意的是實現的時候要處理所有選中,例如筆者的 VSCode 擴展 VSCode FE Helper 實現的將選中單詞變復數的擴展是下面這樣實現的。代碼很簡單。可以注意到里面遍歷了所有選區,所以在多光標編輯時調用這個命令時能夠處理所有選中:
import { TextEditor } from 'vscode'; export default async function plur(editor: TextEditor): Promise<void> { const { default: pluralize } = await import('pluralize'); editor.edit((editorBuilder) => { const { document, selections } = editor; for (const selection of selections) { const word = document.getText(selection); const pluralizedWord = pluralize(word); editorBuilder.replace(selection, pluralizedWord); } }); }
接下來我會演示幾個我平時用到多光標的幾個例子。對于不熟悉多光標編輯的朋友可能看著會有點復雜,不過自己實操一遍多練練應該就沒問題。我平時開發的時候經常會用到多光標編輯,但沒有文中演示的那么絲滑,可能步驟也不是最少的,但還是比重復編輯效率高多了。也會經常輸錯,但是沒關系反正可以撤回嘛。
眾所周知,當你學會了 ctrl + c, ctrl + v,你已經是個初級程序員了。當你不但能夠抄代碼還能夠改別人的代碼,那么你已經是個成熟的程序員了。學會了多光標編輯,可以大大提高那我們修改代碼的效率。
當我們從 stackoverflow 抄了一段 JS 代碼下來,可能里面有很多 var,我們可以利用多光標編輯來將所有 var 替換成 let。
Steps:
將光標定到 var 上
?+?+L,來選中所有 var
輸入 let
有時新開了一個項目,我會需要安裝很多 eslint 插件。最開始我的做法是是到之前項目的 package.json 中把包名一個一個抄過來,那太麻煩了。有人說,你咋不直接把包名和版本號一塊復制到新項目的 package.json 就好了,不那樣做主要是之前項目的包版本號不一定是最新的,新項目需要安裝最新的版本。
Steps:
打開 package.json,把光標定到第一個包名
?+Alt+↓添加多個光標到多個包名
^+?+→,利用 smart select
選中包名并?+C復制
?+N,新建一個臨時文件,?+V粘貼過去
把光標定到第二行的行首,?+Alt+↓往下面同一列添加多光標
先?,再敲一個空格就可以把整個文本復制到 terminal 了
原代碼:
function App() { return ( <HashRouter> <Routes> <Route index element={<Home />} /> <Route path="/settings" element={<Settings />} /> <Route path="/collection" element={<Collection />} /> <Route path="/notFound" element={<NotFound />} /> </Routes> </HashRouter> ); }
將原本字符串形式的路由重構為枚舉類型:
export function App() { return ( <HashRouter> <Routes> <Route index element={<Home />} /> <Route path={RoutePath.Settings} element={<Settings />} /> <Route path={RoutePath.Collection} element={<Collection />} /> <Route path={RoutePath.NotFound} element={<NotFound />} /> </Routes> </HashRouter> ); } enum RoutePath { Settings = '/settings', Collection = '/collection', NotFound = '/notFound', }
在我 TypeScript 類型體操實例解析 這篇文章中有實現過一個將字符串字面量類型中所有字符轉換成大寫的類型:
type LetterMapper = { a: 'A'; b: 'B'; c: 'C'; d: 'D'; e: 'E'; f: 'F'; g: 'G'; h: 'H'; i: 'I'; j: 'J'; k: 'K'; l: 'L'; m: 'M'; n: 'N'; o: 'O'; p: 'P'; q: 'Q'; r: 'R'; s: 'S'; t: 'T'; u: 'U'; v: 'V'; w: 'W'; x: 'X'; y: 'Y'; z: 'Z'; }; type CapitalFirstLetter<S extends string> = S extends `${infer First}${infer Rest}` ? First extends keyof LetterMapper ? `${LetterMapper[First]}${Rest}` : S : S;
VSCode 作為編輯器界的新生代王者,集百家之眾長,除了多光標編輯還有很多可以提高編碼和重構效率的特性。例如:
F2 重命名符號,批量替換變量名可以的話就不要用多光標編輯
Snippets,曾經在 twitter 看到有人發帖說寫了一下午的 react 組件,結果人家一個 snippet 就整完了
Code Actions On Save,在保存文件的時候自動添加缺失的 imports,格式化, lint 的 auto fix 等
Auto fix 和 fix all,如果你用了自動保存就不能用 Code Actions On Save 了,不過你可以手動調用自動修復和修復所有
各種格式化擴展,例如使用 prettier 格式化代碼風格,JS/TS Import/Export Sorter 格式化 imports
等等。作為一個 VSCode 老玩家,我都覺得 VSCode 還有很多使用的功能特性地方我沒探索到。眾所周知,折騰編輯器,折騰 shell,折騰系統,是程序員的三大樂趣。充滿未知才會有趣,才能讓我們熱此不疲,讓我們每一次發現新大陸的時候感嘆自己以前的無知。
到此,關于“VSCode中如何添加并使用多光標”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。