Vim如何實(shí)現(xiàn)復(fù)制粘貼

這篇文章將為大家詳細(xì)講解有關(guān)Vim如何實(shí)現(xiàn)復(fù)制粘貼,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、高密ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的高密網(wǎng)站制作公司


最近使用Vim來(lái)寫(xiě)博客,發(fā)現(xiàn)在Vim中粘貼Python代碼后,縮進(jìn)就全亂了。仔細(xì)研究了以下,原來(lái)是自動(dòng)縮進(jìn)的緣故,于是做如下設(shè)置:
:set noai nosi取消了自動(dòng)縮進(jìn)和智能縮進(jìn),這樣粘貼就不會(huì)錯(cuò)行了。但在有的vim中不行,還是排版錯(cuò)亂。
后來(lái)發(fā)現(xiàn)了更好用的設(shè)置:
:set paste進(jìn)入paste模式以后,可以在插入模式下粘貼內(nèi)容,不會(huì)有任何變形。這個(gè)真是灰常好用,情不自禁看了一下幫助,發(fā)現(xiàn)它做了這么多事:
textwidth設(shè)置為0
wrapmargin設(shè)置為0
set noai
set nosi
softtabstop設(shè)置為0
revins重置
ruler重置
showmatch重置
formatoptions使用空值
下面的選項(xiàng)值不變,但卻被禁用:
lisp
indentexpr
cindent
怪不得之前只設(shè)置noai和nosi不行,原來(lái)與這么多因素有關(guān)!
但這樣還是比較麻煩的,每次要粘貼的話,先set paste,然后粘貼,然后再set nopaste。有沒(méi)有更方便的呢?你可能想到了,使用鍵盤(pán)映射呀,對(duì)。我們可以這樣設(shè)置::
:map <F10> :set paste<CR>
:map <F11> :set nopaste<CR>這樣在粘貼前按F10鍵啟動(dòng)paste模式,粘貼后按F11取消paste模式即可。其實(shí),paste有一個(gè)切換paste開(kāi)關(guān)的選項(xiàng),這就是pastetoggle。通過(guò)它可以綁定快捷鍵來(lái)激活/取消 paste模式。比如::
:set pastetoggle=<F11>這樣減少了一個(gè)快捷鍵的占用,使用起來(lái)也更方便一些。
但,這是最方便的嗎?Vimer們對(duì)高效的追求永無(wú)止境。還有其他更好地方法嗎?
你可能想到了,vim寄存器。對(duì),使用vim寄存器 “+p 粘貼即可。根本不用考慮是否自動(dòng)縮進(jìn),是否paste模式,直接原文傳遞!:
"+p要說(shuō)vim寄存器,就要從vim文件間的復(fù)制粘貼說(shuō)起。
Vim中,若要復(fù)制當(dāng)前行,普通模式下按 yy 即可,在要粘貼的地方按 p 。這是vim將復(fù)制內(nèi)容保存到了自己的寄存器中的緣故。如果在其他地方執(zhí)行yy,新的內(nèi)容將覆蓋掉原寄存器中內(nèi)容。如果想保存原寄存器中內(nèi)容而同時(shí)增加新的內(nèi)容呢?這時(shí)就要在yy前增加標(biāo)簽了。標(biāo)簽以雙引號(hào)開(kāi)始,跟著的是標(biāo)簽名稱(chēng),可以是數(shù)字0-9,也可以是26個(gè)字母,然后就是復(fù)制操作,這樣就把復(fù)制內(nèi)容保存到該標(biāo)簽寄存器里。通過(guò)下面命令顯示所有寄存器內(nèi)容::
:reg其中注意兩個(gè)特殊的寄存器:”* 和 “+。這兩個(gè)寄存器是和系統(tǒng)相通的,前者關(guān)聯(lián)系統(tǒng)選擇緩沖區(qū),后者關(guān)聯(lián)系統(tǒng)剪切板。通過(guò)它們可以和其他程序進(jìn)行數(shù)據(jù)交換。
備注:
若寄存器列表里無(wú)”* 或 “+ 寄存器,則可能是由于沒(méi)有安裝vim的圖形界面所致。Debian/Ubuntu下可以通過(guò)安裝vim-gnome解決。
$ sudo apt-get install vim-gnome選擇緩沖區(qū)和系統(tǒng)剪切板啥子區(qū)別?讓我們繼續(xù)研究。
選擇緩沖區(qū)和剪切板
不同于Windows,Linux系統(tǒng)里存在兩個(gè)剪切板:一個(gè)叫做選擇緩沖區(qū)(X11 selection buffer),另一個(gè)才是剪切板(clipboard)。
選擇緩沖區(qū)是實(shí)時(shí)的,當(dāng)使用鼠標(biāo)或鍵盤(pán)選擇內(nèi)容時(shí),內(nèi)容已經(jīng)存在于選擇緩沖區(qū)了,這或許就是選擇緩沖區(qū)的由來(lái)吧。
使用下面的命令查看選擇緩沖區(qū)的內(nèi)容::
$ xclip -out如果沒(méi)有xclip命令,Debian/Ubuntu下可以通過(guò)如下命令安裝::
$ sudo apt-get install xclip可以使用鼠標(biāo)中鍵或鍵入Shift+Insert來(lái)粘貼選擇緩沖區(qū)的內(nèi)容。但對(duì)于有些GUI程序,比如gedit,只能通過(guò)鼠標(biāo)中鍵調(diào)用選擇緩沖區(qū)的內(nèi)容,使用Shift+Insert的話,調(diào)用的是剪切板的內(nèi)容。
剪切板和Windows的剪切板類(lèi)似,在選擇文字內(nèi)容后,執(zhí)行Ctrl + c或在菜單里選擇&lsquo;復(fù)制&rsquo;的話,這時(shí)內(nèi)容才存放到剪切板里。
使用下面的命令查看剪切板的內(nèi)容::
$ xclip -out -sel clipboard而使用剪切板的內(nèi)容,則是Ctrl+v。 但在有些情況下,比如gnome-terminal,不能直接使用Ctrl+c,Ctrl+v,這時(shí)就要用Shift+Ctrl+c,Shift+Ctrl+v代替。
原格式粘貼
好了,了解了選擇緩沖區(qū)和剪切板,下面就是實(shí)現(xiàn)保留格式粘貼的完美解決方案:
方案一:
選擇文本內(nèi)容
vim普通模式下按 “*p 將選擇緩沖區(qū)中內(nèi)容粘貼進(jìn)來(lái)
方案二:
復(fù)制文件內(nèi)容
vim普通模式下按 “+ p 將剪切板內(nèi)容粘貼進(jìn)來(lái)
這時(shí),如果要復(fù)制的內(nèi)容也是vim編輯器中的內(nèi)容,那么如何復(fù)制才更方便呢?
vim中的復(fù)制
vim有一個(gè)可視模式(Visual Mode),在此模式下可以選擇區(qū)域??梢栽谄胀J较骆I入v進(jìn)入可視模式,也可以個(gè)性化一點(diǎn),鍵入V進(jìn)入行可視模式,或者鍵入Ctrl+v進(jìn)入列可視模式。這時(shí)移動(dòng)光標(biāo)就可以選擇內(nèi)容了。注意這時(shí)被選內(nèi)容已經(jīng)實(shí)時(shí)保存于選擇緩沖區(qū)了,當(dāng)然你也可以鍵入”+y將此內(nèi)容也保存到剪切板里,或者”ay將內(nèi)容保存到標(biāo)簽為a的寄存器中。但要知道,只有前兩個(gè)中的內(nèi)容可以在其他程序中使用,而a寄存器中的內(nèi)容只能在該vim編輯器內(nèi)使用。
也可以通過(guò)鼠標(biāo)來(lái)復(fù)制。這里首先要打開(kāi)鼠標(biāo)模式。:
:set mouse=a這樣在普通模式下可以直接使用鼠標(biāo)選擇區(qū)域復(fù)制到選擇緩沖區(qū)。但這種情況下不能復(fù)制到剪切板。
若要使用鼠標(biāo)復(fù)制內(nèi)容到剪切板,則需要做如下設(shè)置::
:set mouse=v這種情況下,除了可以像上面一樣直接使用鼠標(biāo)選擇區(qū)域復(fù)制到選擇緩沖區(qū)以外,還可以在右鍵菜單中選擇“復(fù)制”來(lái)保存到剪切板里。但新問(wèn)題又出來(lái)了。若顯示行號(hào),也會(huì)將行號(hào)一并選擇。你會(huì)想到,這好辦呀,如果不需要行號(hào)的話,在復(fù)制前,先執(zhí)行set nonu來(lái)取消行號(hào)顯示唄。
其實(shí)沒(méi)必要這樣,如果不需要復(fù)制行號(hào)的話,用在可視模式下用鍵盤(pán)來(lái)選擇不就可以嗎?
并且,從上面的討論,我們不難得出,使用選擇緩沖區(qū)比使用剪切板要方便的多,可以節(jié)省很多步驟。
所以,最終我們得到了vim文件間復(fù)制粘貼的完美方案,文件傳輸?shù)闹修D(zhuǎn)使用選擇緩沖區(qū)。
vim文件間復(fù)制粘貼完美方案
在~/.vimrc中增加如下一行::
set mouse=v復(fù)制內(nèi)容到選擇緩沖區(qū)。
帶行號(hào)時(shí),使用鼠標(biāo)選擇內(nèi)容區(qū)域。
不要行號(hào),使用 “*yny 復(fù)制n行或可視模式下選擇。
將選擇緩沖區(qū)中內(nèi)容粘貼到vim文件:普通模式下按 “*p 。

--------------------------------------------------------------------------------
補(bǔ)充:
設(shè)置vim中默認(rèn)使用選擇緩沖區(qū)寄存器 “*:
set clipboard = unnamed則可以直接通過(guò)y,p和系統(tǒng)選擇緩沖區(qū)進(jìn)行數(shù)據(jù)交換。

關(guān)于“Vim如何實(shí)現(xiàn)復(fù)制粘貼”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

文章標(biāo)題:Vim如何實(shí)現(xiàn)復(fù)制粘貼
文章源于:http://bm7419.com/article32/ijpipc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、手機(jī)網(wǎng)站建設(shè)、建站公司、定制開(kāi)發(fā)、用戶體驗(yàn)小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)