Tương đương gần nhất ("gần nhất", không phải "chính xác") với ST2's Ctrl+ Plà một plugin được gọi là, hãy sẵn sàng… CtrlP . Có các plugin tương tự khác như Command-T hoặc FuzzyFinder .
Tôi sử dụng CtrlP và tôi thích nó nhưng tôi hết lòng ủng hộ quyết định của bạn để sử dụng "plugin-free". Nó không phải là cách dễ dàng nhất để đi nhưng nó sẽ mang lại hiệu quả về lâu dài.
Mở tệp
Cách cơ bản nhất để mở một tệp là :e /path/to/filename
. Rất may, bạn nhận được hoàn thành tab và ký tự đại diện: cổ điển *
và đặc biệt,**
, viết tắt của "bất kỳ thư mục con nào".
Kết hợp tất cả những điều đó, bạn có thể làm:
:e **/*foo<Tab>
để chọn từ tất cả các tệp có foo
tên của chúng trong thư mục làm việc hoặc:
:e **/*foo/*bar<Tab>
để chọn từ tất cả các tệp có bar
tên của chúng trong bất kỳ thư mục con nào chứafoo
tên của nó, ở bất kỳ đâu trong thư mục làm việc.
Tất nhiên, đó là công trình phục vụ :tabe[dit]
, :sp[lit]
và:vs[plit]
, quá.
Tuy nhiên, các lệnh đó chỉ giới hạn trong một tệp. Sử dụng :next
để mở nhiều tệp:
:next **/*.js
và hãy nhìn vào :help arglist
.
Nhảy giữa các bộ đệm
:b[uffer]
là lệnh chuyển đổi bộ đệm cơ bản:
:b4 " switch to buffer number 4
:bn " switch to next buffer in the buffer list
:bp " switch to previous buffer in the buffer list
:bf " switch to first buffer in the buffer list
:bl " switch to last buffer in the buffer list
:b foo<Tab> " switch by buffer name with tab-completion
:b# " switch to the alternate file
Lưu ý rằng nhiều lệnh trong số này và họ hàng của chúng chấp nhận một số lượng.
Các :ls
lệnh show bạn một danh sách các bộ đệm nạp. Tuy nhiên, nó hơi "đặc biệt": các bộ đệm được gán một số khi chúng được tạo để bạn có thể có một danh sách giống như 1 2 5
nếu bạn xóa bộ đệm. Điều này hơi khó xử, vâng, và điều đó làm cho việc chuyển sang một bộ đệm theo số của nó trở nên quá rắc rối. Ưu tiên chuyển đổi theo một phần tên :b foo<Tab>
hoặc đi xe đạp :bn :bp
,.
Dù sao, đây là một ánh xạ thú vị liệt kê tất cả các bộ đệm đã tải và điền lời nhắc cho bạn, đợi bạn nhập số bộ đệm và nhấn <enter>
:
nnoremap gb :ls<CR>:b<Space>
Với ánh xạ này, việc chuyển sang bộ đệm khác đơn giản như sau:
gb
(quickly scanning the list)
3<CR>
hoặc là:
gb
(quickly scanning the list)
foo<tab><CR>
Ý tưởng đến từ hình ảnh này được lấy từ bộ sưu tập đồ họa thông tin Vim của Bairui :

Vim cũng có <C-^>
(hoặc <C-6>
trên một số bàn phím) - chế độ bình thường tương đương :b#
- để chuyển giữa bộ đệm hiện tại và bộ đệm trước đó. Sử dụng nó nếu bạn thường xuyên luân phiên giữa hai bộ đệm.
Đọc tất cả về bộ đệm trong :help buffers
.
Đi đến khai báo
Trong một tệp, bạn có thể sử dụng gd
hoặc gD
.
Trong một dự án, tính năng "thẻ" của Vim là bạn của bạn nhưng bạn sẽ cần một trình lập chỉ mục mã bên ngoài như ctags hoặc cscope. Các lệnh cơ bản nhất là :tag foo
và <C-]>
với con trỏ trên tên phương thức. Cả hai công cụ đều được tích hợp tốt vào Vim: see :help tags
, :help ctags
and :help cscope
.
Đối với những gì nó đáng giá, tôi sử dụng điều hướng thẻ rộng rãi để di chuyển trong một dự án ( chủ yếu là sử dụng CtrlP :CtrlPTag
và :CtrlPBufTag
các lệnh, nhưng cả những lệnh buit-in) và phương pháp chuyển đổi bộ đệm "chung chung" yêu thích của tôi là theo tên.
Triển khai cấu hình của bạn
Rất nhiều người dùng Vim đặt cấu hình của họ dưới quyền kiểm soát phiên bản, điều này làm cho việc cài đặt cấu hình của riêng bạn trên một máy mới rất nhanh chóng và dễ dàng. Hãy suy nghĩ về nó.
BIÊN TẬP
Vài tháng trước, tôi phải làm việc trên một chiếc máy từ xa với Vim lỗi thời. Lẽ ra, tôi đã có thể cài đặt một Vim phù hợp và sao chép cấu hình yêu thích của riêng mình nhưng lần này tôi quyết định đi du lịch nhẹ để "mài giũa". Tôi nhanh chóng xây dựng một bản tối giản .vimrc
và xem lại một vài tính năng gốc bị lãng quên. Sau buổi biểu diễn đó, tôi quyết định CtrlP là không cần thiết và loại bỏ nó: các tính năng gốc và ánh xạ tùy chỉnh không hấp dẫn bằng nhưng chúng hoàn thành công việc mà không cần phụ thuộc nhiều.
Tung hứng với các tệp
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:find
là một lệnh thực sự tuyệt vời ngay khi bạn set path
chính xác. Với cài đặt của tôi, ,ffoo<Tab>
sẽ tìm thấy tất cả các tệp chứa foo
trong thư mục hiện tại, một cách đệ quy. Nó nhanh chóng, trực quan và nhẹ. Tất nhiên, tôi được hưởng lợi từ việc hoàn thành và ký tự đại diện giống như với :edit
và bạn bè.
Để làm cho quá trình nhanh hơn nữa, các ánh xạ sau cho phép tôi bỏ qua toàn bộ các phần của dự án và tìm các tệp một cách đệ quy trong thư mục của tệp hiện tại:
nnoremap <leader>F :find <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>S :sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>V :vert sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>T :tabfind <C-R>=expand('%:h').'/*'<CR>
CẢNH BÁO! Các path
tùy chọn là vô cùng mạnh mẽ. Giá trị trên— .,**
—có hiệu quả với tôi nhưng các ngôn ngữ tôi sử dụng không có thư viện chuẩn. Các hợp giá trị phụ thuộc hoàn toàn vào bạn nhu cầu.
Tung hứng với bộ đệm
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
Các ánh xạ ở trên liệt kê các bộ đệm có sẵn trong "menu đại diện" với lời nhắc trống, cho phép tôi điều hướng menu bằng <Tab>
hoặc nhập một vài ký tự và <Tab>
lặp lại để thu hẹp danh sách. Giống như với các ánh xạ tệp ở trên, quá trình này diễn ra nhanh chóng và hầu như không có rắc rối.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Những ánh xạ đó tự nói lên.
Tung hứng với các thẻ
nnoremap <leader>j :tjump /
Ánh xạ này sử dụng tìm kiếm regex thay vì tìm kiếm toàn bộ từ, vì vậy tôi có thể làm ,jba<Tab>
để tìm thẻ foobarbaz()
.
Đúng vậy, kết hợp mờ gây nghiện nhưng bạn có thể làm việc hiệu quả mà không có nó. Và với một phần nhỏ chi phí.
CHỈNH SỬA THÊM
Một số mẹo / thủ thuật bổ sung…
Tùy chọn Wildmenu
"Wildmenu", được kích hoạt set wildmenu
, giúp điều hướng tệp / bộ đệm dễ dàng hơn. Hành vi của nó được điều chỉnh bởi một loạt các tùy chọn đáng để điều tra:
wildmode
cho Vim biết bạn muốn "wildmenu" hoạt động như thế nào:
set wildmode=list:full
wildignore
lọc ra tất cả các mấu chốt:
set wildignore=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=tags
set wildignore+=*.tar.*
wildignorecase
cho phép bạn tìm kiếm foo
và tìm thấy Foo
:
set wildignorecase
Dấu tệp
augroup VIMRC
autocmd!
autocmd BufLeave *.css normal! mC
autocmd BufLeave *.html normal! mH
autocmd BufLeave *.js normal! mJ
autocmd BufLeave *.php normal! mP
augroup END
Gần đây tôi đã tìm thấy viên ngọc này trong của người khác ~/.vimrc
. Nó tạo ra một dấu tệp ở vị trí chính xác của con trỏ bất cứ khi nào bạn rời khỏi bộ đệm để dù bạn ở đâu, sẽ 'J
chuyển đến bộ đệm JavaScript mới nhất mà bạn đã chỉnh sửa. Tuyệt vời.