學習vi和vim編輯器(16):vim的多視窗功能(1)

來源:互聯網
上載者:User

學習vi和vim編輯器(16):vim的多視窗功能(1)

vim預設是在一個視窗中編輯所有檔案,在檔案間移動或者移動到檔案的不同部分時只顯示一個緩衝區。但vim也提供了多視窗編輯功能,可以簡化複合的編輯任務。這篇文章將學習如何在一個啟動並執行vim進程裡使用多視窗,包括多視窗編輯工作的初始化與啟動,在視窗間移動游標,在顯示區中移動視窗等。

啟動多視窗編輯:

可以在開啟vim時啟動多視窗編輯,也可以在編輯會話中分割視窗。

從命令列(shell)啟動多視窗:

預設情況下,vim為一個會話只開啟一個視窗,即使開啟時已經指定多個檔案。如果想從命令列中開啟多個視窗,需要使用vim的" -o "選項,此時vim會試著為命令列上列出的每個檔案開啟一個視窗。也可以在" -o "後面附上數值,從而指定開啟視窗的數量。關於" -o "選項,在《學習vi和vim編輯器(15):vim對vi的主要改進》中已經講過。

當vim建立超過一個視窗時,它預設為每個視窗建立狀態行(如果只是一個視窗時,預設不呈現任何狀態行)。可以使用vim的laststatus選項控制這項行為,預設laststatus=1。如果將laststatus設定為2,則可看到每個視窗的狀態行,即使只開啟一個視窗。

vim的多視窗編輯:

在啟動vim後,可以使用" :split "建立新視窗。該命令將當前視窗分成兩半,均顯示相同緩衝區中的內容,因此可以在兩個視窗中瀏覽相同的檔案。類似地,使用" :vsplit "命令,可以建立全新的垂直分隔視窗。

本章中提到的許多命令,都有更為便捷的命令序列。例如" ^Ws "(按下CTRL+W,再按下s鍵)等價於" :split "命令。所有vim的視窗命令都以" ^W "開始(W代表Window的意思)。但是使用ex命令的形式可以讓我們提供選擇性參數,從而可自訂預設功能。

vim以上述方式(水平或垂直地)分隔視窗,且" :split "命令未指定檔案時,我們將於兩個視窗中編輯同一份檔案。如果想要編輯或瀏覽另一個檔案,可以將新的檔案作為參數傳給" :split "命令,例如" :split otherfile "。

開啟視窗:

接下來將詳細介紹在分割視窗時如何取得更為精確的行為。

分隔視窗的選項:

完整的開啟新的水平視窗的" :split "命令如下: " :[n]split [++opt] [+cmd] [file] "。命令中:

n :為vim指定新視窗中顯示的行數,新視窗位於畫面頂端;

opt:傳遞vim選項資訊給新的視窗會話;

cmd:傳入欲在新視窗中執行的命令;

file:指定欲在新視窗中編輯的檔案;

" :[n]new [++opt] [+cmd] [file] "命令也可以按上述方式開啟一個水平視窗,但有一點細微差別:除了建立新視窗外,自動命令WinLeave,WinEnter,BufLeave,BufEnter也被執行了。

除了水平分割命令,vim也提供類似的垂直分割命令:" :vsplit "或 " vnew "。但是有兩個水平分割命令沒有對應的垂直分割命令:

" :sview filename ":水平分割螢幕以開啟新視窗,並將緩衝區設定為readonly。" :sview "中的filename為必要參數。
" :sfind [++opt][+cnd] filename ":與" :split "命令類似,但是在path中尋找filename,如果未找到,則不分割視窗。

有條件的分割命令:

vim可以讓我們執行一種命令,在找到新檔案時才開啟新視窗。" :topleft cmd "告訴vim:執行cmd並顯示一個新視窗,如果cmd成功開啟新檔案,游標需在左上方。該命令的三種可能結果:

cmd水平分割了視窗,新視窗佔據vim視窗的上半部;

cmd垂直分割了視窗,新視窗佔據vim視窗的左半邊;

cmd未分割視窗,而是把游標移動到當前視窗的左上方。

遊走視窗間(在視窗間移動游標):

使用gvim和vim時,在視窗間移動很方便。gvim已預設支援滑鼠點擊,而vim則可通過" :set mouse =a "命令來開啟mouse選項,為所有用途啟用滑鼠的使用。vim也提供全套導航命令,可在會話視窗間快速而準確地移動。這些視窗間的移動命令緊密地對應編輯時的行動命令。

" ^Wj "或者"^W<DOWN> ":移動到下一個視窗,這個命令不會迴圈移動,如果已經是最底端的視窗,則該命令無效。而且該命令在往下移動時,還會跳過同一行中的其他視窗;

" ^Wk "或者" ^W<UP> ":移動到上一個視窗,剛好與" ^Wj "命令相反;

" ^Wh "或者" ^W<LEFT> ":移動到當前視窗左邊的視窗;

" ^Wl "或者" ^W<RIGHT> ":移動到當前視窗右邊的視窗;

" ^Ww "或者" ^W^W ":移動到下方的視窗或右邊的視窗。這個命令會在所有vim視窗間迴圈移動。移動順序為:從左至右,從上到下;

" ^Wt " 或者" ^W^t ":移動到最左上方的視窗(t代表top);

" ^Wb "或者" ^W^b ":移動最右下角的視窗(b代表bottom);

" ^Wp "或者" ^W^p ":移動到前一個(最後訪問的)視窗(p代表previous);

移動視窗:

vim有兩種移動視窗本身的方式:一種是簡單地在螢幕上切換視窗,另一種則是改變視窗的實際布局。第一種情況:雖然視窗在螢幕上的位置有變,但尺寸維持不變,第二種情況下,視窗不只移動,還調整尺寸,以填充它們移向的位置。

移動視窗本身(輪換或交換):

接下來的命令能夠移動視窗,但不會調整布局。即視窗以輪換的形式進行移動。這些命令的對象只限當前視窗所在的行或列上。

" ^Wr ":向右或向下輪換視窗,即當前行或當前列的每一個視窗按指定方向移動一位,最末尾的視窗移動到第一位;

" ^WR ":與" ^Wr "類似,只是輪換方向相反。如果沒有其它視窗與當前視窗同行或同列,則這些命令不會有動作。而且輪換視窗時,游標隨著視窗移動;

" ^Wx ":能交換同行或同列視窗的位置。預設是交換當前視窗與它的下一個視窗的位置,如果下方沒有視窗,則試著與上一個視窗交換位置。也可以在此命令前加上數量,從而與指定的視窗交換位置;

移動視窗並改變布局:

" ^WK ":移動當前視窗至螢幕頂端,使用螢幕的全部寬度;

" ^WJ ":移動當前視窗至螢幕底端,使用螢幕的全部寬度;

" ^WH ":移動當前視窗至螢幕左端,使用螢幕的全部高度;

" ^WL ":移動當前視窗至螢幕右端,使用螢幕的全部高度;

" ^WT ":移動當前視窗至新的現有分頁,如果當前視窗是當前分頁裡的唯一視窗,則不發生任何操作;

在移動並擴充視窗為滿屏的寬度和高度後,vim重新以合理的方式分配其他視窗。當然,重新分配時,也會受到一些視窗選項設定的影響。

本章vim命令總結:

" -o "選項," laststatus "選項," split "," vsplit "," ^Ws "," new "," vnew "," :sview "," :sfind "," :topleft "," :set mouse=a "," ^Wj "," ^W<Down> "," ^Wk "," ^W<Up> ", " ^Wh "," ^W<Left> "," ^Wl "" ^W<Right> "," ^Ww "," ^W^W "," ^Wt "," ^W^t "," ^Wb "," ^W^b "," ^Wp "," ^W^p "," ^Wr "," ^WR "," ^Wx "," ^WK "," ^WJ "," ^WH "," ^WL "," ^WT "。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.