會(huì)了“看人下菜碟”)
在寫代碼的時(shí)候沒有什么比“流暢的鍵盤操作”更讓人身心愉悅了。尤其是對(duì)于 Vim 核心玩家來說鼠標(biāo)就是擺設(shè)一通快捷鍵如行云流水才是極客的浪漫。最近主打高性能的網(wǎng)紅編輯器 Zed 悄悄上線了一個(gè)精妙的更新快捷鍵系統(tǒng)里新增了一個(gè)叫multiple_selections多重選中的屬性。這個(gè)聽起來有點(diǎn)技術(shù)化的詞到底解決了什么痛點(diǎn)為什么開發(fā)者們非要大費(fèi)周章地把它加進(jìn)去今天咱就用大白話聊聊這個(gè)新特性背后的故事。一成不變的快捷鍵不夠“聰明”優(yōu)秀的編輯器比如 VS Code 或 IDEA都有一套高級(jí)的快捷鍵上下文Context系統(tǒng)。這意味著同一個(gè)快捷鍵在不同的狀態(tài)下可以觸發(fā)不同的功能。比如當(dāng)你沒選中代碼時(shí)按下某個(gè)鍵是“普通輸入”當(dāng)你選中了一段代碼時(shí)按下同一個(gè)鍵可能會(huì)變成“給代碼加注釋”。這套系統(tǒng)原本運(yùn)行得挺好直到遇到了大名鼎鼎的**多光標(biāo)/多重選擇Multi-Selection**功能。在日常敲代碼時(shí)我們經(jīng)常會(huì)一次性選中很多個(gè)相同的單詞然后同時(shí)修改它們。這時(shí)候編輯器的狀態(tài)就發(fā)生改變了——從“一個(gè)光標(biāo)”變成了“一堆光標(biāo)”。然而傳統(tǒng)的快捷鍵系統(tǒng)無法感知你到底選中了一個(gè)還是多個(gè)地方。這就導(dǎo)致了一個(gè)很尷尬的局面當(dāng)你只選中了一個(gè)單詞按下快捷鍵編輯器能完美執(zhí)行一個(gè)適合單光標(biāo)的操作比如讓屏幕聚焦居中但當(dāng)你一口氣選中了 10 個(gè)單詞按下同一個(gè)快捷鍵編輯器依然傻乎乎地去執(zhí)行單光標(biāo)的邏輯結(jié)果可能就是屏幕一通亂滾或者只處理了最后一個(gè)光標(biāo)剩下的全部丟失快捷鍵無法根據(jù)“選中的數(shù)量”來看人下菜碟——這就是促成這次更新的核心原因。讓快捷鍵擁有“數(shù)數(shù)”的能力為了解決這個(gè)尷尬zed團(tuán)隊(duì)給 Zed 的快捷鍵判斷機(jī)制裝上了一個(gè)計(jì)數(shù)器。只要你在配置文件里加上multiple_selectionsZed 就會(huì)在用戶按下鍵盤時(shí)偷偷瞄一眼“當(dāng)前用戶是只選了一個(gè)地方還是選了好多地方”有了這個(gè)能力你可以玩出很多不可思議的操作。作者在 PR 里提供了一個(gè)完美的真實(shí)場(chǎng)景只有一個(gè)選中時(shí)按下z z編輯器正常工作把當(dāng)前畫面居中對(duì)齊選中了多個(gè)相同的詞時(shí)再次按下z z編輯器發(fā)現(xiàn)滿足了multiple_selections條件立刻“變臉”把這十幾個(gè)選中的代碼段抽出來單獨(dú)塞進(jìn)一個(gè)臨時(shí)的**多重緩沖區(qū)Multi-buffer**里這樣你就可以在一個(gè)干凈的小窗口里同時(shí)批量修改這些代碼而不用在幾百行的源文件里上下翻滾。配置起來也非常簡(jiǎn)單在用戶的keymap.json配置文件里現(xiàn)在可以寫出這樣的“條件判斷”{context:multiple_selections,// 只有同時(shí)選中了多個(gè)地方時(shí)這個(gè)快捷鍵才生效bindings:{z z:editor::OpenSelectionsInMultibuffer// 觸發(fā)高級(jí)的multibuffer展示功能}}z z是vim的一個(gè)快捷鍵可以讓光標(biāo)所在的行立即顯示在屏幕的正中央的位置免去了翻頁(yè)的麻煩動(dòng)作。比如你寫代碼眼睛累了、或者找不著光標(biāo)在哪時(shí)別用鼠標(biāo)滾輪了直接連按兩下 zz一秒拯救你的頸椎下面看看效果比如現(xiàn)在你的光標(biāo)是在截圖的最后一樣如果此時(shí)你按了z z這行內(nèi)容就會(huì)自動(dòng)網(wǎng)上易懂屏幕的中間位置。有了這個(gè)配置之后你多選的內(nèi)容在按了z z 之后多選的內(nèi)容就會(huì)在zed的multibuffer中進(jìn)行展示越是極致的工具越在乎微小的細(xì)節(jié)對(duì)于普通用戶來說這個(gè)更新可能根本察覺不到但對(duì)于需要高頻、極速修改海量代碼的極客和重度 Vim 鍵盤俠而言這絕對(duì)是一個(gè)極具幸福感的史詩(shī)級(jí)改善。Zed 通過引入multiple_selections屬性打破了快捷鍵原本死板的“一刀切”邏輯。它證明了自己不僅在“速度”上追求極致純 Rust 編寫在“操作的主動(dòng)思考”上也在變得越來越聰明、越來越懂打字員的心。越是極致的工具越懂得在鍵盤的方寸之間琢磨用戶真正需要什么。multiple_selections就是這樣一個(gè)藏在細(xì)節(jié)里的進(jìn)化——它不張揚(yáng)但你一旦用上就再也回不去了。