2010-02-22 24 views
64

有沒有簡單/快捷方式「抽出」到Vim的「最後一次搜索」寄存器(「/)Vim的 - 猛拉到搜索註冊

從VIM文檔,看來答案是否定的,但它可以通過一個「讓」命令分配:

It is writable with ":let", you can change it to have 'hlsearch' highlight 
other matches without actually searching. You can't yank or delete into this 
register. 

理想我喜歡做的是一樣的東西:

"/5yw 

這將抽出光標&看跌下下5個字日em在最後的搜索緩衝區中

或者,如果有方法可以搜索已命名的寄存器的內容,那也可以。換句話說,如果我可以這樣做:

"A5yw 

然後搜索什麼是在寄存器A,這也可以。

最接近的我可以進入一個已命名的寄存器&,然後將該寄存器複製到上一個搜索寄存器中,例如,

"A5yw 
:let @/[email protected] 

在作出一個長期的問題更危險,我想指出,這並不總是5個字,我想「猛拉&搜索」 - 有時是17個字符,有時它是在2002年底線等等,所以一個硬編碼的宏不會給我靈活性,我想要的。

回答

81

/輸入搜索字符串後,可以使用Ctrl-R,然後鍵入代表您要使用的寄存器的字母。

例如。

  • 首先,"Ayw猛拉一個字到寄存器A
  • 然後,/ ^R A把寄存器A的內容到搜索字符串。
+0

當然作品這一點,但它聽起來像OP實際上可能沒有希望搜索,只需突出顯示。如果是這樣的話,一個自定義的運營商將是一條路。 – Cascabel 2010-02-22 18:17:14

+0

超級感謝...這正是我所需要的(嗯,在這個限制下,完美的解決方案實際上是不可能的。)感謝您提供簡潔的解決方案。 – Dan 2010-02-22 20:16:40

+0

@Jefromi - 感謝您的回答(下方)和您的幫助。對不起,我原來的問題可能不夠清楚,但我確實希望這樣做,因爲我實際上已禁用突出顯示。感謝您的輸入! – Dan 2010-02-22 20:18:03

5

所以基本上是#和*命令的擴展版本,對吧?這聽起來像你想定義一個自定義操作符(一個需要運動的命令)。我從來沒有這樣做過,但我確實發現了一個plugin,看起來可能會更容易。提供了一些例子。

9

我用下面的代碼爲:

vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR> 
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR> 

    function! VisualSearch(dirrection) 
     let l:[email protected]@ 
     normal! gvy 
     let l:search=escape(@@, '$.*/\[]') 
     if a:dirrection=='/' 
      execute 'normal! /'.l:search 
     else 
      execute 'normal! ?'.l:search 
     endif 
     let @/=l:search 
     normal! gV 
     let @@=l:register 
    endfunction 
+0

如果不清楚,可以讓你選擇一些可視模式的文本,並使用*或#來搜索該文本。 – 2013-11-11 23:37:03

23

如果你沒有使用任何寄存器來存儲抽出文本VIM使用0寄存器。您可以在/之後輸入Ctrl-R 0來搜索。

一個更復雜的例子。說,你要在另一個緩衝區來搜索引號內的文字是光標下現在:

  • 你可以做到這一點與yi"(抽出內報價)
  • 轉到緩衝區要搜索
  • 類型/Ctrl-R 0
1

搜索選擇:

如果你想先抽出一條線的部分,然後用「v」,並與移動

光標,直到您標記你想要什麼,然後按y鍵拷貝文本,現在的選擇是寄存器0

然後你可以鍵入/Ctrl-R 0