Câu trả lời:
Điều đầu tiên tôi nghĩ đến là sử dụng touch
lệ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 writefile
ghi 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 expand
mẫ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 đó :e
lệnh có thể được thay thế bằng :tabe
hoặc một lệnh tương tự.
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 ( gf
lệnh tiêu chuẩn sẽ không hoạt động ở đây vì phần mở rộng tệp bị thiếu).
gf
hoạt động nếu set suffixesadd=.wiki
. Một phiên bản cải tiến của bạn cf
sẽ 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.
<cfile>
thay vì<C-r><C-f>