交換Vim中兩個字符的成語是xp
。以原子方式交換兩個字符,以便可以用「。」重複。
請參閱:h 04.5
最後一段和Vim: how do I swap two characters?的幫助。
但偶爾我需要連續做兩個或多個交換操作。我經常感到驚訝的是,對我來說感覺像是一次單獨的操作,實際上是對Vim的兩個操作。這使得用.
重複xp
是不可能的。 (或用u
原子撤銷。)
有沒有辦法在單個操作中交換兩個字符,我可以用.
快速重複?
交換Vim中兩個字符的成語是xp
。以原子方式交換兩個字符,以便可以用「。」重複。
請參閱:h 04.5
最後一段和Vim: how do I swap two characters?的幫助。
但偶爾我需要連續做兩個或多個交換操作。我經常感到驚訝的是,對我來說感覺像是一次單獨的操作,實際上是對Vim的兩個操作。這使得用.
重複xp
是不可能的。 (或用u
原子撤銷。)
有沒有辦法在單個操作中交換兩個字符,我可以用.
快速重複?
Vimcasts.org已發佈an episode,解決了這個問題。
由於@Jeremy猜測解決方案是使用repeat.vim插件。然後只需將以下<Plug>
映射和鍵映射添加到您的vimrc。
nnoremap <silent> <Plug>Transpose xp:call repeat#set("\<Plug>Transpose")<CR>
nmap cp <Plug>Transpose
此處顯示的映射使用cp
。 cp
是新的xp
,可用.
重複,但其他方面完全相同。
現在剩下的就是習慣它了。
這並不理想,但如果您將xp存儲爲宏,則在您執行宏之後它將是可重複的。所以,而不是XP,你正在使用,說@s(交換)。然後@@將重複它。不如。,但它確實有效。
編輯:你知道,我敢肯定有一種方法可以用一些vimscript和tpope的repeat.vim來完成。可悲的是,我的腳印沒有達到鼻菸。我得到了這麼遠 - 也許有人可以糾正我要去哪裏錯了?
fun! DoSwap()
:normal xp
silent! call repeat#set("\<Plug>Swap",1)
endfun
nnoremap <silent> <Plug>Swap :call DoSwap()<CR>
nmap <Leader>s <Plug>Swap
這樣做的問題是,一旦你進入\s
,它確實交換你的角色,它並重復,當你打.
,但它跳轉到行的開頭第一,這不是你想要的。但我確實認爲這可以完成,但我並不完全一樣。
這是一個想法。假設光標位於單詞「oyxgen」的「y」上。
在正常模式下,類型
2sxy<Esc>
查閱字讀取 「氧」。找到下一個錯字(fy
)並重復更改(.
)。
太糟糕了,這隻適用於特定交換「yx」到「xy」,所以這不是最終的解決方案。
我覺得爲什麼不使用':s/yx/xy/gc' – FDinoff
我可以理解能夠用'.'重複的願望。我經常會遇到類似的寵物小偷,但是'xp'並沒有比''慢得多,當你找出一個解決方案時,它會是你vimrc中一個非常難看的功能,你只需要刪除你會學到一些東西,但浪費了淨工作時間 - 至少這是我在這些事情上的個人經驗。 – Conner
'nnoremap! xp' – romainl