vim粘貼代碼的時候,惡心的縮進.


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM