vim粘貼代碼 如果有注釋,那么粘貼后就慘不忍睹,類似於:

我粘貼代碼到a.cpp,內容為:
//打印函數 void print_hex(const unsigned char*data,int length,int radix=16) { for(int i=0;i<length;i++){ if(i%radix==0){ printf("0x "); } printf("%02x ",data[i]); if(i%4==3){ printf(" "); } if(i%radix==radix-1){ printf("\n"); } } printf("\n"); }
其原因是什么呢?
vim中 輸入 :set
發現:

formatoptions=croql
這個選項,希望在~/.vimrc中禁止,比如設置為
set formatoptions=tcpmM
但是vim不識別此行,報錯.無法禁止這個選項....
經過百度搜索,發現解決方案.[比較惡心 開源軟件的就是配置文件 不人性化]
在粘貼前先設置進入粘貼插入模式,即不會自動縮進和連續注釋
set paste
然后再進入插入模式粘貼,結果如圖:

下面的插入模式 多了一個 paste.
在粘貼插入模式下代碼是不會自動按格式縮進的,需要使用nopaste設置回來
set nopaste
也可以在.vimrc中設置切換的快捷鍵,比如設置F9,則可以在.vimrc中加入:
set pastetoggle=<F9>
這樣直接在插入模式按F9就會在“-- 插入 --”模式和“-- 插入(粘貼) --”模式中切換
探秘:
最近使用Vim來寫博客,發現在Vim中粘貼Python代碼后,縮進就全亂了。仔細研究了以下,原來是自動縮進的緣故,於是做如下設置: :set noai nosi 取消了自動縮進和智能縮進,這樣粘貼就不會錯行了。但在有的vim中不行,還是排版錯亂。 后來發現了更好用的設置: :set paste 進入paste模式以后,可以在插入模式下粘貼內容,不會有任何變形。這個真是灰常好用,情不自禁看了一下幫助,發現它做了這么多事: textwidth設置為0 wrapmargin設置為0 set noai set nosi softtabstop設置為0 revins重置 ruler重置 showmatch重置 formatoptions使用空值 下面的選項值不變,但卻被禁用: lisp indentexpr cindent 怪不得之前只設置noai和nosi不行,原來與這么多因素有關! 但這樣還是比較麻煩的,每次要粘貼的話,先set paste,然后粘貼,然后再set nopaste。有沒有更方便的呢?你可能想到了,使用鍵盤映射呀,對。我們可以這樣設置:: :map <F10> :set paste<CR> :map <F11> :set nopaste<CR> 這樣在粘貼前按F10鍵啟動paste模式,粘貼后按F11取消paste模式即可。其實,paste有一個切換paste開關的選項,這就是pastetoggle。通過它可以綁定快捷鍵來激活/取消 paste模式。比如:: :set pastetoggle=<F11> 這樣減少了一個快捷鍵的占用,使用起來也更方便一些。
還有GUI操作系統的粘貼板,粘貼到命令行的vim中,有快捷鍵嗎???事實證明,不太好用
但,這是最方便的嗎?Vimer們對高效的追求永無止境。還有其他更好地方法嗎? 你可能想到了,vim寄存器。對,使用vim寄存器 “+p 粘貼即可。根本不用考慮是否自動縮進,是否paste模式,直接原文傳遞!: "+p 要說vim寄存器,就要從vim文件間的復制粘貼說起。 Vim 中,若要復制當前行,普通模式下按 yy 即可,在要粘貼的地方按 p 。這是vim將復制內容保存到了自己的寄存器中的緣故。如果在其他地方執行yy,新的內容將覆蓋掉原寄存器中內容。如果想保存原寄存器中內容而同時增加新 的內容呢?這時就要在yy前增加標簽了。標簽以雙引號開始,跟着的是標簽名稱,可以是數字0-9,也可以是26個字母,然后就是復制操作,這樣就把復制內 容保存到該標簽寄存器里。通過下面命令顯示所有寄存器內容:: :reg 其中注意兩個特殊的寄存器:”* 和 “+。這兩個寄存器是和系統相通的,前者關聯系統選擇緩沖區,后者關聯系統剪切板。通過它們可以和其他程序進行數據交換。 備注: 若寄存器列表里無”* 或 “+ 寄存器,則可能是由於沒有安裝vim的圖形界面所致。Debian/Ubuntu下可以通過安裝vim-gnome解決。 $ sudo apt-get install vim-gnome 選擇緩沖區和系統剪切板啥子區別?讓我們繼續研究。
vim需要圖形化,才可以使用 系統 粘貼板的內容..沒辦法,vim是命令行的..只能 用第一種方法了.
在兩個vim中切換內容進行復制 粘貼,也是一件 比較惡心的事情...我的做法就是 復制到一個臨時文件,然后合並目標文件和臨時文件.在編輯...沒辦法,vim 太 "高端"了,不會用.vim/emacs讓人類的人性化科學倒退了很多啊.
在vim中 輸入
:help formatoptions
可以查看這個幫助信息.
參考資料:
http://hi.baidu.com/luosiyong/item/40f77e21df1f798c6e2cc335
http://www.cnblogs.com/end/archive/2012/06/01/2531147.html
