Tạo một tệp theo con trỏ trong Vim


10

Tôi có một danh sách các tập tin

file1.ext
file2.ext
...

Làm cách nào để tạo một tệp có tên tệp2.ext nếu con trỏ của tôi nằm trong tệp2.ext. Kiểu như gfchỉ để tạo tập tin mới (đây là một tình huống giả định, chỉ cần nghĩ rằng có thể sẽ hữu ích một ngày nào đó).

Câu trả lời:


17

Điều đầu tiên tôi nghĩ đến là sử dụng touchlệnh truyền cho nó tên tệp dưới con trỏ.

:map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>

Nhưng có một giải pháp Vim thuần túy di động trên các nền tảng. Hàm dựng sẵn writefileghi một danh sách vào một tệp, theo từng dòng. Đương nhiên, khi danh sách đầu vào trống, nó sẽ tạo một tệp trống. (Xem :help writefileđể biết chi tiết.) Chúng tôi có thể tận dụng hiệu ứng phụ này:

:map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>

Lưu ý rằng trích xuất tên tệp có thể được điều chỉnh bằng cách sử dụng một expandmẫu khác (xem :help expand()).

Nhân tiện, nếu người ta không muốn tạo một tệp, mà chỉ để mở nó để chỉnh sửa, người ta có thể định nghĩa một gfánh xạ giống như:

:map <leader>gf :e <cfile><cr>

trong đó :elệnh có thể được thay thế bằng :tabehoặc một lệnh tương tự.


1
+1 cho việc giảng dạy <cfile>thay vì<C-r><C-f>
sehe

2

Tôi lấy câu trả lời xuất sắc của ib ở trên và mở rộng nó như sau. Mục tiêu của tôi là sử dụng vim để tạo các tệp đánh dấu mới khi cần cho wiki (trong trường hợp này là wiki Gollum)

Lần đầu tiên tôi thử:

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>` 

ở trên không hoạt động như đã nêu trong câu trả lời. Tuy nhiên, lúc đầu tôi nghĩ nó không hoạt động vì tôi không thực sự thấy tập tin mở trong vim. Sử dụng bit thứ hai của mã bên dưới sẽ mở ra một tệp mới - đây là nhiều hơn những gì tôi đang tìm kiếm. Vì vậy, tôi kết hợp chúng và thử:

map <leader>cf :e <cfile><cr>

nhưng điều đó không hiệu quả với wiki vì khi bạn cố gắng tạo một tệp mới trong wiki bằng cú pháp như [[the-new-file]]cú pháp wiki không cho phép mở rộng tệp trong ngoặc. Tuy nhiên, Vim cần biết phần mở rộng khi tạo tệp mới để làm việc này. Trong trường hợp này tôi đã sử dụng:

    map <leader>cf :e <cfile>.md<cr>

vì vậy tôi có thể tạo tập tin markdown mới. Có nhiều cách để tùy chỉnh thêm điều này (ví dụ bằng cách không mã hóa phần mở rộng) nhưng cách trên hoạt động tốt cho nhu cầu của tôi. Nếu tôi cần một tiện ích mở rộng khác (ví dụ để lưu tệp .wiki), tôi có thể sẽ chỉ đi theo tuyến đường đơn giản và tạo một bản đồ khác như:

    map <leader>cwf :e <cfile>.wiki<cr>

Là một lợi ích phụ, bạn có thể sử dụng cùng một lệnh để mở tệp đánh dấu đã tồn tại ( gflệnh tiêu chuẩn sẽ không hoạt động ở đây vì phần mở rộng tệp bị thiếu).


gfhoạt động nếu set suffixesadd=.wiki. Một phiên bản cải tiến của bạn cfsẽ là một phiên bản tôn trọng suffixesadd, ít nhất là trong trường hợp nó chỉ chứa một mục.
hjdivad
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.