Làm cách nào để có được tên và phần mở rộng của tệp hiện tại?


24

Có cách nào để lấy tên và phần mở rộng của tệp bằng vimscript không?

Nếu vậy tôi muốn tên và phần mở rộng riêng biệt.


"một tập tin"? Tập tin nào? Một trong bộ đệm hiện tại? Một tập tin ở đâu đó trong đường dẫn tìm kiếm?
muru

Tệp mà người dùng mở thông qua `vim <tên tệp>
iProgram


Tôi không muốn con đường đầy đủ. Tôi chỉ muốn tên và phần mở rộng của tập tin. Không phải đường dẫn tôi cũng muốn sử dụng điều này trong vimscript.
iProgram

Vâng, cả hai câu trả lời thực sự nằm trong câu hỏi được liên kết (cụ thể là câu trả lời của CharlesL) ...
Martin Tournoij

Câu trả lời:


27

Từ :he filename-modifiers:

    :t      Tail of the file name (last component of the name).  Must
            precede any :r or :e.
    :r      Root of the file name (the last extension removed).  When
            there is only an extension (file name that starts with '.',
            e.g., ".vimrc"), it is not removed.  Can be repeated to remove
            several extensions (last one first).

    :e      Extension of the file name.  Only makes sense when used alone.
            When there is no extension the result is empty.
            When there is only an extension (file name that starts with
            '.'), the result is empty.  Can be repeated to include more
            extensions.  If there are not enough extensions (but at least
            one) as much as possible are included.
Examples, when the file name is "src/version.c", current dir
"/home/mool/vim":
  :p                    /home/mool/vim/src/version.c
  :t                                       version.c
  :t:r                                     version
  :e                                               c

Bạn có thể sử dụng expandhàm để mở rộng chúng và lấy các giá trị của chúng:

:let b:baz=expand('%:e')

Ví dụ:

$ vim '+ exe ":normal i" . expand("%:t") . "^M" . expand("%:e")' +wqa foo.bar; cat foo.bar
foo.bar
bar

:t" Phải đặt trước bất kỳ: r hoặc: e," nhưng :e"chỉ có ý nghĩa khi được sử dụng một mình". Ví dụ, tôi đứng về phía sau, nhưng thú vị là các tài liệu mâu thuẫn với nhau ở đó.
Ngáy ngủ

@SnoringFrog Tôi tin rằng điều đó có nghĩa là bạn không thể làm :e:t, nhưng :t:eđược phép, nếu vô nghĩa.
muru

Ồ, tôi thấy làm thế nào nó có thể được đọc theo cách đó. Điều đó có ý nghĩa sau đó.
SnoredFrog

10

Bạn có thể sử dụng expand(), xem:h expand()

Trong một tập lệnh, bạn có thể làm điều này để có được tên tệp:

let file_name = expand('%:t:r')

Để có được tiện ích mở rộng, bạn có thể làm:

let extension = expand('%:e')

Các expand()chức năng có thể mở rộng ký tự đại diện và các biểu tượng đặc biệt . Ở đây tôi đã sử dụng %mở rộng thành tên tệp hiện tại.

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.