2012-06-24 66 views
53

是否有移動到視覺選擇的開始或結束?我知道o而在視覺模式之間交替,但我需要能夠精確選擇開始。總體目標是用圓括號包圍視覺選定的區域。如何跳轉到視覺選擇的開始/結束?


基於評論,我能夠使用下面的宏實現這個。我們的想法是:

  1. <ESC>退出可視模式
  2. `<去前面的可視選擇結束
  3. a)追加一個右括號
  4. <ESC>退出插入模式
  5. `<去上一個視覺選擇的開始
  6. i(插入開口圓括號
  7. <ESC>再次退出插入模式。

例如:

map \q <ESC>`>a)<ESC>`<i(<ESC> 

根據一種意見,我們有一個更簡潔的解決方案,

map \q c()<ESC>P 
+0

Typo:number 2 should''>' – JJoao

回答

9

以「圍繞用括號視覺選定區域」最簡單的方法是:

c焊割視覺選定區域()P UT回在中間。 = c()<ESC>P

我建議定義一個新的.vimrc視覺模式命令(例如 「\ Q」)與:

:vmap \q c()<ESC>P 

這種方法也適用與視覺矩形區域(<C-V>):它 看跌期權「 (「」)「

+1

關閉,但不完全。如果視覺選擇中的最後一個字符是該行的最後一個字符,則光標懸停在視覺選擇之前的字符上。因此,使用插入(「i」)會導致插入一個字符的括號內的文本比預期的更遠。 – duckworthd

+0

@duckworthd,我的壞 - 你完全正確。請看我的更新... – JJoao

70

有存儲位置上的兩個相關的內置標記第一個和當前緩衝區中最後一個可視選擇的最後一個字符。 爲了將光標移動到這些標記指向的位置,請分別使用 命令`<`>。 (見:help `>:help `<

+4

這正是我尋找的答案。 @duckworthd - 你應該考慮點擊接受:-) –

+0

但你如何保持選擇相同? – Adrian

+17

@Adrian:你的意思是不離開視覺模式?如果是這樣,你可以使用'o'命令。 –

19

如果你只是想包圍視覺選擇有已經工作中得到完成,即由蒂姆·波普,誰寫this plugin稱爲surround。它圍繞單詞或視覺選擇與你喜歡的分隔符。

選擇您的視覺選擇,說i like vimS)得到(i like vim)S(得到(i like vim),這個改變[i like vim]cs](周邊城市),並刪除ds]終於拿到i like vim

10

如果您不能使用Surrond.vim,這裏是做這件事:

  1. 做你與vV可視選擇。
  2. 離開它與<Esc>
  3. 類型`>a)<Esc>在之後插入右括號選擇的最後一個字符。
  4. 類型`<i(<Esc>插入左括號之前選擇的第一個字符。
34

雖然你在Visual Selection點擊o。它會將光標的位置更改爲選擇的另一端。然後O跳回來。

相關問題