Bạn thích chuyển đổi giữa các vùng đệm trong Vim như thế nào?


92

Tôi đã thử MiniBufExplorer , nhưng tôi thường kết thúc với một số cửa sổ hiển thị nó hoặc đóng nó hoàn toàn. Những gì tôi muốn là một cái gì đó giống như LustyJuggler với tìm kiếm gia tăng, cách tôi chuyển đổi giữa các bộ đệm trong Emacs. Chắc chắn là có một kịch bản như thế này?

Câu trả lời:


23

Tôi đã sử dụng plugin vim Command-T của Wincent Colaiuta được vài tháng rồi. Wincent đã viết những phần cần phải nhanh bằng C, và tôi phải nói rằng đúng như vậy! Và, tôi nghĩ logic khớp mẫu tệp của nó thậm chí còn tốt hơn Command-T của Textmate. Kiểm tra video truyền hình .

Trình cắm Command-T cho VIM cung cấp một cơ chế cực kỳ nhanh chóng, trực quan để mở tệp với một số lần nhấn phím tối thiểu. Nó được đặt tên là "Command-T" vì nó được lấy cảm hứng từ cửa sổ "Go to File" được liên kết với Command-T trong TextMate.

Các tệp được chọn bằng cách nhập các ký tự xuất hiện trong đường dẫn của chúng và được sắp xếp theo một thuật toán biết rằng các ký tự xuất hiện ở các vị trí nhất định (ví dụ: ngay sau dấu phân cách đường dẫn) sẽ có trọng lượng hơn.

Chuyển đổi bộ đệm dễ dàng hơn chứa nhiều mẹo hữu ích. Tôi đã điều chỉnh phần sau cho phù hợp với .vimrc của tôi, tính năng này tự động hoàn thành tên bộ đệm, ánh xạ các lệnh chuyển đổi bộ đệm hữu ích nhất tới phím <Leader> và hàng chính bên trái của tôi và hiển thị số bộ đệm hiện tại trong dòng trạng thái :

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

Tôi cũng sử dụng MiniBufExplorer , cung cấp một danh sách nhỏ gọn của từng bộ đệm được liệt kê trong phần trên cùng được chia theo chiều ngang của riêng nó.


73

Tôi đã từng sử dụng kết hợp các tab và nhiều phiên bản gvim, giữ các nhóm tệp liên quan dưới dạng tab trong mỗi phiên bản. Miễn là tôi không kết thúc với quá nhiều tab trong một trường hợp, thanh tab hiển thị nhanh cho bạn tên của từng tệp bạn đang chỉnh sửa.

Sau đó, tôi đọc một bài đăng của Jamis Buck về cách anh ấy chuyển từ TextMate trở lại vim và học được một số thủ thuật tuyệt vời:

  • Ctrl-w s và Ctrl-w v để tách cửa sổ hiện tại
  • Ctrl-6 để chuyển đổi qua lại giữa hai vùng đệm trong cùng một cửa sổ.
  • dimfinder.vim tuyệt vời cung cấp cho bạn tìm kiếm tự động hoàn thành các tệp trong thư mục hiện tại của bạn hoặc trong bộ đệm bạn hiện đang mở
  • Riêng Jamis' fuzzy_file_finderfuzzyfinder_textmate , mà hơi sửa đổi cách làm việc fuzzyfinder cư xử giống như một tính năng tương tự trong TextMate (như xa như tôi có thể nói, sự khác biệt là nó phù hợp với bất cứ nơi nào trong tên tập tin thay vì chỉ ngay từ đầu). Xem video này để thấy nó hoạt động.

Bây giờ tôi chỉ có một phiên bản gvim, được tối đa hóa và chia nó thành nhiều cửa sổ để tôi có thể xem nhiều tệp cùng một lúc. Tôi đã ràng buộc Ctrl-F với mờfinder_textmate, vì vậy bây giờ nếu tôi nhập (giả sử) Ctrl-F, mod/usobnó sẽ mở ra app / models / user_observer.rb. Tôi gần như không bao giờ bận tâm đến các tab nữa.

Cập nhật 2010/08/07

Mặc dù mờfinder_textmate vẫn tuyệt vời, như Casey chỉ ra trong các nhận xét, nó không còn được duy trì nữa. Ngoài ra, nó (và / hoặc dimfinder.vim) hơi chậm và không ổn định khi làm việc với các dự án lớn (nhiều thư mục hoặc tệp), vì vậy tôi đang tìm một giải pháp thay thế.

May mắn thay, có vẻ là một lựa chọn rất tốt đẹp trong các hình thức Wincent Colaiuta 's Command-T Plugin . Điều này có hành vi rất giống (nếu không phải là tốt hơn một chút) với dimfinder_textmate, nhưng nhanh hơn đáng kể; nó cũng có các tính năng thú vị như có thể mở tệp được tìm thấy theo dạng tách hoặc tách dọc. Cảm ơn (và ủng hộ!) David Rivers đã chỉ đến nó.


Vâng, máy tìm kiếm mờ rất phù hợp với những gì tôi muốn.
Alexey Romanov

Jamis 'dimfinder_textmate hoàn thành vim. Nó thực sự nên trở thành một tính năng cốt lõi!
csexton

Có vẻ như Jami đã ngừng làm dự án này. Có thể tác giả gốc sẽ kéo vào các tính năng này? weblog.jamisbuck.org/2009/1/28/…
cmcginty

Sam, cảm ơn vì những đạo cụ mà bạn đã tặng cho tôi (vào ngày sinh nhật của tôi!): D
David Rivers

14
Hãy thử plugin ctrlp vim ( kien.github.com/ctrlp.vim ) nó triển khai công cụ mờ nhưng với nhiều tính năng hữu ích hơn :)
Philip

33

Tôi sử dụng những điều cơ bản - ' :ls' + ' :bn' / ' :bp' + ' :b <part-of-name>'


8
:-) Tôi chưa bao giờ nghĩ rằng mình sẽ thấy "đơn giản" và "': ls' + ': bn' / ': bp' + ': b <part-of-name>'" trong cùng một câu.
paxdiablo

16
Pax, tôi vẫn không thấy nó. :-)
csexton

Điều này, cộng với :map <c-n> :bn<cr>:map <c-p> :bp<cr>, vì C-nC-pnhanh chóng nhập và cho phép luân chuyển giữa các bộ đệm nếu bạn nhấn chúng liên tục. (Tôi chưa bao giờ sử dụng chúng cho mục đích ban đầu của chúng.) Nó giống như việc di chuyển giữa các tab trình duyệt với C-PgUpC-PgDnhoặc bất kỳ phím tắt nào mà trình duyệt của bạn có.
Tobia

Ctrl + N là tiêu chuẩn cho 'New File' trong phần lớn các trình soạn thảo khác và Ctrl + P là lệnh dán, vì vậy đối với hầu hết mọi người, chúng sẽ thực sự khó hiểu. Vim-không bị ghép nối của Tim Pope cung cấp cho bạn [bbộ đệm trước và ]bbộ đệm tiếp theo. Cùng với vô số tính năng bổ sung khác sử dụng khái niệm ]cho tiếp theo và [cho trước đó.
icc97

31

Tôi thích "ctrl-w s" và "ctlr-w v" để chia nhỏ cửa sổ. Sau đó, tôi ánh xạ các phím di chuyển (h, j, k, l) với ctrl được giữ để di chuyển giữa các cửa sổ chia nhỏ:

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

Phải di chuyển bàn tay của tôi đến các phím mũi tên là khó chịu.

Tiếp theo, tôi thiết lập ctlr-tab để chuyển đổi giữa các bộ đệm trong cửa sổ hiện tại (giống như nhiều môi trường khác):

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

Những thứ này đã hoạt động khá hiệu quả đối với tôi trong vài năm qua mặc dù vim luôn có nhiều bí mật hơn bạn có thể biết.


3
Nhận xét "chuyển sang tệp thay thế" của bạn gây hiểu lầm vì Vim đã có tệp thay thế, đó là tệp trước đó bạn đã sử dụng và bạn có thể chuyển đổi tệp hiện tại (%) và tệp thay thế (#) dễ dàng bằng ctrl-6.
greywh

10
Ngoài ra, <Cw> với hjkl sẽ chuyển đổi cửa sổ - không cần phím mũi tên.
greywh

4
<CS-Tab> đang yêu cầu RSI. Tôi đã ánh xạ <SJ> để :bpvà <SK> để:bn
PUK

3
Remapping <SJ> có vẻ như là một lựa chọn kém trong chế độ bình thường, vì nó thường được sử dụng (để nối các dòng).
Michael Percy

18
nmap <Leader>bb :ls<CR>:buffer<Space>

và không ai đề cập đến plugin tốt đẹp ctrlp.vim . Sử dụng plugin này, bạn có thể tìm kiếm bộ đệm theo tên.


Tôi thích ánh xạ đó! Thông minh và linh hoạt.
ivan


5
imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>

1
Điều thú vị nhất với Vim là bạn có thể học được điều gì đó mỗi ngày!
Luc M

Câu hỏi đặt ra là khoảng đệm , không tab ... nhưng bạn có thể :tab sballđầu tiên, hoặc thay vì sử dụng :tabnbạn nên sử dụng:buffer
Pera

5

Gần đây tôi đã tối giản hơn.

Để chu kỳ bộ đệm tôi sử dụng ]b[btừ bộ đệm chưa được ghép nối: https://github.com/tpope/vim-unimpairs

Để chuyển thẳng đến một vùng đệm đang mở, chỉ cần sử dụng tính năng hoàn thành tab của Vim với :b. Một vài ký tự là đủ để truy cập bất kỳ vùng đệm đang mở nào với một hoặc hai tab.

Tương tự để mở bộ đệm, tôi sử dụng :evới các đường dẫn tương đối và hoàn thành tab.

Tôi cũng :lsthỉnh thoảng sử dụng để xem bộ đệm nào tôi đã mở (và để kiểm tra trạng thái đã sửa đổi của chúng).

Để loại bỏ một bộ đệm, tôi sử dụng :bwđể xóa bộ đệm. Tôi thường thực hiện chia tách tạm thời và thay đổi bộ đệm để bảo toàn bố cục của mình mặc dù vì :bwcũng đóng cửa sổ đang hoạt động.

Tất cả những thứ minibuf tôi đã thử cuối cùng chỉ làm tôi khó chịu và tôi không muốn một số thứ kết hợp thông minh mở các tệp ngẫu nhiên cho tôi. Nếu tôi thực sự cần duyệt tìm thứ gì đó, tôi sử dụng NERDtree ( :e .).

IDK, Gần đây tôi cũng đã bỏ Yankring (vì nó bị hỏng xp) và bắt đầu sử dụng thanh ghi, và gần đây tôi đã quyết định f/ tchuyển động là điều tuyệt vời nhất từ ​​trước đến nay ...


Đây là tất cả những lời khuyên tuyệt vời. Tôi đã ánh xạ <leader>lltới :ls. Ngoài ra nó thực sự hữu ích để đảm bảo rằng bạn có set wildmenutrong bạn .vimrcnhư sau đó bạn nhận được một menu nhỏ mà đi lên với tất cả các lựa chọn thay thế cho:b
icc97

2

Buffer Explorer xuất sắc , có thể trở thành một bộ nhớ cơ bắp mạnh mẽ đến mức tôi thấy mình ước mình có thể sử dụng nó trong các ứng dụng khác. Tôi thấy nó cực kỳ nhanh chóng khi chủ động chỉnh sửa nhiều hơn hai tệp.


2

Tôi đã dành khá nhiều thời gian để xây dựng .vimrc của mình để làm việc với dự án HTML :: Mason này Tôi đã tham gia bốn năm, vì vậy tôi có một sự kết hợp kỳ lạ giữa các tab và cửa sổ chia nhỏ. Để bạn thưởng thức:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>

2

Tôi sử dụng tselectbuffer . Nó thực sự nhanh chóng và không giống như bufexplorer không chiếm dung lượng trong cửa sổ của bạn. Nó cũng có tính năng tìm kiếm gia tăng. Tôi đã thử minibufexplorer và tôi thấy việc điều hướng trong bộ đệm hơi khó khăn.


Cảm ơn vì con trỏ, bây giờ tôi sử dụng cả hai. Giá trị mặc định cho BufExplorer là ,be, ,bs, ,bv, vì vậy tôi ánh xạ TSelectBuffer tới ,bb.
Brady Trainor

2

Để liệt kê và chuyển đổi giữa các bộ đệm tôi sử dụng:

nnoremap <Leader>l :ls<CR>:b<space>

Để chuyển đổi giữa các bộ đệm:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>

2

Tôi đã lập bản đồ <S-J><S-K>để :bp:bn, mặc dù tôi thừa nhận tôi không sử dụng nó như là số lượng file lớn hơn 10. Tôi đã sau đó ánh xạ <C-J><C-K>các tab trước đó và tiếp theo Gnome Terminal, và tôi thường chạy 4 trường hợp của vim cho mỗi 4 dự án khác nhau mà tôi đang thực hiện. Tôi vẫn thực sự mong muốn bộ đệm tiếp theo và bộ đệm trước đó sẽ đi vào lịch sử của bộ đệm mà tôi đã làm việc, chứ không phải thứ tự trong danh sách bộ đệm của anh ấy.


2

Tôi sử dụng tselectbuffer. Nó thực sự nhanh chóng và không giống như bufexplorer không chiếm dung lượng trong cửa sổ của bạn. Nó cũng có tính năng tìm kiếm gia tăng. Tôi đã thử minibufexplorer và tôi thấy việc điều hướng trong bộ đệm hơi khó khăn.


0

tôi sử dụng đơn giản: vsplit với ^ W + w / ^ W + r và: tabnew với tổ hợp phím Ctrl + Alt + PgUp / PgDown.


1
Tôi phải đồng ý với những gì Zathrus nói ở đây . Các tab trong Vim (hoặc Emacs với TabBar cho vấn đề đó) đơn giản là không hoạt động như trong các giao diện tab thông thường.
Alexey Romanov

0

Khi có một số bộ đệm mở trong một phiên Vim, có thể trở nên khó khăn để theo dõi các bộ đệm và số bộ đệm tương ứng của chúng. Nếu đúng như vậy, việc chuyển đổi sang một tệp khác có thể dễ dàng hơn bằng cách sử dụng một bản đồ đơn giản:

: nnoremap (F5): buffers (CR): đệm (Khoảng trắng)

vim.wikia.com

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.