linux vim(gvim) 多标签页,Vim 的标签页功能
雖然一直在使用 Vim 寫程序與文檔,但是一直沒(méi)有深究其標(biāo)簽頁(yè) (Tab Page) 功能的具體使用方法。現(xiàn)在開(kāi)始重視這個(gè)問(wèn)題,畢竟使用 Vim 的時(shí)間越來(lái)越少了,當(dāng)然這只是針對(duì)我的所有生命而言
。
1 建立新的標(biāo)簽頁(yè)
使用 Vim 在當(dāng)前工作目錄中新建或打開(kāi)某一文件并開(kāi)啟新標(biāo)簽頁(yè)顯示文件內(nèi)容,操作如下:
:tabnew filename
使用 tabf 指令基于正則表達(dá)式遞歸遍歷當(dāng)前工作目錄查找名稱匹配的文件并為其建立新標(biāo)簽頁(yè),用法如下:
:tabf filename_re
上述操作的前提是將 Vim 的工作目錄定位到所期望的位置,否則所修改的文件可能會(huì)陰差陽(yáng)錯(cuò)存儲(chǔ)到你不知道的某一目錄下。在終端里使用 Vim 打開(kāi)某一文件時(shí),會(huì)默認(rèn)將當(dāng)前目錄作為 Vim 的工作目錄,但是在使用 gvim 時(shí),如果從桌面環(huán)境提供的文件管理器中直接打開(kāi)某一文本文件,gvim 的工作目錄默認(rèn)是 $HOME。可能你與我一樣,喜歡自動(dòng)將 Vim 工作目錄遷移到所打開(kāi)文本文件的目錄下,解決方法是編輯 $HOME/.vimrc 文件,添加以下代碼:
"Change work dir to current dir
autocmd BufEnter * cd %:p:h
2 gvim 的 remote-tab 功能
gvim 提供了 remote-tab 的功能,可以實(shí)現(xiàn)在 gvim 打開(kāi)文件的同時(shí)為其建立標(biāo)簽頁(yè)。這里,“remote” 的概念是指 gvim 好像一個(gè)當(dāng)前正在運(yùn)行的服務(wù)器程序,在終端下使用 "gvim --remote-tab-silent filename" 這樣的命令時(shí),會(huì)將“打開(kāi)文檔并為其建立標(biāo)簽頁(yè)”的指令傳遞于當(dāng)前正在運(yùn)行的 gvim 進(jìn)程,gvim 進(jìn)程便會(huì)乖乖地執(zhí)行這一命令。該功能所能帶來(lái)的好處就是只需要開(kāi)一個(gè) gvim 進(jìn)程,所有待編輯的文件都以標(biāo)簽頁(yè)的形式出現(xiàn)在該 gvim 進(jìn)程中,這樣便于隸屬于某一項(xiàng)目的多分文件的編輯與管理。
先把你正在運(yùn)行的所有 gvim 進(jìn)程都關(guān)掉,然后依次執(zhí)行以下的命令,就可以切身體驗(yàn) remote-tab 的功用了。
$ gvim? ? a.txt
$ gvim? ? --remote-tab-silent? ? b.txt
$ gvim? ? --remote-tab-silent? ? c.txt? ? d.txt? ? e.txt
實(shí)際應(yīng)用中,可使用 Shell 提供的別名功能,對(duì) “gvim --remote-tab-silent” 這樣的長(zhǎng)命令行進(jìn)行友好簡(jiǎn)化,做法是編輯 $HOME/.bashrc 文件,向其中添加:
alias vi='gvim --remote-tab-silent'
具體使用什么別名,要依據(jù)個(gè)人喜好。我之所以使用 "vi" 作為 "gvim --remote-tab-silent" 命令的別名,是因?yàn)槲也淮蟪S?vi 這個(gè)命令,而且在許多 linux 發(fā)行版中,"vi" 默認(rèn)連接到 "vim" 的。
現(xiàn)在使用 vi 別名來(lái)實(shí)現(xiàn)前面那個(gè)例子:
$ vi? ? a.txt? b.txt? c.txt? d.txt? e.txt
以前我習(xí)慣使用 "vim" 在終端開(kāi)啟 vim,使用 "gvim" 開(kāi)啟 vim GUI,唯獨(dú)不大用 "vi" 這個(gè)命令,但是從現(xiàn)在開(kāi)始也許我用的最多的是 vi 指令了。
3 在標(biāo)簽頁(yè)之間跳來(lái)跳去
使用 ":tabp" 與 ":tabn" 可分別實(shí)現(xiàn)在一組標(biāo)簽頁(yè)中向前或向后切換當(dāng)前標(biāo)簽頁(yè),但是這樣太繁瑣了,為了將當(dāng)前標(biāo)簽頁(yè)切換到相鄰的標(biāo)簽頁(yè)需要摁 7 次鍵。利用 Vim 提供的鍵映射功能,可將 ":tabp" 與 ":tabn" 命令映射到你喜歡的快捷鍵上。我熱衷于將 ":tabp" 映射為 "Shift + Left" 組合鍵,將 ":tabn" 映射為 "Shift + Right" 組合鍵,做法是編輯 $HOME/.vimrc,添加:
" shift tab pages
map :tabp
map :tabn
4 標(biāo)簽頁(yè)的排序
有時(shí)打開(kāi)多個(gè)標(biāo)簽頁(yè),它們?cè)跇?biāo)簽頁(yè)欄中的排列次序并不是我們所希望的,需要手動(dòng)去調(diào)整。許多編輯器支持使用鼠標(biāo)拖放來(lái)調(diào)整標(biāo)簽頁(yè)的次序,但 vim 不可以,目前只能借助標(biāo)簽頁(yè)編號(hào)機(jī)制并采用命令模式來(lái)解決標(biāo)簽頁(yè)次序調(diào)整問(wèn)題。
在標(biāo)簽頁(yè)欄中,每一標(biāo)簽頁(yè)都是有編號(hào)的,從 0 開(kāi)始,由左至右依次遞增 1。
使用 ':tabm n' 命令可以將當(dāng)前標(biāo)簽所對(duì)應(yīng)的編號(hào)調(diào)整為 'n',即將當(dāng)前標(biāo)簽頁(yè)的位置調(diào)整到編號(hào) 'n' 所對(duì)應(yīng)的標(biāo)簽頁(yè)位置。
5 優(yōu)化標(biāo)簽頁(yè)名的顯示
Vim 的標(biāo)簽欄中,各標(biāo)簽頁(yè)的名稱默認(rèn)是對(duì)應(yīng)文件所在路徑全稱的簡(jiǎn)寫,譬如 /usr/share/doc/test.txt 文件所對(duì)應(yīng)的標(biāo)簽頁(yè)名默認(rèn)是 /u/s/d/test.txt,這樣的標(biāo)簽頁(yè)名看上去有些詭異。我覺(jué)得沒(méi)有必要顯示標(biāo)簽文件的路徑名,因?yàn)樵诖蠖鄶?shù)情況下,用戶是非常清楚所編輯文件的位置,即使一時(shí)忘記,也可以使用 ':f' 命令查看文件名。特別是在 gvim 里,鼠標(biāo)往標(biāo)簽頁(yè)名那里懸掛一下,就會(huì)出現(xiàn)一個(gè)很小的提示窗口,其中顯示了標(biāo)簽文件的路徑全稱。
下面是我對(duì) Vim 標(biāo)簽頁(yè)的 hack,在標(biāo)簽頁(yè)欄中去除當(dāng)前所編輯文件的路徑信息,只保留文件名。
function ShortTabLabel ()
let bufnrlist = tabpagebuflist (v:lnum)
let label = bufname (bufnrlist[tabpagewinnr (v:lnum) -1])
let filename = fnamemodify (label, ':t')
return filename
endfunction
set guitablabel=%{ShortTabLabel()}
6 標(biāo)簽頁(yè)與會(huì)話
Vim 可以將當(dāng)前的工作狀態(tài)存儲(chǔ)為會(huì)話文件,通過(guò)讀取該會(huì)話文件就可以將 vim 工作環(huán)境恢復(fù)到你上次退出之前的編輯環(huán)境。對(duì)于當(dāng)前所開(kāi)啟的標(biāo)簽頁(yè)組,在下一次編輯時(shí),可以利用 vim 的會(huì)話功能將它們一并開(kāi)啟,快速?gòu)?fù)原到上一次工作狀態(tài),這樣就可以在 vim 中模擬出 IDE 所特有的項(xiàng)目管理功能。
要恢復(fù)上次的編輯環(huán)境,我們需要保存會(huì)話 (session) 信息與 viminfo 信息:
會(huì)話信息中保存了所有窗口的視圖,外加全局設(shè)置;
viminfo 信息中保存了命令行歷史、搜索字符串歷史、輸入行歷史、非空的寄存器內(nèi)容、文件的位置標(biāo)記、最近搜索/替換的模式、緩沖區(qū)列表、全局變量等信息。
對(duì)于 vim 會(huì)話功能的使用,具體細(xì)節(jié)請(qǐng)參閱 easwy 的一篇文章《Vim 會(huì)話與 info》。為了更方便地使用 vim 會(huì)話功能,推薦使用 sessionman.vim插件。
總結(jié)
以上是生活随笔為你收集整理的linux vim(gvim) 多标签页,Vim 的标签页功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux点阵ascii像素字体,点阵字
- 下一篇: amazon linux 安装nginx