vim或者vi模式下,複製的正確姿勢是什麼?

我每次複製的流程都是,

按V進入選擇模式,

選擇詞a,

退出選擇模式,

移動的要替換的位置,

入選擇模式選擇詞b,

按d刪除,

想再按p粘帖詞a但發現其實是b。

雖然知道這樣的流程是錯的但還是忍不住這麼做,而且不這麼做的話就只能進入輸入模式一點點把詞b刪掉,感覺這樣非常麻煩,那麼正確的姿勢應該是什麼?


按p粘貼發現詞a發現其實是b

原因是你按d刪除的詞b被存入了寄存器,也就是說你當前剪貼板上的內容其實已經是詞b,而不是詞a了。應避免使用 d、x 等命令對當前寄存器再次做操作。

正確流程:

按v?選擇詞a

?按y複製

?退出v模式移動到要替換的位置

?按v?選擇要替換的詞b

?按p粘貼

多說兩句。不想讓詞b進入剪貼板,可引用「_"這個黑洞寄存器。

或者使用命名寄存器,引用方式一般是這樣的:

"ay(p)

代表把文本存到寄存器a,或者把a寄存器里的內容粘貼出來。

想了解更多建議讀一下寄存器相關的資料。


  1. vim有12個粘貼板,分別是0、1、2、...、9、a、「、+;
  2. 用:reg命令可以查看各個粘貼板里的內容。
  3. 在vim中簡單用y只是複製到「(雙引號)粘貼板里,同樣用p粘貼的也是這個粘貼板里的內容;
  4. 要將vim的內容複製到某個粘貼板,需要退出編輯模式,進入正常模式後,選擇要複製的內容,然後按"Ny完成複製,其中N為粘貼板號(注意是按一下雙引號然後按粘貼板號最後按y),例如要把內容複製到粘貼板a,選中內容後按"ay就可以了,有兩點需要說明一下:
  • 「號粘貼板(臨時粘貼板)比較特殊,直接按y就複製到這個粘貼板中了,直接按p就粘貼這個粘貼板中的內容; +號粘貼板是系統粘貼板,用"+y將內容複製到該粘貼板後可以使用Ctrl+V將其粘貼到其他文檔(如firefox、gedit)中,同理,要把在其他地方用Ctrl+C或右鍵複製的內容複製到vim中,需要在正常模式下按"+p;
  • 要將vim某個粘貼板里的內容粘貼進來,需要退出編輯模式,在正常模式按"Np,其中N為粘貼板號,如上所述,可以按"5p將5號粘貼板里的內容粘貼進來,也可以按"+p將系統全局粘貼板里的內容粘貼進來。

注意:在我這裡,只有vim.gtk或vim.gnome才能使用系統全局粘貼板,默認的vim.basic看不到+號寄存器。


:wq
gedit
xxxxxx
alt+f4
vim

(逃


yy

3p

嗯 我不知道為什麼總是喜歡複製3行


shift + p

dw


yiw選中

移動到要替換的位置

viwp

替換完成


abc
def&<--cursor is here

可以先p後d。比如:

ky$

jPlD

或者,先d後p,但要用到寄存器。寄存器"是上次d或y的內容,而寄存器0則是上次y的內容,不會被d覆蓋。所以:

ky$

jD"0P

用:reg可以查看寄存器。還有很多別的寄存器:a-z是自己定義內容的。+是剪貼板。%是當前文件名。/是上次的搜索內容。在普通模式下用"&<寄存器名&>來表示,比如"0,"a。在插入模式下或命令模式下,用Ctrl-R加寄存器名來表示,如Ctrl-R 0。


先p再d啊,醉醉的。


如果從外界複製代碼進vim,可以

:set paste 進入粘貼模式,這時候右鍵粘貼即可,不會出現格式和縮進問題(ubuntu 已測試);

(某些Linux系統可以使用:set noai 然後a進入輸入模式粘貼)

當然如果內部複製 yy 或者 dd 然後p 應該大家都知道


進入i模式,左鍵拖拽選中,右鍵複製,右鍵粘貼


yy-&>p

或者

nyy-&>p 其中n表示數字,你想拷貝多少行


yw全字複製,dw全字刪除

插入模式下ctrl-r,ctrl-"也能複製


set clipboard=unnamed

然後在Visual模式下選好,按y


"刪除不剪切, rd

nnoremap r "_d

vnoremap r "_d


推薦閱讀:

前端開發使用什麼IDE最好?
學會了 Vim 還有必要用 GitHub Atom 或者 Sublime Text 么?
3Blue1Brown 的視頻是怎麼製作的?

TAG:Vim | SublimeText | Atom文本編輯器 |