2010-10-12 94 views
1

我在Vim中運行了一些代碼,並且遇到了問題(我認爲)未處於正確模式。我試圖將'<>'或'[]'之間的文本存入寄存器。在點代碼開始後面我知道光標是一對支架之間,但我不知道括號內是什麼樣的:我該如何在vim中以編程方式取消視覺模式

" put text in x reg if I'm in <> brackets 
    normal! vi<"xy 
    " put in x reg if I'm in [] brackets 
    if len(@x) < 7 
      normal! vi["xy 
    endif 
    [. .. . more code follows making use of 
      value in x register] 

如果我<之間點擊>括號中的代碼作品的其餘部分好吧,雖然我可能不在正常模式。如果我在[]括號之間點擊,那麼它根本不起作用,並且文字[「xy在光標位置處插入。」

我試過了幾個不同的解決方法,例如試圖把(或單獨的常規命令)或使用'可視化'命令後,每個視覺部分,不能得到的事情和Visual的命令避免插入字符的第二部分,但似乎也搞砸了視覺匹配到x寄存器。

我有點困惑和不知道什麼模式,我完全在腳本的所有部分:正常,視覺,或插入。我手動運行的東西,它似乎工作正常,但如果我這樣做它以編程方式,它的行爲意想不到。有一些簡單的東西我錯過了嗎?我可以做我想要的另一種方式,但是這種方法(初看起來)似乎是最簡單和最直接的。是嗎?

感謝您的幫助

回答

0

好的,我找到了問題所在。當第一個內括號命令找不到匹配時,該模式保持可視模式。在再次按下按鍵之前需要額外的'v'才能恢復到正常模式。像這樣:

" put text in x reg if I'm in <> brackets 
    normal! vi<"xy 
    " put in x reg if I'm in [] brackets 
    if len(@x) < 7 
      " EXTRA V IN LINE BELOW 
      normal! vvi["xy 
    endif 
    [. .. . more code follows making use of 
      value in x register] 
+0

不是一個好方法。改用轉義字符。在插入模式下按CTRL-V然後按ESC進入。 – Benoit 2010-10-13 06:18:07

+0

Benoit - 謝謝。這裏使用'逃生'的優勢究竟是什麼? – 2010-10-13 17:45:13

相關問題