2009-02-21 35 views
111

Tôi muốn mở một tập tin trong Vim như trong Eclipse sử dụng Ctrl +phím Shift +R, hoặc thông qua Ctrl +N tùy chọn tự động điền. Gọi một lối tắt bàn phím, nhập tên/mẫu của tệp và chọn từ tất cả các tên tệp phù hợp.Shortcut để mở tập tin trong Vim

Tôi biết mở nó thường thích:

:tabe <filepath> 
:new <filepath> 
:edit <filepath> 

Vấn đề ở đây là tôi phải chỉ định đường dẫn tập tin toàn trong những trường hợp này.

+0

Kem có được tính không? – Hai

+1

Lưu ý rằng các lệnh được đề xuất có hiệu ứng khác nhau ': tabe' sẽ mở tệp trong một tab mới,': new' sẽ phân chia theo chiều ngang cửa sổ và ': edit' sẽ đóng tệp hiện tại trước khi mở tệp mới. –

Trả lời

55

Gần đây tôi đã đem lòng yêu fuzzyfinder.vim ... :-)

: FuzzyFinderFile sẽ cho phép bạn mở các tập tin bằng cách gõ tên phần hoặc mẫu.

6

Sử dụng tab, chúng hoạt động khi nhập đường dẫn tệp ở chế độ thoát vim!

12

trừ khi tôi bỏ lỡ điều gì đó,: tên tệp e là cách nhanh nhất mà tôi đã tìm thấy.

Bạn cũng có thể sử dụng tab để tự động hoàn thành tên tệp.

+0

Không phải là ': e' một lối tắt cho ': chỉnh sửa'? – dirkgently

+0

@dirkgently, Đúng vậy. Nó vẫn là một lối tắt, như tiêu đề của câu hỏi này gợi ý, nhưng tôi không nghĩ đó là điều người hỏi đang tìm kiếm. – strager

+0

Để tôi tự động điền tab không hoạt động cho: e. Bên cạnh đó bạn không phải lúc nào cũng muốn tìm kiếm tên tập tin bắt đầu bằng một cái gì đó, nhưng thay vì cho một từ ở giữa trong một tên tập tin. – drozzy

25

Bạn có thể tìm kiếm một tập tin trong đường dẫn hiện tại bằng cách sử dụng **: Tab

:tabe **/header.h 

Hit để xem việc hoàn tất khác nhau nếu có nhiều hơn một trận.

+0

Tôi đã thử sử dụng nhưng điều này rất chậm. Tôi có nghĩa là ứng dụng của tôi là lớn và các biên tập viên ngừng làm việc cho đôi khi. Bạn có biết bất kỳ cài đặt nào để tăng hiệu suất và tốc độ của trình chỉnh sửa hay không. – Techmaddy

+1

Câu trả lời hay. Sử dụng một cái gì đó như ': tabe **/* der.h' nếu bạn không nhớ tên đầy đủ của tập tin. – ziiweb

4

Nếu bạn có thẻ (và bạn nên), bạn có thể mở tệp từ dòng lệnh chỉ bằng tên của lớp hoặc phương thức hoặc chức năng c, với "vim -t DBPlaylist" và trong vim với ": tag ShowList".

1
  • bạn có thể sử dụng (set wildmenu)
  • bạn có thể sử dụng tab để tự động hoàn thành tên tập tin
  • bạn cũng có thể sử dụng phù hợp, ví dụ: e p*.dat hoặc một cái gì đó như thế (như trong cũ' dos)
  • bạn cũng có thể: duyệt xác nhận e (cho cửa sổ đồ họa)

  • nhưng bạn cũng có thể chỉ định phiên bản vim nào bạn đang sử dụng và cách hoạt động của emacs. Có lẽ chúng tôi có thể tìm cho bạn một giải pháp thay thế chính xác.

3

Nếu bạn đang chỉnh sửa tập tin trong một thư mục thông thường, bạn có thể :cd vào thư mục đó, sau đó sử dụng :e trên chỉ là tên tập tin.

Ví dụ, chứ không phải là:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb 
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c 
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java 

Bạn có thể làm:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/ 
:e thingy.rb 
:sp other_thingy.c 
:vs one_more_thingy.java 

Hoặc, nếu bạn đã có một tập tin trong thư mục mong muốn mở, bạn có thể sử dụng % viết tắt cho các tên tệp hiện tại và cắt nó vào thư mục hiện tại bằng công cụ sửa đổi :h (:help :_%:):

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb 
:cd %:h 
:sp other_thingy.c 
:vs one_more_thingy.java 

Và, giống như những người khác đã nói, bạn có thể hoàn thành tab tên tệp trên dòng cũ (xem :help cmdline-completion để biết thêm).

8

Tôi sử dụng một vài phím tắt trong tệp .vimrc của tôi (cú pháp chính xác bên dưới).

Chúng dựa trên thực tế là trong 90% các trường hợp, tôi muốn mở một tệp khác trong cùng thư mục với tệp mà tôi hiện đang chỉnh sửa hoặc trong một thư mục rất gần trong hệ thống phân cấp đó đã chỉnh sửa tệp.

Đây là những gì các lệnh làm làm:

,cd: Thay đổi thư mục làm việc hiện hành vào thư mục mà tập tin hiện tại bạn đang chỉnh sửa nằm trong

,e:. Mở một tập tin với làm việc hiện tại thư mục đã được điền để bạn phải chỉ định chỉ tên tệp.

Đặt những thành vimrc của bạn:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR> 

map ,cd :cd %:p:h <CR> 

Dưới đây là một chuỗi các sự kiện:


  1. Bạn đang chỉnh sửa một tập tin gọi test.java trong "/ home/prog "
  2. ,cd -> Thư mục đang hoạt động hiện tại trở thành "/ home/prog"
  3. ,e -> Mở rộng thành ": e/home/prog" để mà bạn chỉ cần điền vào tệp tên, hãy nói test.h.

  1. ,e -> Mở rộng để ": e/home"
  2. tab -> Chu kỳ thông qua các thư mục con của/home
  3. enter ->cd vào thư mục bạn muốn nói/home/prog
  4. ,e -> Mở rộng thành ": e/home/prog"
3

Tôi biết ba plugin cho phép mở tệp, hỗ trợ tự động hoàn thành và không yêu cầu nhập tên đường dẫn đầy đủ của (các) tệp để mở (miễn là các tệp nằm trong một trong các thư mục từ &path tùy chọn vim):

  • searchInRuntime rằng tôi đang duy trì (kết thúc không phải là trên :e/:find, nhưng trên hành động chia rẽ)
  • fuzzy finder vì nó đã được đã chỉ ra,
  • lookupfile.

Gần đây, tôi đã nhìn thấy một plugin khác có tính năng tương tự, nhưng tôi không nhớ tên.

Chẳng bao lâu nữa: tìm kiếm có khả năng hỗ trợ tự động hoàn thành - các bản vá về chủ đề này đang lưu hành trên danh sách gửi thư vim_dev những ngày này.

132

Điều tôi thường làm là e . (e-dấu cách không gian) cung cấp cho tôi thư mục hiện tại có thể duyệt - sau đó tôi có thể / - tìm kiếm các phân đoạn tên, giống như tìm một từ trong tệp văn bản. Tôi thấy rằng nói chung là đủ tốt, đơn giản và nhanh chóng.

+15

Bạn không cần dung lượng, tiết kiệm thêm 25% cho việc nhập. (': e.'). –

+55

Bạn không cần dấu chấm nếu bạn sử dụng số vốn, ví dụ: : E drozzy

+2

@drozzy Điều này xảy ra với vim :-) – DerMike

1

FuzzyFinder đã được đề cập, tuy nhiên tôi thích người bạn cùng loại như hành vi của plugin FuzzyFinderTextmate mở rộng hành vi bao gồm tất cả các subdir.

Đảm bảo bạn đang sử dụng phiên bản 2.16 của fuzzyfinder.vim - Các phiên bản cao hơn sẽ phá vỡ plugin.

0

Tôi đã cài đặt FuzzyFinder. Tuy nhiên, giới hạn là nó chỉ tìm thấy các tập tin trong thư mục hiện hành. Một cách giải quyết khác là thêm FuzzyFinderTextmate. Tuy nhiên, dựa trên các tài liệu và bình luận, điều đó không hoạt động đáng tin cậy. Bạn cần phiên bản phù hợp của FuzzyFinder và bạn cần bản sao Vim của bạn để được biên dịch với sự hỗ trợ của Ruby.

Cách giải quyết khác mà tôi đang cố gắng là mở tất cả các tệp mà tôi có thể cần vào đầu phiên chỉnh sửa. Ví dụ, mở tất cả các file trong thư mục quan trọng ...

:args app/** 
:args config/** 
:args test/** 
etc... 

(Điều này có nghĩa tôi sẽ phải có thể điểm số của tập tin đang mở, tuy nhiên cho đến nay nó vẫn có vẻ làm việc OK.)

Sau đó, tôi có thể sử dụng FuzzyFinder trong chế độ đệm và nó sẽ hoạt động một chút như command-o shortcut TextMate của ...

:FuzzyFinderBuffer 
+0

Bạn chắc chắn? Tôi có một số cấu hình trong .vimrc của tôi, hãy tìm "g: fuf_abbrevMap". Tôi phải tìm một ví dụ trong tài liệu. Khi tôi gõ phím tắt, tôi gõ một chữ viết tắt như "web:" và nó sẽ tìm kiếm tất cả các tệp trong một thư mục mà tôi chọn. Vấn đề của tôi thực sự là vì một số lý do nó không mở tập tin nữa, tôi thấy [NEW DIRECTORY] trên thanh trạng thái để thay thế. Nhưng tôi có cùng một vấn đề với: o, có vẻ như không liên quan đến fuf. –

3

Đây không phải là chính xác những gì bạn đang tìm kiếm, nhưng nó tốt trong nhiều trường hợp (mặc dù không phải tất cả) .

Nếu bạn vim mở và có một tên của một tập tin trong bộ đệm, bạn có thể đặt con trỏ vào tên tập tin đó và gõ gf. Thao tác này sẽ mở tệp có tên nằm dưới con trỏ trong cùng một bộ đệm. Nó giống như

:e CTRL+rCTRL+w

+0

Tôi nhấn gf và bây giờ tôi đã mở tập tin mới đó là dưới curssor. Bây giờ làm thế nào để trở lại tập tin gốc. !! – vrbilgi

+0

@ user430294: Mở trong bộ đệm khác. Sử dụng ': b oldname' –

29

:find là một tùy chọn.

Tôi mở vim từ gốc của dự án của tôi và đặt path được đặt ở đó.

Sau đó, tôi có thể mở các file nằm ở bất cứ đâu trong cây sử dụng:

:find **/filena<tab> 

Tab sẽ tự động hoàn thành thông qua các trận đấu khác nhau. (** yêu cầu nó tìm kiếm đệ quy qua đường dẫn).

+0

Tôi không tìm thấy': find' hữu ích để lấy đường dẫn tương đối với thư mục làm việc. Xem câu hỏi và câu trả lời @romainl tại đây: http://stackoverflow.com/questions/28224168/vim-using-find-how-to-get-the-path-relative-to-the-working-directory/28225117#28225117 . Tôi tìm thấy câu trả lời thú vị hơn @strager để có được đường dẫn liên quan đến thư mục làm việc dễ dàng hơn. – ziiweb

8

Ngoài ra còn có lệnh-t mà tôi tìm thấy là tốt nhất của bó (và tôi đã thử tất cả). Đó là một rắc rối nhỏ để cài đặt nó nhưng, một khi nó được cài đặt, đó là một giấc mơ để sử dụng.

https://wincent.com/products/command-t/

+1

Bạn cũng có thể thử ctrlp.vim (https://github.com/kien/ctrlp.vim). Về cơ bản nó giống như Command-T nhưng được viết bằng Vimscript thuần túy. (IMHO nó cũng đơn giản hơn để sử dụng) – datentyp

13

Xem xét sử dụng CtrlP plug-in.

Nó được bao gồm trong Janus Distributive.

Cho phép bạn tìm tệp trong thư mục hiện tại, mở bộ đệm hoặc tệp được sử dụng gần đây nhất bằng cách sử dụng "đối sánh mờ" hoặc cụm từ thông dụng.

+1

Dễ dàng cài đặt CtrlP và cho đến nay dường như hoạt động tốt. –

+1

thực sự tôi sử dụng nó như là một phần của phân phối Janus. – Alexey

0

Với ctags cởi mở, bạn có thể tạo các file tag với thông tin file:

ctags --extra=+f -R * 

Sau đó, mở tập tin từ VIM với

:tag filename 

Bạn cũng có thể sử dụng <tab> để tự động điền tên tập tin.

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