2015-11-11 34 views
2

在vim中,我經常在系統剪貼板中粘貼粘貼之後,最終撤消了超出我想要的操作。有沒有更好的辦法?撤銷粘貼而不撤消之前的輸入

重現:

Open iTerm  # or terminal 
vi    # open vim 
i    # enter insert mode 
type some stuff 
Cmd-V   # paste the contents of the OS X clipboard 

的漿料是一個爛攤子,因爲我還沒有:set paste。所以

EsC# enter command mode 
u # undo 

但這解除了我的打字以及我的粘貼。

我可以使用不同的撤消嗎?除了在粘貼之前記住:set paste之外,還有更好的方法來做到這一點?

+1

根據終端的不同,使用括號內的粘貼模式自動設置粘貼。 http://stackoverflow.com/a/7053522/1890567 – FDinoff

+1

當我發生這種情況時,我所做的是選擇粘貼的文本並對其進行格式化(在轉義模式下點擊'=') –

回答

4

這不是你要找的答案,但你真的應該停止使用vim作爲非模態編輯器。如果你想粘貼然後返回到正常模式並使用vim的粘貼命令。 假設你有一個帶有剪貼板訪問的vim版本,這應該可以做竅門"+p。您也可以通過將您的未命名的寄存器設置爲+(或*)寄存器來實現此目的,以便從剪貼板粘貼成爲簡單的p

下面的問題有一個很好的答案,包括所有這些信息How to make vim paste from (and copy to) system's clipboard?

+0

哦,不,一定要尋找「改變你的習慣以贏得大勝」的答案,「這裏是如何創建皮帶」。謝謝! –

+0

這裏真正重要的是得到一個帶+剪貼板選項的vim的副本。(然後你可以在.vimrc中設置剪貼板=未命名並共享系統剪貼板。) –

1

事實上,我不確定你有什麼可以做的,但有一種解決方案是在粘貼之前在插入模式下點擊Ctrl-Gu。這將撤消塊分成兩個獨立的塊 - 所以粘貼將被記憶爲單獨的可撤銷操作。

如果您必須記住要這樣做,那麼您可以使用:set paste代替 - 但在優勢方面,它的鍵盤輸入更少,您不必首先進入命令模式。

1

在這個plugin看看,它可以自動運行:set paste!當您使用Cmd的-V(或按Ctrl -V)粘貼一些文字。完成後離開粘貼模式。

1

在粘貼插入模式之前,以下映射會創建額外的撤銷點(通過:help i_CTRL-G_u)。這樣,您可以分別撤消粘貼。

inoremap <C-r> <C-g>u<C-r> 
inoremap <C-v> <C-g>u<C-v> 
+0

這實際上並不奏效。也許與我的vim編譯的功能有關? –

+0

我有自己的第一個映射。我不確定Mac上的命令-V;它可能是一個映射本身。在粘貼之前您明確鍵入「 u」時是否工作? –

+0

是的。我想我只是沒有正確地採用Cmd-v。經過一些Google搜索後,我嘗試了,但那也不起作用。 –

0

其實解決方案是你必須首先進入命令模式(例如Esc)並重新進入插入模式,但它只適用於我手動鍵入,但似乎「隨機」停止工作,如果我測試它在~/.vimrc。谷歌根本沒有幫助。

我花了很多時間試圖解決這個問題,我只是想出在我的情況的原因:

不映射粘貼鍵同與終端現有的糊關鍵

例如Ctrl + Shift + V將粘貼在我的Konsole終端中,但如果我在~/.vimrc中指定了此密鑰<C-S-v>,則「撤消僅用於單個粘貼而不用多個粘貼」將不起作用。

在我的情況,我必須使用<C-v>而不是<C-S-v>

inoremap <C-v> <Esc>"+pi<Esc>i<Right><Right> 

你的情況可能不同,但有一點是相同的:不分配與現有的終端仿真器鍵相同粘貼鍵衝突。

我已經100%證明了這個結論通過設置我的終端粘貼鍵按Ctrl + V現在<C-v>停止工作,但<C-S-v>工作。

還要注意vim太敏感和奇怪了。我想我必須使用i,然後手動使用2個右鍵,使其在正確的光標位置上工作,這意味着我必須在~/.vimrc中輸入i和2個右鍵。您的情況可能會有所不同,但重點是相同的,請確保〜/ .vimrc中的按鍵+順序與手動輸入的內容完全匹配。