2014-03-02 16 views
2

在Vim中,假設我想用一個String的內容替換另一個String的內容。在不使用視覺選擇的情況下粘貼分隔符

原始輸入

var1 = "January" 
var2 = "February" 

所需的輸出

var1 = "January" 
var2 = "January" 

我通常會做的是:

  • 將光標移至行1
  • yi"(猛拉內引號)
  • 將光標移動到目的地報價在2號線
  • vi"p(視選擇內報價,粘貼)

雖然這工作得很好,我一般儘量儘可能避免視覺模式,所以我不完全滿意我的第4步(vi"p)。

有什麼辦法可以在不使用Visual模式的情況下指定「目的地粘貼區域」?我懷疑這可能是鏈接到g,但我什麼都想不到。

+2

「我通常儘量避免視覺模式」......如果你不介意我問,爲什麼? – jthill

+0

使用操作員動作更改文字比Visual模式更可取,因爲只有前者可以用'.'可靠地重複。德魯尼爾稱這是'點公式'。 – glts

回答

2

我經常需要這個,我寫了一個插件來簡化並允許最大速度:ReplaceWithRegister

該插件提供了一個二合一的gr命令,該命令用{運動} /文本對象覆蓋的文本,整行或當前選擇內容替換寄存器的內容;舊文本被刪除到黑洞寄存器中,即它已經消失。它透明地處理許多轉角情況,並允許通過標準.命令快速重複。如果你不喜歡它,它的頁面會鏈接到替代品。

2

它不是特別漂亮,但這裏有雲:

  1. 前往路線之一,yi"
  2. 移動到襯在兩個
  3. 類型"_di"hp

一個刪除什麼的報價,但將刪除的文本發送到黑洞寄存器。然後它將光標移回一個,並粘貼你從第一行中抽出的東西。

總而言之,您可以從第一行開始並輸入yi"j"_di"hp。爲什麼人們會發現vim的恐嚇? ;)

或者,像正常一樣抽出第一行,然後放到第二行並鍵入ci"<Ctrl+p>,然後從菜單中選擇以前抽出的文本。從我的.vimrc

+1

黑色保持寄存器+1 – pkacprzak

2

摘錄:

" Delete to 'black hole' register 
nnoremap <leader>d "_d 
vnoremap <leader>d "_d 

所以,你只需要\di"P爲您的最後一個步驟(假設你使用\<leader>)。

3

有很多方法可以做到這一點,但使用視覺模式是最容易的。

  • 使用黑洞寄存器刪除內容然後粘貼。例如"_di"P
  • ci"<c-r>0<c-r>插入寄存器的內容
  • 只需粘貼,然後移動字符並刪除舊文本。例如pldt"

不過視覺模式仍然有我的投票。我發現大多數人的擔憂是,使用視覺模式+粘貼是默認寄存器與所選文本交換,並且重複性不好。大家好消息! 0寄存器總是存儲最後一個放行。壞消息是視覺模式仍然不能很好地重複。看看這個vimcast插曲Pasting from Visual mode,瞭解更多信息。它提到了一些可以幫助解決這個問題的插件。

+0

對於第二種方法,我認爲你應該使用第一種方法中的黑洞寄存器('「_ci」')或使用0寄存器('ci」 ')。對於第三種方法,您必須從開頭引號開始,而不是在裏面,並且它不會滿足用'.'重複的目標(第一種方法也不會)。我猜這個目標是在@ PeterRincker的答案後添加的(在評論中)。 – benjifisher

+0

@benjifisher謝謝。我已經糾正了第二個選項。我認爲如果重複能力通過'.'是最終目標,那麼第二種方法可能是最好的vim選項。然而,使用像Vimcast插曲中提到的Ingo Karkat的[ReplaceWithRegister](http://www.vim.org/scripts/script.php?script_id=2703)這樣的插件,可能是所有最簡單的維護' 。的重複能力。 –

1

有一個插件可以精確地解決這個問題。這大概是出於你感覺同樣的感覺,也就是說Visual模式對於高級Vim用戶來說往往感覺不太理想。

operator-replace - 操作員用的寄存器內容

替換文本隨着運營商替換安裝更換是這樣的。

  1. 將引號內的單詞抽出。

    yi" 
    
  2. 移動到目標線

    j 
    
  3. 與抽出的文本的引號內更換。 (我已經設置了gr作爲替換操作::map gr <Plug>(operator-replace)選擇你自己的映射。)

    gri" 
    

來看看吧!這是真正優秀的框架的一部分。沒有他們我就無法工作。

相關問題