2012-06-04 35 views
13

Có cách nào để di chuyển tệp trong Vim không? Ví dụ. Tôi đã mở một tập tin foo/bar.txt trong Vim. Tôi biết 2 cách để di chuyển tập tin này:Di chuyển tệp trong Vim

giải pháp đầu tiên:

  1. Xóa bộ đệm với :bd bar.txt
  2. Thực hiện các động thái trên vỏ với mv foo/bar.txt foo/bar2.txt
  3. tải tập tin trong vim với :e foo/bar2.txt

Giải pháp thứ hai:

  1. Đóng Vim, vì vậy tất cả vùng đệm đã đóng.
  2. Thực hiện di chuyển trên vỏ ...
  3. Bắt đầu Vim và tải tệp.

Nhưng hai giải pháp này rất đáng xấu hổ. Tôi biết, có một plugin để đổi tên các tập tin vim-enuch, nhưng không phải là có một cách Vim để thực hiện chức năng cơ bản như vậy?

Trả lời

6

Không có cách nào nguyên tử để di chuyển một tập tin như vậy, nhưng điều này nên được gần gũi:

function! MoveFile(newspec) 
    let old = expand('%') 
    " could be improved: 
    if (old == a:newspec) 
     return 0 
    endif 
    exe 'sav' fnameescape(a:newspec) 
    call delete(old) 
endfunction 

command! -nargs=1 -complete=file -bar MoveFile call MoveFile('<args>') 

Bây giờ bạn có thể nói:

:MoveFile file2.txt 

Để đổi tên để file2.txt

:MoveFile %.0 

để di chuyển file2.txt đến file2.txt.0

+1

Giải pháp này là tốt hơn, bởi vì tôi có thể thêm dòng này từ 5 đến vimrc của tôi chứ không phải tải một plugin nặng. – SvenK

+0

Tôi vừa cập nhật nó sau khi một số thử nghiệm – sehe

+0

Các vấn đề về tên tệp thoát được bỏ qua trong việc triển khai được cung cấp. Để khắc phục vấn đề này, ta nên thay đổi hai dòng cuối của hàm như sau. Đầu tiên, 'exe 'sav' fnameescape (a: newspaperec)'; thứ hai, 'gọi xóa (cũ)'. Bạn cũng nên kiểm tra giá trị trả về của hàm 'delete()' để thông báo cho người dùng trong trường hợp thất bại trong việc xóa tập tin (dễ bắt tình huống này là một ưu điểm khác của hàm trên '! Rm', ngoài tính đa nền tảng của nó). –

3

nếu bạn đang ở trong bộ đệm bar.txt:

:w bar2.txt 
:!rm bar.txt 

Nếu bar2.txt đã tồn tại trong thư mục hiện hành, sử dụng :w!.

+2

Nhưng '! Rm bar.txt' không đóng bộ đệm mở – SvenK

+1

đúng, thay đổi': sav' thành ': w' – pb2q

+1

Bộ đệm cho' bar.txt' sẽ vẫn mở. Nó có thể được đóng bằng 'bd '. –

24

Bạn cũng có thể sử dụng chức năng đổi tên netrw (trình duyệt tệp mặc định).

  1. mở netrw với :E
  2. Di chuyển con trỏ của bạn để phù hợp với tập tin mà bạn có ý định đổi tên, trong trường hợp này bar.txt. Bạn di chuyển đến tệp được đề cập bằng cách sử dụng h, j, k, l hoặc bạn có thể tìm kiếm tệp đó bằng / (ví dụ: /bar.txt)
  3. Lượt R. Sau đó bạn sẽ được nhắc nhở cho một filepath mới. Khi nhập xong filepath nhấn <CR>
  4. Di chuyển con trỏ của bạn vào tập tin mới và mở nó với <CR>

Trong khi giải pháp này có thể không nhanh như sử dụng vim-eunch, nó cho phép bạn xem của dự án cấu trúc khi bạn đổi tên tệp. Điều này cũng sẽ cho phép bạn di chuyển nhiều tệp cùng một lúc.

Để đọc thêm chạy :help netrw-move

+1

Người ta cũng có thể mở trình thám hiểm tệp bằng (': Sex' hoặc': Vex') nếu có: E lệnh được chuyển tiếp đến một thứ gì đó. – installero

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