Làm thế nào để tìm ra tập tin nào hiện đang được mở trong vim?


61

Điều này nghe có vẻ tầm thường nhưng, trong nhiều lần, tôi thấy mình đã quên tập tin nào trong vimtôi đã mở (ví dụ như khi tôi đang xem qua các tệp nhật ký khác nhau và như vậy) và cách duy nhất tôi biết cách tìm ra là đóng các tập tin và tìm trong lịch sử lệnh cho lệnh gần đây nhất.

Có một lệnh trong vim để cho bạn biết tập tin nào bạn đã mở mà không thoát khỏi chương trình hoặc tập tin bạn đã mở (ví dụ :<which_file_cmd>?)


5
Nếu bạn không gọi vimvới rất nhiều đối số, hãy sử dụng :args.
41754

Câu trả lời:


76

Ngoài câu trả lời của uprego , bạn có thể nhấn Ctrl+ G(ở chế độ bình thường) để lấy tên bộ đệm hiện tại cũng như tổng số dòng trong đó và vị trí hiện tại của bạn trong đó.

Cập nhật

Theo nhận xét của rxdazn , bạn có thể nhấn 1trước Ctrl+ Gđể có đường dẫn tệp đầy đủ. Nếu bạn nhấn 2, bạn sẽ nhận được đường dẫn tệp đầy đủ số bộ đệm bạn hiện đang mở (hữu ích khi bạn đã mở nhiều tệp với vim).


Giống như nhiều lệnh vim, điều này cũng áp dụng cho lesslệnh mà tôi sử dụng khi xem các tệp trái ngược với chỉnh sửa.
jmathew

18
đồng thời, nhấn 1 trước khi Ctrl + G cung cấp cho bạn đường dẫn đầy đủ của tệp
rxdazn

23

Khi ở trong vimtôi luôn sử dụng :lslệnh.

Thí dụ

:ls
  1 %a   "blah.txt"                         line 1

Trong trường hợp blah.txtlà tên của tập tin.



7

Khi vimkhông được gọi với nhiều đối số , :argslà hữu ích.


4
Vấn đề khác với điều này là nếu tệp được mở sau khi vim được khởi chạy, nó sẽ không được liệt kê.
Patrick

4

Nếu bạn có thể có tệp cấu hình vim mặc định, bạn có thể thêm một statuslineđể luôn có sẵn chi tiết tệp. Tôi hiểu rằng nếu bạn liên tục điều khiển từ xa vào các máy chủ khác nhau thì điều này sẽ không giúp ích nhiều. Đây là một cái hơi phức tạp của tôi lấy từ .vimrc của tôi.

" %F(Full file path)
" %m(Shows + if modified - if not modifiable)
" %r(Shows RO if readonly)
" %<(Truncate here if necessary)
" \ (Separator)
" %=(Right align)
" %l(Line number)
" %v(Column number)
" %L(Total number of lines)
" %p(How far in file we are percentage wise)
" %%(Percent sign)
set statusline=%F%m%r%<\ %=%l,%v\ [%L]\ %p%%

" Change the highlighting so it stands out
hi statusline ctermbg=white ctermfg=black

" Make sure it always shows
set laststatus=2

Và nó trông như thế này trong MacVim (nhưng cũng hoạt động trong các thiết bị đầu cuối). nhập mô tả hình ảnh ở đây

Như mọi khi bạn có thể làm :help statuslineđể có thêm một số tùy chọn và chi tiết. Và kiểm tra Học Vim the Hard Way ch 17 để có một lời giải thích tốt về tình trạng.


Tôi luôn luôn sử dụng trạng thái là tốt. +1
Cướp

1

Ngoài ra :echo @%, nó cũng cung cấp cho bạn tên của tệp liên quan đến thư mục hiện tại.


1

Có vô số cách để có được loại thông tin này, nhưng nếu bạn muốn một cái gì đó để bạn chỉ cần nhấn một phím và tên tệp sẽ được hiển thị, sau đó chèn thông tin sau vào ~/.vimrc:

map <F4> <ESC>:file<CR>

Điều này nói rằng,

bind the `F4' key to the following sequence: Escape-key, :file, Carriage-Return (enter-key)

filelệnh, có lẽ là rõ ràng, trả về tên của tệp hiện tại cùng với thông tin khác.

Bạn cũng có thể thiết lập một dòng trạng thái để bạn thậm chí không phải làm gì ngoài nhìn.

Để giữ dòng trạng thái luôn chèn đoạn sau vào ~/.vimrc:

set laststatus=2

Điều này cho ViM luôn hiển thị một dòng trạng thái, các tùy chọn khác là 0không bao giờ và 1chỉ khi bạn có hai hoặc nhiều cửa sổ mở trong ViM.


1

Tôi thường chỉ gõ :e và điều này cho tôi thấy đường dẫn tập tin đầy đủ và số dòng và ký tự quá.

Hãy cẩn thận : về cơ bản nó sẽ mở lại tệp từ đĩa, vì vậy nó hữu ích nhất khi tệp đã được lưu.

:help :e nói:

                          *:e* *:edit*
Edit the current file.  This is useful to re-edit the
current file, when it has been changed outside of Vim.
This fails when changes have been made to the current
buffer and 'autowriteall' isn't set or the file can't
be written.

1

Tôi vimrc của tôi Tôi có bản đồ này

nnoremap <leader>pfn :echo expand('%:p')<CR>

Vì vậy, nếu tôi gõ ,pfn, hoặc "in tên tệp", nó sẽ lặp lại toàn bộ đường dẫn tệp.

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.