2013-08-16 33 views
8

Làm việc trên một dự án cỡ lớn và trung bình, tôi thường kết thúc với nhiều phần chia nhỏ trên màn hình cũng như một số tab được mở với 5-6 phần tách trong mỗi. Thông thường, tôi sử dụng các tab khác nhau cho các thư mục khác nhau và không gian làm việc hợp lý để tách công việc trên đối tượng địa lý A khỏi công việc trên đối tượng địa lý B hoặc lỗi C và ghi chú của tôi.Phân chia quản lý trong Vim

enter image description here

Quản lý điên rồ này trở thành một vấn đề khi bạn có rất nhiều chia bổ sung từ các plugin như NERDTree, Fugitive, Gundo và nhiều người khác muốn lấy chia thêm. Sau khi phân chia helper như vậy mở và đóng toàn bộ thiết lập có một sự thay đổi của sự biến dạng về chiều cao và chiều rộng. Ý tôi là, một số cửa sổ trở nên nhỏ, một số cửa sổ trở nên lớn hơn, một số trở nên lớn hơn ban đầu (và tôi phải điều chỉnh chiều cao và chiều rộng của chúng bằng CTRL+W >CTRL+W < và bạn bè.

Thông thường sẽ nhanh hơn để thay đổi kích thước từng phần bằng chuột nhưng thậm chí không gần đường Vim

Thỉnh thoảng tôi thậm chí muốn hoán đổi một số phần tách hoặc di chuyển sang chia nhỏ sang bên phải CTRL+W HJKL không phải lúc nào cũng giúp đỡ khi chúng tách ra quá xa và làm méo mó các kích thước một lần nữa.

Bạn quản lý nhiều bộ đệm, chia tách và tab như thế nào?

Chỉnh sửa: Tôi thấy có phiếu bầu để đóng. Câu hỏi có vẻ quá chung chung với bạn, vì vậy có một câu hỏi cụ thể hơn: quy trình làm việc tốt với nhiều bộ đệm và phân tách là gì? (Một trong những câu trả lời là khuyến khích chia tách các tab riêng biệt khi cần nhiều không gian hơn)

+0

'Ctrl' + 'w'' = '(hoặc'^w = ') sẽ làm cho nhiều hay ít phân phối bình đẳng chia tách. Bạn có thể làm cho câu hỏi của bạn cụ thể hơn - bạn tìm kiếm chính xác điều gì? – guessimtoolate

+0

Tôi đang tìm kiếm một cách để không làm hỏng kích thước của phân chia của tôi mỗi khi một số chia nhỏ mở/đóng hoặc một cách dễ dàng để thay đổi kích thước chúng theo kích thước của bộ đệm. Một thứ khác có thể là một plugin hoặc bất kỳ thứ gì để làm cho việc chia nhỏ lại dễ dàng hơn. – imslavko

Trả lời

13

Tôi chỉ sử dụng phân tách khi tôi thực sự cần có hai tệp cạnh nhau (vì một tệp được sử dụng làm tham chiếu, thường là HTML - CSS chẳng hạn). Nếu không, tôi chỉ sử dụng bộ đệm thông thường được tải trong một cửa sổ duy nhất. Tôi cũng không sử dụng nerdtree hoặc bất cứ thứ gì chiếm quá nhiều không gian.

Tôi cố gắng tránh điều hướng giữa các tệp: thẻ là cách tốt hơn nhiều.

vim của tôi luôn là một hình chữ nhật lớn màu xám.

EDIT

Làm việc với nhiều "điều" luôn luôn là một vấn đề khó khăn để xử lý. Hơn thế nữa khi chúng ta cố gắng đối phó với nhiều "thứ" đó cùng một lúc và trong cùng một không gian. Đó là một vấn đề khó khăn bởi vì chúng ta không có khả năng đối phó với hơn một vài điều đồng thời: tâm trí của chúng ta không được tối ưu hóa cho điều đó. Đây là lý do tại sao trò chơi Memory không dễ dàng như vậy, tại sao chúng ta không thể nhớ shit sau khi trình chiếu Powerpoint đầy đủ các danh sách và đồ thị và tại sao mọi người chết bằng điện thoại trong một tay và bánh lái của họ.

Vì chúng tôi không thể hoạt động trên 4 bộ đệm cùng một lúc, nên phân chia cửa sổ thành các trường hợp thực hiện công việc trong một cửa sổ và cửa sổ khác được sử dụng để tham khảo (tài liệu, tài liệu HTML thực hiện CSS ...) hoặc phản hồi (linting, kết quả tính toán ...).Trong một thiết lập như vậy, phần duy nhất của cơ thể chuyển sang cửa sổ khác là mắt của chúng tôi: chúng tôi không cần phím tắt hoặc chuột.

Nhưng chúng tôi muốn làm cho cuộc sống của mình phức tạp hơn mức cần thiết. Chúng tôi thích nghĩ mình là những vị thần đa nhiệm nên chúng tôi chia cửa sổ, chúng tôi đặt các cửa sổ trong cửa sổ trong cửa sổ và chúng tôi phải tìm những hacks mỏng manh để quản lý tất cả những mớ hỗn độn đó. Phím tắt không phải là giải pháp hợp lệ vì nhiều lý do khác nhau và chúng tôi ghét chuột phải không?

Dù sao, vấn đề cơ bản với cửa sổ chia cũng giống như với bộ đệm và tab thông thường: để làm việc trên bộ đệm số 3, chúng ta phải chuyển sang bộ đệm số 3. Cho dù bộ đệm # 3 được ẩn, hiển thị trong cửa sổ trên cùng bên phải hoặc trong một tab khác là không liên quan, chúng ta phải nhấn một vài phím để có được nó. Khi bộ đệm đích được ẩn, chúng tôi làm :b3 để hiển thị nó. Khi nó ở trong cửa sổ trên cùng bên phải, chúng tôi sẽ phát với ánh xạ <C-w>…, mặc định hoặc tùy chỉnh. Khi nó ở trong một tab khác, chúng tôi có xu hướng làm gt cho đến khi chúng tôi tìm thấy nó (hoặc :sb3 thông minh hơn rất nhiều). Dù thiết lập không gian chúng ta chọn, chúng ta vẫn phải chuyển sang mục tiêu.

Sự cố chỉ liên quan đến loại bố cục mà bạn đang sử dụng là bạn phải suy nghĩ và di chuyển theo hai chiều. Nhảy từ cửa sổ phía dưới bên trái đến cửa sổ trên bên phải là không thực sự tuyến tính (trừ khi bạn sử dụng <C-w>w) và đòi hỏi nhiều suy nghĩ và đánh máy hơn là chỉ cần nhìn vào cửa sổ đó.

Một vấn đề khác là cách không gian làm việc được chia và hậu quả của nó đối với số lượng bộ đệm bạn có thể xử lý và kích thước cửa sổ của chúng.

Tất cả trong tất cả, ý kiến ​​của tôi là cách tốt nhất để giải quyết nhiều bộ đệm là để các cửa sổ và tab một mình và tìm một luồng công việc gọn gàng hơn.

Bộ đệm thông thường cũng có thể phức tạp: cách bạn có thể có danh sách 1,2,5,7 là lạ theo cách riêng của nó. Nhưng tôi tin rằng việc chuyển đổi bộ đệm (trái ngược với chuyển đổi cửa sổ) về cơ bản là trực quan và chắc chắn hơn.

: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 

Ánh xạ sau làm cho việc chuyển đổi bộ đệm thành một miếng bánh, nhưng bạn cũng có thể thử nhiều bộ đệm chuyển đổi bộ đệm.

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

Phương pháp điều hướng ưa thích của tôi không phải là dựa trên bộ đệm. Ngày nay, tôi thấy dễ dàng hơn khi thực sự quên cấu trúc tệp của dự án cùng nhau và sử dụng thẻ. Khi tôi di chuyển xung quanh, tôi di chuyển đến một lớp cụ thể hoặc một phương pháp cụ thể hoặc một mảng cụ thể hoặc bất cứ điều gì. Không gian làm việc của tôi chỉ là một cửa sổ, hiển thị 1 trong số 15 hoặc 20 bộ đệm và tôi không có NERDTree, không có tab, không có MiniBufExplorer, không có TagList… vì việc chuyển sang bộ đệm khác yêu cầu ít nhất một vài lần nhấn phím. để cắt và dicing không gian làm việc của tôi.

Bởi vì tôi không đặt mình vào một góc với những bộ phim quá phức tạp, tôi không phải lãng phí thời gian quý báu của mình để tìm cách giải quyết và tôi có thể cười một cách an toàn trước loạt macro hình ảnh mới nhất. Chờ đã, ý tôi là "làm việc".

+0

Đó là một hướng tuyệt vời: quy trình làm việc với các phần tách ra, nhưng có nhiều dấu. Cảm ơn câu trả lời này. – imslavko

+0

Bạn có nhận xét nào về quản lý bộ đệm không? ': ls' luôn đầy bộ đệm và cần có thời gian để tìm số bộ đệm bạn cần. 'CTRL + 6' giúp nhưng vẫn còn. – imslavko

+0

Vui lòng xem chỉnh sửa của tôi. – romainl

3

Hãy thử ctrl-w <N> > để thay đổi kích cỡ bằng N cùng một lúc. Trong trường hợp bạn chưa làm điều đó.

Bản thân tôi thích có nội dung trong các tab thay thế. Và ctrl-w shift-t để chuyển một phần tách sang một tab riêng biệt.

+0

Tôi biết về ctrl-w n>, nhưng nó cảm thấy ngớ ngẩn để đoán hoặc đếm có bao nhiêu ca bạn cần để mở rộng một phân chia "một chút". 'ctrl-w shift-t' - trông giống như một thứ tuyệt vời! Cảm ơn bạn! – imslavko

+0

Tôi có xu hướng thay đổi 10, sau đó xem và có thể thay đổi thêm 10 hoặc 20 và thường là về nó. – aragaer

6

Chia tách hoặc cửa sổ, như chúng thường được gọi là mong manh.

  • Khi bạn xóa bộ đệm, các bộ đệm khác không bị ảnh hưởng.
  • Khi bạn đóng trang tab, các tab khác sẽ không bị ảnh hưởng.
  • Khi bạn đóng cửa sổ, toàn bộ bố cục cửa sổ của bạn sẽ bị rối tung theo những cách không thể đoán trước, yêu cầu sắp xếp tẻ nhạt (khó khăn và bất tiện trong Vim), lặp đi lặp lại.

Vì vậy, tôi khuyên bạn nên chống lại luồng công việc tập trung xung quanh cửa sổ trong Vim.

Lời khuyên của tôi: Giữ số lượng cửa sổ trong trang tab hiện tại nhỏ. Sử dụng các cửa sổ một cách tập trung và chỉ cho một số sử dụng nhất định (xem các phần khác nhau của một tệp, các tệp khác, tệp đầu trang/triển khai, ...). Sử dụng các trang tab cho không gian làm việc. Nhận thấy thoải mái với nhiều phương tiện khác của điều hướng buffers: danh sách đệm, :find:edit gia đình, bổ sung công cụ tìm mờ, nhà thám hiểm tập tin, vv

+0

Cảm ơn câu trả lời này! Tôi hoàn toàn bỏ lỡ một cái gì đó học tập đệm vs cửa sổ vs tab. Bây giờ tôi biết, chia tách chỉ tốt cho các trường hợp sử dụng nhất định và không phù hợp nhất để quản lý thủ công hơn 3 bộ đệm. – imslavko

0

Làm thế nào về việc sử dụng nhiều hơn GNU screen hoặc tmux? Chỉ cần cửa sổ trong vim sẽ không giúp bạn nhiều, tương tự cho chỉ cần sử dụng bàn giao tiếp nhiều hơn nữa.

Với màn hình, bạn có thể lưu phiên, cũng như trong vim với :mks.

Và ngược lại vim ctrl+w,h/j/k/l chỉ ctrl+h/j/k/l! Ngoài ra các phím tắt để tối đa hóa theo chiều dọc, tối đa hóa theo chiều ngang và làm cho tất cả các cửa sổ đều có kích thước trợ giúp. Để thay đổi kích thước, tôi cũng có các phím tắt, nhưng chủ yếu là tôi làm việc với fullsizing/resizing tất cả, quản lý cửa sổ không phải là tính năng tốt nhất của vim, mà không có một con chuột nó thậm chí còn tồi tệ hơn.

Trích từ .vimrc tôi:

" 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 

Đối NERDtree tôi hiển thị các cửa sổ và đóng nó lại. Kể từ khi một cái gì đó đang nghe trộm với nó, tôi mở nó và thay đổi kích thước chiều rộng cố định tự động:

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

Cách chia nhỏ trong tmux giúp tôi quản lý các phần chia nhỏ trong Vim? Tôi hy vọng đề nghị không phải là để chạy rất nhiều trường hợp vim trong tmux chia tách? – imslavko

+0

Bài viết @imslavko được cập nhật một chút. – sjas

+0

Bạn đã đăng rất nhiều ánh xạ tới những thứ khá chuẩn như di chuyển giữa các cửa sổ hoặc mở cửa sổ mới, nó không giải quyết được khả năng ban đầu mặc dù: khi bạn có quá nhiều kích thước khác nhau, việc quản lý chúng trở nên khó khăn. – imslavko

Các vấn đề liên quan