2013-08-16 49 views
8

在大中型項目上工作我經常會在屏幕上出現大量的分割,並且每個分割都以5-6個分割打開。通常,我爲不同的目錄和邏輯工作區使用不同的選項卡,以將功能A上的工作與功能B上的工作或錯誤C以及筆記分開。在Vim中管理分割

enter image description here

管理這種瘋狂的時候你從插件,如NERDTree,逃犯,Gundo和許多其他誰願意採取額外的分裂提供了很多附加分裂成爲一個問題。在這樣的助手分裂打開並關閉後,整個裝置的高度和寬度都會發生變形。我的意思是,一些窗口變小,有的成爲比他們最初較大(我必須手動調整自己的高度和寬度與CTRL+W >CTRL+W <和朋友。

通常它的速度更快做調整鼠標每分裂,但它甚至沒有接近Vim的方式

有時我甚至想交換一些分割或向右分割移動CTRL+W HJKL並不總是有幫助,因爲他們踢分裂太遠,再次扭曲大小旋轉CTRL+W r只適用於簡單案例

如何管理大量緩衝區,分割和製表符?

編輯:我看到有投票結束。這個問題對你來說可能看起來太籠統了,所以有一個更具體的問題:處理大量緩衝和分裂的良好工作流程是什麼? (其中一個答案是在需要更多空間時促進拆分以分離製表符)

+0

'Ctrl' +''w' ='(或'^ W =')將使或多或少均等地分配分裂。你能否讓你的問題更具體 - 你究竟在尋找什麼? – guessimtoolate

+0

我正在尋找一種方法,在每次打開/關閉一個小分組時都不會弄亂我的分割大小,或者根據緩衝區大小輕鬆調整大小。另一件事可能是一個插件或任何使重新排序更容易的事情。 – imslavko

回答

13

只有當我真的需要並排存在兩個文件時(因爲一個用作參考,通常是HTML-CSS),我才使用splits。否則,我只使用在單個窗口中加載的常規緩衝區。我也不使用nerdtree或任何會佔用太多空間的東西。

我儘量避免在文件之間導航:標籤是一個更好的方法。

我的vim幾乎總是一個很大的灰色矩形。

編輯

多的「東西」的工作一直是處理困難的問題。當我們試圖在同一時間和同一空間中處理許多這些「事物」時更是如此。這是一個很難的問題,因爲我們無法同時處理幾件事情:我們的頭腦並沒有爲此而優化。這就是爲什麼記憶遊戲並不像看起來那麼容易,爲什麼我們不記得在Powerpoint幻燈片充滿了列表和圖表之後記不住狗屎,以及爲什麼人們一方面用手機和另一方面的驅動輪死亡。

因爲我們不能在同一時間4個緩衝工作,分割窗口應保留到實際的工作在一個窗口中完成,用於參考(文檔,HTML文檔時,其他窗口的情況下做CSS ......)或反饋(linting,計算結果...)。在這樣的設置中,身體切換到另一個窗口的唯一部分就是我們的眼睛:我們不需要鍵盤快捷鍵或鼠標。

但是,我們喜歡讓我們的生活比必要的更復雜。我們喜歡把自己想象成多任務的神,所以我們分開了窗戶,我們把窗戶放在窗戶的窗戶中,我們必須找到管理所有這些混亂的脆弱黑客。由於各種原因,鍵盤快捷鍵不是有效的解決方案,我們討厭鼠標,對嗎?

無論如何,分割窗口的基本問題與常規緩衝區和標籤相同:爲了在緩衝區#3上工作,我們必須切換到緩衝區#3。無論是緩衝區#3是隱藏的,顯示在右上窗口還是在另一個選項卡中都是不相關的,我們必須按幾個鍵才能看到它。當目標緩衝區被隱藏時,我們做:b3來顯示它。當它在右上角的窗口中時,我們使用<C-w>…映射,默認或自定義。當它在另一個標籤中時,我們傾向於做gt,直到我們找到它(或者:sb3這更聰明)。無論我們選擇何種空間設置,我們仍然需要切換到目標。

一個只涉及你所使用的佈局類型的問題是,你必須思考和移動兩個維度。從左下方的窗口跳到右上方的窗口並不是真正的線性(除非您使用<C-w>w),並且需要更多的思考和打字,而不是簡單地查看該窗口。

另一個問題是工作空間是如何分割的,以及它對可以處理的緩衝區數量和窗口大小的影響。

總而言之,我的觀點是,處理多個緩衝區的最佳方法是單獨保留窗口和選項卡並找到一個更精簡的工作流程。

常規緩衝區也很棘手:你可以有一個1,2,5,7列表的方式很奇怪。但我相信緩衝切換(與窗口切換相反)基本上更直觀,更堅實。

:bn "show next buffer in the list 
:bp "show previous buffer in the list 
:b3 "show buffer #3 
:bf "show first buffer in the list 
:bl "show last buffer in the list 
:b <tab> "select buffer from a menu 
:b fo<Tab> "select buffer from a menu 
:b foo "show buffer named foo 

下映射使開關緩衝一塊蛋糕,但你也可以嘗試使用一些緩衝切換插件可用。

nnoremap gb :buffers<CR>:b<Space> 

雖然我的首選導航方法不是基於緩衝區的。現在,我發現它實際上更容易忘記項目的文件結構全部在一起並使用標籤。當我瀏覽時,我會轉向特定的類或特定的方法或特定的數組或任何其他內容。我的工作區只有一個窗口,顯示15個或20個緩衝區中的1個,並且我沒有NERDTree,沒有選項卡,沒有MiniBufExplorer,沒有TagList ...因爲切換到另一個緩衝區至少需要幾次按鍵,我沒有看到任何有效的原因用於切割和切割我的工作區。因爲我沒有把自己置於一個過於複雜的gyzmos的角落,所以我不必浪費我寶貴的時間尋找變通辦法解決方法,我可以放心地嘲笑最新的一組圖像宏。等等,我的意思是「工作」。

+0

這是一個很好的方向:工作流與分裂,但有很多標記。感謝這個答案。 – imslavko

+0

你對管理緩衝區有什麼意見嗎? ':ls'總是充滿緩衝區,並且需要時間直觀地查找所需緩衝區的數量。 'CTRL + 6'幫助但仍然。 – imslavko

+0

請參閱我的編輯。 – romainl

3

嘗試ctrl-w <N> >將大小一次更改爲N。如果你還沒有這樣做。

我自己更喜歡用標籤中的東西代替。和ctrl-w shift-t將分割移動到單獨的選項卡。

+0

我知道ctrl-w n>,但猜測或計算你需要多少次輪換才能擴大分割「一點點」感覺很愚蠢。 'ctrl-w shift-t' - 看起來很棒!謝謝! – imslavko

+0

我傾向於改變10,然後看到,也許改變另一個10或20,這通常是關於它。 – aragaer

6

分裂或窗戶,因爲他們通常被稱爲,脆弱

  • 當您刪除緩衝區時,其他緩衝區不受影響。
  • 當您關閉標籤頁時,其他標籤不受影響。
  • 當你關閉一個窗口時,你的整個窗口布局會以不可預知的方式變得混亂,需要一遍又一遍的繁瑣的重新佈置(這在Vim中很難做到,很不方便)。

因此,我會建議針對Vim中以windows爲中心的工作流。

我的建議:保持當前標籤頁中的窗口數量較小。以專注的方式使用Windows,並僅用於某些用途(查看文件的不同部分,區分文件,標題/實現文件等)。使用工作區的標籤頁。獲得舒適的瀏覽緩衝區的許多其他手段:緩衝區列表,:find:edit家庭,模糊的取景器插件,文件探險等

+0

感謝您的回答!我完全錯過了學習緩衝區vs windows vs選項卡。現在我知道,這種拆分只適用於某些使用情況,並不適合手動管理超過3個緩衝區。 – imslavko

0

如何使用更GNU screentmux? vim中的窗口對你來說無能爲力,只是使用更多的控制檯。

在屏幕上,您可以保存會話,以及與:mks vim。

而在vim rebind ctrl+w,h/j/k/l只是ctrl+h/j/k/l!還有垂直最大化,水平最大化和使所有窗口尺寸均等的捷徑。爲了調整大小,我也有快捷方式,但大多數情況下我都是在全屏/調整大小的情況下工作,窗口管理不是vim的最佳功能,沒有鼠標就更糟糕。從我.vimrc

摘錄:

" WINDOW MANAGEMENT SETTINGS 

"moving from window to window 
nnoremap <C-h> <C-w>h 
nnoremap <C-j> <C-w>j 
nnoremap <C-k> <C-w>k 
nnoremap <C-l> <C-w>l 

"open new blank file 
nnoremap o<C-h> :lefta vsp new<cr> 
nnoremap o<C-j> :bel sp new<cr> 
nnoremap o<C-k> :abo sp new<cr> 
nnoremap o<C-l> :rightb vsp new<cr> 

"move window 
nnoremap <Leader><C-h> <C-W>H 
nnoremap <Leader><C-j> <C-W>J 
nnoremap <Leader><C-k> <C-W>K 
nnoremap <Leader><C-l> <C-W>L 

"maximise horizontally 
map <Leader>= <C-w><Bar> 

"maximise vertically 
map <Leader>- <C-w>_ 

"make all windows equally sized 
map <Leader><Leader> <C-w>= 

"change windowsizes in visual mode 
"horizontally - always three chars else it takes ages 
vnoremap - 3<C-w>< 
vnoremap = 3<C-w>> 

"vertically - always three chars else it takes ages 
vnoremap _ 3<C-w>- 
vnoremap + 3<C-w>+ 

"moving from window to window in visual mode 
"that way you can move from window to window and resize with -,=,_,+ directly as needed 
vnoremap <C-h> <ESC><C-w>hv 
vnoremap <C-j> <ESC><C-w>jv 
vnoremap <C-k> <ESC><C-w>kv 
vnoremap <C-l> <ESC><C-w>lv 

對於NERDtree我展示窗口,然後再關閉它。由於一些與它竊聽,我打開並自動調整到一個固定的寬度:

nnoremap <Leader><CR> :NERDTreeFind<CR>999<C-w><40<C-w>>010l 
+0

tmux中的split如何幫助我管理Vim中的分裂?我希望這個建議不是在tmux split中運行大量的vim實例? – imslavko

+0

@imslavko帖子稍有更新。 – sjas

+0

你發佈了許多映射到諸如在窗口之間移動或打開新窗口等非常標準的事情,但它沒有解決最初的可能性:當你有太多不同大小的分割時,它們變得很難管理它們。 – imslavko