2012-12-18 40 views
7

Đối với các chương trình Haskell của tôi, tôi biết rằng tên của tệp thi hành trong đường dẫn giống với tên thư mục hiện tại của tôi. Bây giờ tôi muốn tạo ra một bản đồ như vậy:Sử dụng thư mục hiện tại trong các lệnh Vim

:map <leader>rr :!curdir()<cr> 

Tuy nhiên, lệnh duy nhất tôi biết là getcwd(), mà mang lại cho tôi toàn bộ con đường thay cho tên chỉ của thư mục.

Có cách nào dễ dàng chỉ trích xuất tên của thư mục không?

+0

Xem [câu trả lời này] (http://stackoverflow.com/a/13908273/546861). – romainl

+0

Các câu trả lời dưới đây là các giải pháp vimscript tốt. Nếu bạn không có bản đồ, bạn cũng có thể đánh giá động này bằng cách đăng ký =. (sau khi gõ một phần của lệnh cũ như ':!' type 'CR =' theo sau là một trong các giải pháp vimscript dưới đây. – darcyparker

+0

@darcyparker Không tốt. Không sử dụng bất kỳ loại cụm từ thông dụng nào cho công việc như vậy Bất kỳ ai giả định '/' là một dấu phân cách đường dẫn là sai. Bất kỳ ai giả sử '/' và '\' là * cả hai dấu phân cách đường dẫn đều sai. Hơn nữa, bất kỳ ai giả định '\' là * luôn luôn * tách đường dẫn trên Tôi cũng không có ý tưởng trong đó hoàn cảnh phân cách đường dẫn sẽ là ':', nhưng nó có thể được nó. Hầu hết \ * nix hệ thống có thể có '\' và ':' trong tên tập tin. – ZyX

Trả lời

13

Sử dụng

fnamemodify(getcwd(), ':t') 

hoặc

fnamemodify('.', ':p:h:t') 

. :h trong trường hợp thứ hai là cần thiết vì :p phát ra dấu phân cách đường dẫn (do đó thành phần đường dẫn cuối cùng được chọn bởi :t giờ đây là chuỗi rỗng).

Để di chuyển này vào sử dụng bản đồ của bạn

:noremap \rr :!<C-r>=shellescape(fnamemodify('.', ':p:h:t'), 1)<CR><CR> 

. Để biết mô tả lý do bạn không nên sử dụng :map, hãy xem here.

0

Bạn có thể sử dụng một cái gì đó như:

split(getcwd(), "/")[-1] 
+0

Đường phân cách không phải là cần thiết '/'. – ZyX

+0

@ZyX, bạn đang nói về hệ điều hành nào? – taro

+0

Windows: bộ tách đường dẫn ở đây là '\' hoặc '/' tùy thuộc vào tùy chọn '& shellslash'. AFAIK Macintosh đôi khi, ở đây dấu tách đường dẫn có thể là': ', nhưng tôi không biết trong trường hợp nào là – ZyX

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