Phím tắt để mở tệp trong Vim


123

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

Tôi biết mở nó bình thường như:

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

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


1
Lưu ý rằng các lệnh được đề xuất có hiệu ứng khác nhau :tabesẽ mở tệp trong tab mới, :newsẽ chia cửa sổ theo chiều ngang và :editsẽ đóng tệp hiện tại trước khi mở tệp mới.
Skippy le Grand Gourou

Câu trả lời:


61

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

: Fuzzy DownloaderFile sẽ cho phép bạn mở tệp bằng cách nhập tên hoặc mẫu một phần.


141

Những gì tôi thường làm là e .(e-space-dot) cung cấp cho tôi một thư mục hiện tại có thể duyệt được - sau đó tôi có thể /- tìm kiếm các đ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.


22
Bạn không cần dung lượng, tiết kiệm thêm 25% gõ. ( :e.).
Konrad Rudolph

67
Bạn không cần dấu chấm nếu bạn sử dụng vốn e, ví dụ: E <ENTER>
Andriy Drozdyuk

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

7
Có một sự khác biệt trong hành vi giữa :e.:Emặc dù: nếu tệp hiện tại đã được chỉnh sửa và chưa được lưu, tệp trước sẽ phàn nàn (như :edit) vì "không ghi kể từ thay đổi cuối cùng", trong khi tệp sau sẽ chia cửa sổ theo chiều ngang (như :new) để cho phép mở tệp mới (trong khi cả hai sẽ thay thế tệp hiện tại bằng tệp mới nếu nó chưa được sửa đổi (như :edit)).
Skippy le Grand Gourou

1
Nếu bạn mở một tệp, sau đó thay thế nó bằng tệp thứ hai, bạn có thể quay lại tệp đầu tiên bằng cách sử dụng "e #"
dkretz

33

:find là một lựa chọn khác.

Tôi mở vim từ gốc của dự án của tôi và có paththiết lập ở đó.

Sau đó, tôi có thể mở các tệp nằm ở bất kỳ đâu trên cây bằng cách 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. ( **nói với nó để tìm kiếm đệ quy thông qua đường dẫn).


Tôi không thấy hữu ích :findvì có được đường dẫn liên quan đến thư mục làm việc. Xem câu hỏi và câu trả lời @romainl tại đây: stackoverflow.com/questions/28224168/ . Tôi tìm thấy câu trả lời @strager thú vị hơn để có được đường dẫn liên quan đến thư mục làm việc dễ dàng hơn.
ziiweb

25

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

:tabe **/header.h

Nhấn tab để xem các phần hoàn thành khác nhau nếu có nhiều hơn một trận đấu.


Tôi đã thử sử dụng nhưng điều này là rất chậm. Tôi có nghĩa là ứng dụng của tôi lớn và trình soạn thảo đã ngừng hoạt động trong một thời gian. 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.
Techmaddy

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

16

Cân nhắc sử dụng trình cắm CtrlP .

Nó được bao gồm trong phân phối Janus .

Cho phép bạn tìm các tệp trong thư mục hiện tại, mở bộ đệm hoặc các tệp được sử dụng gần đây nhất bằng cách sử dụng "kết hợp mờ" hoặc biểu thức chính quy.


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

Các CtrlP repo gốc không hoạt động, nhưng có một ngã ba hoạt động
jpyams

12

trừ khi tôi thiếu một cái gì đó ,: e filename là cách nhanh nhất 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.


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

Đối với tôi, tab tự động hoàn thành không hoạt động cho: e. Bên cạnh đó, bạn không phải luôn muốn tìm kiếm tên tệp bắt đầu bằng một cái gì đó, mà là tìm một từ giữa trong tên tệp.
Andriy Drozdyuk


9

Tôi sử dụng một vài phím tắt trong tệp .vimrc của mình (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 với phân cấp của tệp đã chỉnh sửa đó.

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

,cd : Thay đổi thư mục làm việc hiện tại thành thư mục mà tệp hiện tại bạn đang chỉnh sửa.

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

Đặt chúng vào .vimrc của bạn:

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

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

Đây là một chuỗi các sự kiện:


  1. Bạn đang chỉnh sửa một tệp có tên test.java trong "/ home / prog"
  2. ,cd -> Thư mục làm việc hiện tại giờ trở thành "/ home / prog"
  3. ,e -> Mở rộng thành ": e / home / prog" để bạn chỉ cần điền tên tệp, giả sử test.h.

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

8

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

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


1
Bạn cũng có thể muốn thử ctrlp.vim ( 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 cũng đơn giản hơn để sử dụng)
datentyp

6

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


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 hàm c, với "vim -t DBPlaylist" và trong vim với ": tag ShowList ".


4

Nếu bạn đang chỉnh sửa các tệp trong một thư mục chung, bạn có thể :cdvào thư mục đó, sau đó sử dụng:e tên tệp.

Ví dụ: thay vì:

: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 đã mở một tệp trong thư mục mong muốn, bạn có thể sử dụng tốc %ký cho tên tệp hiện tại và cắt nó thành thư mục hiện tại với công cụ :hsửa đổi ( :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à, như những người khác đã nói, bạn có thể điền tên tệp vào tab trên dòng cũ (xem :help cmdline-completionđể biết thêm).


4

Đâ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 mở VIM và có tên của một tệp trong bộ đệm, bạn có thể đặt con trỏ vào tên tệp và loại gf. Thao tác này sẽ mở tệp có tên nằm dưới con trỏ trong cùng bộ đệm. Nó giống như

:e CTRL+r CTRL+w


1
Tôi đã nhấn gf và bây giờ tôi đã mở tập tin mới nằm dưới phần chữ thảo. Bây giờ làm thế nào để trở lại tập tin gốc. !!
vrbilgi

@ user430294: Nó mở trong một bộ đệm khác. Sử dụng:b oldname
Nathan Fellman

@vrbilgi, sử dụng Ctrl + o để quay lại tệp đã chỉnh sửa trước đó. Sử dụng Ctrl + i để chuyển tiếp một lần nữa vào tệp mà bạn quay lại.
Nam

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ừ &pathtùy chọn vim) :

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

Sớm, tìm thấy 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ư của vim_dev những ngày này.


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

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


1

Fuzzy Downloader đã được đề cập, tuy nhiên tôi thích hành vi giống như hành vi của Fuzzy DownloaderTextmate plugin mở rộng hành vi để bao gồm tất cả các thư mục con.

Đả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 phá vỡ plugin.


1

Với ctags Exuberant, bạn có thể tạo tệp thẻ với thông tin tệp:

ctags --extra=+f -R *

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

:tag filename

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


1

Trong GVIM, tệp có thể được duyệt bằng hộp thoại mở / đọc / ghi;

:browse {command}

{lệnh} - mở / đọc / ghi

mở - Mở tệp đã đọc - Nối tệp ghi - Hộp thoại SaveAs


0

Tôi đã cài đặt Fuzzy Downloader. Tuy nhiên, hạn chế là nó chỉ tìm thấy các tập tin trong thư mục hiện tại. Một cách giải quyết khác là thêm Fuzzy DownloaderTextmate. 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 Fuzzy Downloader và bạn cần bản sao Vim của mình để được biên dịch với sự hỗ trợ của Ruby.

Một cách giải quyết khác mà tôi đang thử bây giờ 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 tệp trong thư mục chính ...

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

(Điều này có nghĩa là tôi có thể mở được các tệp, tuy nhiên cho đến nay nó vẫn hoạt động tốt.)

Sau đó, tôi có thể sử dụng Fuzzy Downloader trong chế độ bộ đệm và nó sẽ hoạt động giống như command-olối tắt của TextMate ...

:FuzzyFinderBuffer

Bạn chắc chắn? Tôi có một số cấu hình trong .vimrc của mình, hãy tìm "g: fuf_abbrevMap". Tôi phải tìm thấy một ví dụ trong tài liệu. Khi tôi gõ phím tắt, sau đó tôi gõ một chữ viết tắt như "web:" và nó sẽ tra cứu 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 nữa, thay vào đó tôi thấy [TRỰC TIẾP MỚI] trên thanh trạng thái. Nhưng tôi có cùng một vấn đề với: o, dường như không liên quan đến fuf.
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.