題 在Vim中的突出顯示文本周圍添加括號


Vim中是否有功能允許在突出顯示的文本周圍添加括號?

例如,如果我突出顯示 n = getchar() 在 if (n = getchar() == '\n'),我想把括號括起來。


12
2018-02-08 00:26


起源




答案:


你需要一個很棒的必備插件 環繞。然後,如果您選擇文本和類型,它將很樂意做您想要的 Sb (環繞式),或 S) (注意大寫S!)。

它實際上可以做很多周圍:各種引號,標籤等。它允許您將光標放在雙引號詞中,並通過鍵入以下內容將雙引號更改為單引號: cs"' (改變環繞 " 至 ')。或者您可以通過鍵入完全刪除引號 ds" (刪除環繞 ")。

通過鏈接閱讀文檔,真的很棒!


15
2018-02-08 00:41



但是,您沒有解釋如何使用選擇。我被帶到這裡是因為它不是立即顯而易見的。 - JackHasaKeyboard
@JackHasaKeyboard,你是什麼意思我沒有解釋如何選擇它?我的回答中的第二個句子說:>然後,如果你願意,它會愉快地做你想做的事 選擇文字 和類型 sb (環繞式),或 s)。 - Dmitry Frank
所以你做到了。但是不適合我,打 s 只需刪除選擇並進入插入模式。 - JackHasaKeyboard
這意味著我在答案中提到的“環繞”插件未正確安裝。 - Dmitry Frank
確實很有趣。我已經使用了一段時間,可以打賭。 - biocyberman


除了德米特里的建議 環繞插件,可以使用以下命令在突出顯示的文本周圍添加括號:

xi()<Esc>P

您可以使用(例如)在可視模式下設置地圖 \s 將以下內容添加到您的 ~/.vimrc 文件:

xnoremap <leader>s xi()<Esc>P

18
2018-02-08 07:30



這看起來像一個簡單的解決方案。如果我將來沒有發現任何問題,我會更喜歡這個而不是額外的插件。謝謝! - Zelphir
這是一個很好的解決方案,但不如使用環繞聲插件那麼完整,因為如果您選擇整條線路它不起作用(使用 V 代替 v)。在這種情況下,它只是粘貼你的parens下面的線條。 - Rohan Orton


LH-支架 簡單地綁定 ( 用括號括起選擇。不像 環繞 它沒有遵循vim通常的鍵綁定理念。相反,需要更少的密鑰。

否則,有很多方法可以繼續。如果你不介意弄亂未命名的寄存器,你也可以使用 s(^R")<esc> (^R 喜歡 CTRL-R


1
2018-02-09 09:25





在dotancohens答案的基礎上,我把以下內容放在我的 .vimrc

xnoremap <leader>( <ESC>`>a)<ESC>`<i(<ESC>

您可以輕鬆地為[],{}等進行類似的映射。它通過跳轉到結束可視模式後隱式設置的開始和結束標記來工作。這樣選擇整行將在第一行/最後一行的開頭/結尾添加parens;它不會覆蓋你的yank註冊;並且它會在開幕式之前將光標保持在正確位置。


0
2017-11-02 09:04