Hiển thị tên tệp hiện tại cho phiên bản trong dòng lệnh


10

Làm cách nào tôi có thể hiển thị đường dẫn đến tệp hiện tại trong dòng lệnh, để nhập tên tệp tương tự? Tôi không muốn một từ viết tắt sẽ được thay thế bằng tên tệp hiện tại, tôi muốn chỉnh sửa tên tệp, hoàn thành với đường dẫn thư mục của nó. Ví dụ: tôi muốn :editmột tệp có tên tương tự hoặc trong một thư mục tương tự, ví dụ:

vim src/submodule/frontend/frobnicate2.c

và bây giờ tôi muốn chỉnh sửa ../trunk/src/submodule/frontend/frobnicate.c, và tôi chỉ muốn chèn ../trunkvà xóa 2, không nhập lại đường dẫn đầy đủ.

Tất nhiên tôi có thể quay trở lại trình bao và sử dụng lịch sử lệnh của nó hoặc tôi có thể sao chép-dán đường dẫn qua GUI, nhưng tôi đang tìm kiếm một cách hiệu quả hơn mà không cần phải rời khỏi Vim.

Câu trả lời:


11

Ngoài việc chèn %đăng ký như bạn đã tự khám phá, bạn cũng có thể sử dụng :edit %<Tab>.

Từ :help cmdline-special:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

Vì vậy, bạn có thể, ví dụ, sử dụng:

:edit %.orig

để chỉnh sửa file.txt.orig. Ví dụ của bạn, bạn nhập :e ../trunk/%, nhấn <Tab>để lấy tên tệp với đường dẫn tương đối và xóa tên 2trước khi nhấn <Enter>.

Bạn có thể thêm một số sửa đổi vào đường dẫn để sửa đổi nó; Tôi thấy :hđặc biệt hữu ích, nó nhận được "dirname" (hoặc "đầu" trong Vim-speak ") của đường dẫn hiện tại:

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

Bạn thậm chí có thể sử dụng :hnhiều lần. Ví dụ:

:edit %:h:h:h/file.txt

Sẽ mở file/in/a/deeply/file.txt

Ngoài ra còn :pcung cấp cho bạn đường dẫn đầy đủ và có thể hữu ích trong trường hợp của bạn: nhập :e %:p, nhấn <Tab>và chỉnh sửa đường dẫn theo ý muốn. Bạn thậm chí có thể sử dụng nhiều sửa đổi, ví dụ : :e %:p:h.

Xem :help filename-modifiersđể biết danh sách đầy đủ.

Lưu ý: nếu bạn <Tab>, Vim sẽ mở rộng %. Nếu bạn sử dụng <C-d>, Vim sẽ không mở rộng %(nhưng sẽ thay thế %trong khi hoàn thành đường dẫn).


5

Oh. Tìm kiếm tên tập tin của Nhật Bản :help :! Rất đơn giản: để chèn đặc biệt r egister , có nghĩa là tên file hiện hành.CTRL-R %%


1
Vì vậy, dựa trên câu trả lời của bạn: để có được đường dẫn đầy đủ như OP yêu cầu, bạn sẽ làm một cái gì đó như thế nào Ctrl-r =expand('%:p'). Điều này sử dụng đăng ký = .
lcd047

3

Nếu bạn đã đặt pathbiến vim của mình , bạn có toàn bộ sức mạnh của :findlệnh, cụ thể là hoàn thành tab tên tệp (mà không cần chỉ định phần thư mục!)

Trong trường hợp của bạn, một cái gì đó như

set path=./**

có thể là tất cả những gì bạn cần :fin frob<tab>để làm việc Đối với các chi tiết gory :help find, :help file-searching.


0

Đây là một bản đồ bạn có thể thử:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

Điều này sẽ lưu lệnh hiện tại sau đó đặt thanh ghi 'a' thành tên của tệp hiện tại. Sau đó, lệnh cuối cùng được gọi lại và gắn vào nội dung đăng ký 'a'. Tất nhiên nếu bạn có thứ gì đó hữu ích trong đăng ký 'a' thì điều này sẽ ghi đè lên nó.

Bạn có thể muốn thay đổi các ký tự được ánh xạ sang một thứ khác. Tôi thích sử dụng phím Alt nhưng nó không hoạt động trong một số thiết bị đầu cuối.

Như Carpetsmoker đã chỉ ra trong câu trả lời của mình, bạn có thể thay đổi chức năng gọi thành

expand('%:p')

để buộc toàn bộ con đường.


1
Điều này sẽ vô nghĩa xóa sổ đăng ký a. Thay vào đó hãy thử một cái gì đó như thế này:cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047
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.