Làm thế nào tôi có thể thấy đường dẫn đầy đủ của tập tin hiện tại?


123

Khi tôi chỉnh sửa một tệp trong Vim, có lệnh nào để xem đường dẫn của tệp hiện tại không? Đôi khi điều này rất tiện dụng nếu có nhiều tệp có cùng tên trong một dự án.

Câu trả lời:


143

Bạn có thể nhấn {count}Ctrl-G:

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

Nhấn 1theo sau là Ctrl+ Ghiển thị đường dẫn đầy đủ của tệp hiện tại. Nếu {count}cao hơn 1, tên bộ đệm cũng sẽ được hiển thị.

(Chỉ nhấn Ctrl+ Ghiển thị đường dẫn liên quan đến thư mục làm việc hiện tại của Vim, như được chỉ ra bởi Jasper trong các bình luận.)

Bạn có thể sử dụng lệnh sau trong .vimrcđể thêm đường dẫn đầy đủ vào dòng trạng thái, để nó luôn hiển thị:

set statusline+=%F

4
Không Ctrl+Ggiống như 'đường dẫn liên quan đến vim' cwd '?
Jasper

@Jasper Bắt tốt! Cập nhật câu trả lời.
thameera

4
Dường như C-gnó được mặc định 0C-g2C-ghiển thị số chỉ mục bộ đệm (bắt đầu từ 1).

Tôi rất vui khi là người thứ 100 nâng cao câu trả lời của bạn! Cảm ơn vì điều này 1C-g!
kho tiền

53

Đăng ký %chứa tên của tập tin hiện tại.

Các lệnh sau có thể được nhập để hiển thị thông tin hiển thị:

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

Nếu tất cả những gì bạn muốn là hiển thị tên của tệp hiện tại, hãy nhập :f/ :lshoặc nhấn Ctrl- g(đối với đường dẫn đầy đủ, 1sau đó nhấn Ctrl- g).

Trong chế độ chèn, nhập Ctrl- rsau đó %để chèn tên của tệp hiện tại.

Các lệnh sau đây chèn các dòng bao gồm đường dẫn đầy đủ của tệp hiện tại và tệp thay thế vào bộ đệm:

:put =expand('%:p')
:put =expand('#:p')

Nguồn: Lấy tên của tệp hiện tại tại vim wikia

Liên quan:


2
Có thể đáng lưu ý rằng bạn cũng có thể sử dụng các =expand...biểu thức đó sau Ctrl-Rkhi ở chế độ chèn.
dash-tom-bang

22

Bạn có thể sử dụng :!ls %:pđể có được đường dẫn đầy đủ đến tập tin hiện tại.

Tùy thuộc vào ngữ cảnh cũ, %sẽ có nghĩa là nội dung của tệp hoặc tên tệp. Khi tách ra, nó đại diện cho đường dẫn tệp liên quan đến thư mục hiện tại. Lệnh ' %:p' sẽ thêm công cụ sửa đổi tên tệp đường dẫn đầy đủ vào %.

Có một vài sửa đổi tên tệp thú vị khác như:

  • :~: Lấy đường dẫn tệp liên quan đến thư mục chính (vì lý do này không hoạt động với tôi)
  • :.: Nhận đường dẫn tệp liên quan đến thư mục hiện tại ( %mặc định)
  • :r: Tên tập tin gốc. Tên của tệp không có phần mở rộng.
  • :e: Phần mở rộng của tập tin.
  • :h: Tách /và trả lại nửa bên trái (nghĩa là nếu tôi đang chỉnh sửa một tệp trong đường dẫn /tmp/test.txtvà chạy %:p:hsẽ trả về/tmp
  • :t: Tách /và trả lại một nửa bên phải (nghĩa là nếu tôi đang chỉnh sửa một tệp trong đường dẫn /tmp/test.txtvà chạy %:p:tsẽ trả vềtext.txt

Tôi nghĩ bạn có nghĩa là%: p: t sẽ trả về text.txt
John O'M.

@ JohnO'M. vâng, điều đó đúng cảm ơn: D. Đã sửa.
CharlesL

7

Người ta có thể thấy các thư mục làm việc hiện tại với :pwd. Tất nhiên, đây chỉ là thư mục chứ không phải tên tệp. Để có được thư mục làm việc và tên tệp, chúng ta có thể sử dụng thanh ghi đặc biệt %, chứa thông tin về tệp hiện tại.

Nếu bạn sử dụng :echo @%, bạn sẽ nhận được thư mục và tên tệp của tệp hiện tại.
Nếu bạn sử dụng :echo expand('%:p'), bạn sẽ nhận được đường dẫn và tên tệp đầy đủ của tệp hiện tại. Điều này rất giống với câu trả lời của CharlesL .

Tuy nhiên, tôi nhớ điều này bởi vì nếu bạn sử dụng trợ giúp của vim :h expand, thì nó sẽ đề cập đến điều đó %%:pngười thân của họ.


4

Tôi sử dụng:

:f[ile]

Đó là :fhoặc :file.

Tôi ngạc nhiên không ai đề cập đến điều này trong các câu trả lời, tôi có thiếu điều gì không?


Đơn giản và hữu ích
Morteza Ziyae

3

Để hiển thị đường dẫn đầy đủ cho tất cả các tệp, bao gồm các liên kết tượng trưng được giải quyết, hãy sử dụng cách sau.

:echo resolve(expand('%:p'))

3

Có nhiều câu trả lời tốt hơn, nhưng nếu (vì một số lý do) bạn muốn sử dụng trình bao để lấy đường dẫn đầy đủ của tệp (điều này hữu ích hơn nếu bạn sẽ thực hiện một số thao tác khác trên tệp bằng trình bao), trên một hệ thống giống như Unix bạn có thể chạy:

:!realpath %

hoặc là:

:'<,'>!realpath %

để chèn đường dẫn vào tài liệu qua lựa chọn hiện tại.

Đăng ký %luôn chứa tên của tập tin. Một ví dụ trong thế giới thực có thể là nếu bạn đang chỉnh sửa tệp cấu hình, nhưng không có quyền ghi (và không muốn chạy Vim với quyền root), bạn có thể chỉnh sửa tệp, sau đó chạy:

:w ! sudo tee %

để lưu tệp (một chút nhỏ ngoài ý muốn ở đó, nhưng đó là một ví dụ tốt về những gì khác có thể được thực hiện với thanh %ghi).


realpathkhông phải là POSIX, vì vậy có thể đơn giản hơn để làm:!echo "$PWD/%"
muru

Đã đồng ý; cuộc gọi tốt
Sam Whited

2

Bạn cần đặt dòng trạng thái của mình thành có thể xem được và cũng đặt nó thành đường dẫn. Tôi đã làm như vậy vĩnh viễn bằng cách thêm hai dòng dưới đây vào ~ / .vimrc của tôi

set laststatus=2
set statusline+=%F

Nếu bạn muốn chỉ chạy một lần. Sau đó, khi VIing một loại tài liệu

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>

1
Đây là câu trả lời giống như câu trả lời của thameera cho cùng một câu hỏi.
statox


1

Bạn có thể hiển thị đường dẫn đầy đủ của tệp bạn đang chỉnh sửa trong thanh tiêu đề, đây là một cách thuận tiện để hiển thị đường dẫn tệp theo ý kiến ​​của tôi.

Để làm điều đó, bạn cần đặt titletùy chọn và titlestring. Hiện tại tôi đang sử dụng các cài đặt sau:

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

Nó sẽ hiển thị tên máy chủ của Vim, sau đó là đường dẫn đầy đủ của tệp và theo sau là lần sửa đổi cuối cùng của tệp. Xem hình dưới đây để xem demo

nhập mô tả hình ảnh ở đây

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.