Làm cách nào để xóa tệp đang mở hiện tại khỏi đĩa trong vim? Sẽ rất vui nếu bạn cũng đóng bộ đệm.
Tôi thấy bạn có thể sử dụng NERDTree cho điều đó , nhưng tôi không sử dụng plugin này.
Làm cách nào để xóa tệp đang mở hiện tại khỏi đĩa trong vim? Sẽ rất vui nếu bạn cũng đóng bộ đệm.
Tôi thấy bạn có thể sử dụng NERDTree cho điều đó , nhưng tôi không sử dụng plugin này.
Câu trả lời:
Sử dụng một công cụ bên ngoài như rm (1) cũng được, nhưng Vim cũng có delete()chức năng riêng để xóa tệp. Điều này có lợi thế là di động.
:call delete(expand('%'))
Một cách khác để diễn đạt điều này là :call delete(@%)sử dụng thanh ghi %(tệp hiện tại) (mẹo của @accolade).
Để xóa hoàn toàn bộ đệm hiện tại, cả biểu diễn tệp trên đĩa và bộ đệm Vim, hãy nối thêm :bdelete:
:call delete(expand('%')) | bdelete!
Có thể bạn sẽ muốn lập bản đồ này theo sở thích của mình.
rlệnh! Tiền tố tốt hơn lập bản đồ của bạn với <Leader>....
nnoremap <C-Del> :call delete(expand('%'))<CR>nhưng tôi không đóng bộ đệm trong trường hợp nó xảy ra tình cờ; thì bạn vẫn có cơ hội để cứu nó.
:call delete(@%)|q!← Biến thể ngắn (nếu bạn không muốn lập bản đồ). (Các bộ đệm vẫn còn trong :lsvà có thể được hồi sinh với :bcách này, nó vẫn giữ tên tập tin và các tùy chọn đệm, nhưng không phải là nội dung file.)
:call delete(@%)|bd!và sử dụng :ls!với :bđể hồi sinh.
Hãy xem Xóa tệp bằng lệnh Vim . Phần Nhận xét sẽ có những gì bạn đang tìm kiếm:
Về cơ bản, Rm sẽ xóa tệp hiện tại; RM sẽ xóa tệp hiện tại và thoát khỏi bộ đệm (không lưu) trong một lần.
Ngoài ra, bạn có thể chỉ cần đưa ra một lệnh shell để xóa tệp hiện tại:
:!rm %
!rm %, có cách nào để tránh cảnh báo khi vim quay trở lại bộ đệm không?
%) với dấu ngoặc kép: !rm "%".
%(đường dẫn tệp (" tên tệp " trong thuật ngữ vim) như được gọi ban đầu, có khả năng tương đối, ví dụ như chỉ tên tệp) thay vì %:p(đường dẫn tệp tuyệt đối), bạn sẽ gặp phải rủi ro nhỏ khi xóa tệp cùng tên trong thư mục khác, nếu bạn đã quên bạn đã chỉnh sửa :cdở đó. Vì vậy, tôi thực sự khuyên bạn nên sử dụng %:pthay vì %nếu bạn vẫn lập bản đồ.
Đôi khi một plugin có thể là một giải pháp hấp dẫn ngay cả đối với một vấn đề đơn giản. Trong trường hợp này, chúng tôi thật may mắn vì có eunuch.vim bởi Tim Pope toàn năng.
Nói cách riêng eunuch.vim cung cấp
Vim sugar cho các lệnh shell UNIX cần nó nhất. Xóa hoặc đổi tên bộ đệm và tệp bên dưới cùng một lúc. Tải a
findhoặc alocatevào danh sách Quickfix. Và như thế.
Hoàn hảo. Nó có những gì chúng ta cần, cộng với một số công cụ bổ sung nếu chúng ta đang sử dụng hệ thống UNIX.
Lệnh bạn đang tìm là
:Remove!
Một lần nữa, sửa lại nó nếu bạn cần nó nhiều, ví dụ :nnoremap <Leader>rm :Remove!<CR>.
mv, mkdir, findvv khuyên.
Tôi thích có thể xóa các tệp từ bên trong vim, nhưng tôi cũng hoang tưởng về việc vô tình xóa công việc quan trọng, vì lý do này hay lý do khác, chưa được kiểm soát phiên bản. Tôi thấy hữu ích khi kết hợp thông tin trước đó từ @g mule và @accolade với câu trả lời này về cách sử dụng confirmlệnh nhắc trước khi thoát khỏi vim.
Kết hợp những thứ này lại với nhau, tôi đã thêm một hàm vào của mình ~/.vimrc, hàm này sẽ nhắc trước khi xóa tệp và đóng bộ đệm, đồng thời ánh xạ nó thành một tổ hợp phím:
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()
fun! DeleteFileAndCloseBuffer()
let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun
Nếu bạn là người ít nhấn phím hơn tôi, bạn có thể thêm <CR>vào dòng đầu tiên
nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>
và chỉ phải nhấn quay lại một lần.
expand('%:p')thay vì @%khi bạn viết kịch bản. (Mặc dù tôi rất tự hào vì bạn đã kết hợp gợi ý của tôi :) lợi ích ngắn gọn là không đáng kể trong một kịch bản. Quan trọng hơn:) %:psẽ mở rộng tên tệp thành một đường dẫn tuyệt đối đầy đủ (có thể có hoặc chưa có). %Thay vào đó, bạn chỉ có một chút rủi ro là xóa một tệp cùng tên trong một thư mục khác, nếu bạn quên bạn đã chỉnh sửa :cdở đó.
Bạn có thể làm điều đó với hai bước:
lưu dưới dạng tệp mới
: w newfilename
xóa tệp cũ
! rm oldfilename
Đây có thể là một ý kiến không phổ biến nhưng trình khám phá cây tệp của bạn (Netrw / NerdTree) sẽ là cách đơn giản và an toàn nhất để xóa tệp. Ngay cả khi OP không sử dụng NerdTree, thì plugin tích hợp Netrw cũng sẽ hoạt động tốt.
nnoremap rm :call delete(expand('%')) \| bdelete!<CR>. Bạn có thể muốn thêm câu trả lời của mình.