2013-02-05 29 views
13

Tôi muốn lấy kiểu tệp hiện tại làm biến trong vimscript.Vimscript: cách lấy kiểu tệp hiện tại dưới dạng biến

Tôi đang tạo một hàm lấy mẫu hiện tại và chỉnh sửa một tệp khác của loại tệp tương ứng.

Ví dụ:

  • chỉnh sửa "foo/bar.txt", muốn mở "tmp/other.txt"
  • chỉnh sửa "foo/bar.cpp", muốn mở "tmp/other.cpp"

vv tôi biết rằng :set ft? hiển thị các filetype trong vim, nhưng tôi không chắc chắn làm thế nào để nắm bắt được nó và sau đó mở một tập tin sử dụng nó như một phần của chuỗi tập tin mới.

+5

'& filetype' không nhất thiết phải tương ứng với đuôi tệp! Bạn có thực sự muốn sử dụng filetype cho điều này không, hay bạn muốn phân tích cú pháp 'bufname ("% ")' như 'fnamemodify (bufname ("% "),": t ")' để trích xuất phần mở rộng của tập tin hiện tại? Ví dụ: một tệp có tên 'foo.hpp' có một '& filetype' của cpp. Bạn có muốn mở "tmp/other.cpp" hoặc "tmp/other.hpp" trong trường hợp này không? – cptstubing06

Trả lời

24

Bạn có thể truy cập giá trị của cài đặt bằng cách đặt trước nó bằng dấu và. Giao filetype cho một biến, sau đây là tương đương:

let my_filetype = &filetype 
let my_filetype = &ft 

Vì vậy, ví dụ của bạn, giả sử filetype của bộ đệm hiện nay đã được thiết lập, bạn có thể làm một cái gì đó giống như

execute 'edit tmp/other.' . &filetype 

Lưu ý rằng bạn cần phải execute biểu thức để biến được mở rộng trước khi các chuỗi được nối.

0

Hậu tố loại tệp và tệp không nhất thiết phải giống nhau. Ví dụ: nếu bạn đang chỉnh sửa tệp .txt, hãy đặt zft = & ft đặt zft thành "văn bản". cho zfs = fnamemodify (bufname ("%"), ": e") đặt zfs thành "txt".

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