Câu trả lời:
Có một plugin nhỏ cho phép bạn làm điều này.
Program Files (x86)
. Bất cứ lúc nào thư mục này cần phải được làm việc với nó cần phải được gói trong dấu ngoặc kép. Đó là uh, rất nhiều.
Lệnh được gọi :saveas
, nhưng thật không may, nó sẽ không xóa tệp cũ của bạn, bạn sẽ phải thực hiện thủ công. xem :help saveas
để biết thêm
BIÊN TẬP:
Hầu hết các cài đặt vim có trình duyệt tệp tích hợp, bạn có thể sử dụng cho các hoạt động đó. Hãy thử :Explore
trong chế độ lệnh (tôi thực sự sẽ ánh xạ nó tới một phím chức năng, nó rất tiện dụng). Bạn có thể đổi tên các tệp bằng R
hoặc xóa chúng bằng D
, ví dụ. Nhưng nhấn <F1>
trong thám hiểm sẽ cung cấp cho bạn một cái nhìn tổng quan tốt hơn.
Nếu bạn sử dụng git và đã có plugin của tpope fugitive.vim thì chỉ cần:
:Gmove newname
Điều này sẽ:
Nếu tệp của bạn chưa được thêm vào repo git thì trước tiên hãy thêm nó:
:Gwrite
:Gmove
yêu cầu đường dẫn tương đối cho tên tệp mới. Một cách hay để làm điều này là gõ vào :Gmove <ctrl-r>%
đó nối thêm đường dẫn / tên tệp hiện tại.
Tôi đang làm điều đó với plugin NERDTree:
:NERDTreeFind
sau đó nhấn m
Để đổi tên, bạn có thể chọn (m)ove the current node
và thay đổi tên tệp. Ngoài ra còn có các tùy chọn như xóa, sao chép, di chuyển, v.v ...
:w newname
- để tạo một bản sao.:e#
.:!rm oldname
.Trên Windows, bước 3 tùy chọn thay đổi một chút:
:!del oldname
.:f newname
2) lưu nó :w
3) (tùy chọn) !rm oldname
. Ưu điểm là lịch sử hoàn tác của bạn được bảo tồn.
:saveas
là tốt hơn trong vấn đề đó, @rampion - và làm những gì @kynan đã viết.
Nếu tập tin đã được lưu:
:!mv {file location} {new file location}
:e {new file location}
Thí dụ:
:!mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
:e src/test/scala/myNewFile.scala
Yêu cầu cấp phép:
:!sudo mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
Lưu thành:
:!mv {file location} {save_as file location}
:w
:e {save_as file location}
Dành cho Windows chưa được xác minh
:!move {file location} {new file location}
:e {new file location}
Tôi muốn giới thiệu :Rename
từ hoạn quan của tpope cho việc này.
Nó cũng bao gồm một loạt các lệnh tiện dụng khác.
Lệnh Đổi tên được định nghĩa như sau trong đó (kiểm tra repo xem có bản cập nhật nào không?):
command! -bar -nargs=1 -bang -complete=file Rename :
\ let s:file = expand('%:p') |
\ setlocal modified |
\ keepalt saveas<bang> <args> |
\ if s:file !=# expand('%:p') |
\ call delete(s:file) |
\ endif |
\ unlet s:file
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control+ R, #sẽ ngay lập tức mở rộng thành tệp thay thế (đường dẫn được chỉnh sửa trước đó trong cửa sổ hiện tại) trước khi nhấn Enter. Điều đó cho phép chúng tôi xem lại chính xác những gì chúng tôi sẽ xóa. Sử dụng đường ống |
trong trường hợp như vậy là không an toàn, bởi vì nếu sav
thất bại vì bất kỳ lý do gì,#
vẫn sẽ chỉ đến một nơi khác (hoặc không có gì). Điều đó có nghĩa là !rm #
hoặc delete(expand(#))
có thể xóa các tập tin hoàn toàn khác nhau! Vì vậy, làm điều đó bằng tay cẩn thận hoặc sử dụng kịch bản tốt (chúng được đề cập trong nhiều câu trả lời ở đây).
... hoặc thử tự xây dựng một chức năng / lệnh / script. Bắt đầu từ sth đơn giản như:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
Sau khi tải lại vimrc, chỉ cần gõ :Rename new_filename
. Vấn đề với lệnh này là gì?
Kiểm tra bảo mật 1: Điều gì không :Rename
có đối số?
Có, nó xóa tệp bị ẩn trong '#'!
Giải pháp: bạn có thể sử dụng ví dụ. điều kiện hoặc try
tuyên bố như thế:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
Kiểm tra bảo mật 1:
:Rename
(không có đối số) sẽ đưa ra lỗi:
E471: Yêu cầu đối số
Kiểm tra bảo mật 2: Điều gì sẽ xảy ra nếu tên sẽ giống như trước đó?
Kiểm tra bảo mật 3: Điều gì sẽ xảy ra nếu tệp sẽ ở vị trí khác với thực tế của bạn?
Tự sửa nó. Để dễ đọc, bạn có thể viết nó theo cách này:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
ghi chú
!rm #
tốt hơn !rm old_name
-> bạn không cần nhớ tên cũ
!rm <C-R>#
tốt hơn so với !rm #
khi làm bằng tay -> bạn sẽ thấy những gì bạn thực sự loại bỏ (lý do an toàn)
!rm
nói chung là không an toàn lắm ... mv
đến một vị trí rác là tốt hơn
call delete(expand('#'))
tốt hơn lệnh shell (hệ điều hành bất khả tri) nhưng lâu hơn để gõ và không thể sử dụng control+R
try | code1 | code2 | tryend
-> khi xảy ra lỗi trong khi code1, đừng chạy code2
:sav
(hoặc :saveas
) tương đương với :f new_name | w
- xem file_f - và lưu lại lịch sử hoàn tác
expand('%:p')
đưa ra toàn bộ đường dẫn vị trí của bạn ( %
) hoặc vị trí của tệp thay thế ( #
)
Có một chức năng trong .vimrc của Gary Bernhardt xử lý việc này.
function! RenameFile()
let old_name = expand('%')
let new_name = input('New file name: ', expand('%'), 'file')
if new_name != '' && new_name != old_name
exec ':saveas ' . new_name
exec ':silent !rm ' . old_name
redraw!
endif
endfunction
map <leader>n :call RenameFile()<cr>
:!mv % %:h/new_name
Đăng ký %
chứa tên của tập tin hiện tại. '%:h'
hiển thị thư mục 'head' chứa tệp hiện tại, ví dụ: %:h
trả về /abc/def
khi đường dẫn đầy đủ tệp của bạn làabc/dev/my.txt
Làm thế nào về điều này (được cải thiện bởi đề xuất của Jake):
:exe "!mv % newfilename" | e newfilename
:exe "!mv % newfilename" | e newfilename
Vim không có rename
chức năng, nhưng tiếc là nó không giữ được lịch sử.
Cách đơn giản nhất của hệ điều hành để đổi tên một tệp mà không làm mất lịch sử sẽ là:
:saveas new_file_name
:call delete(expand('#:p'))
expand('#:p')
trả về đường dẫn đầy đủ của tập tin cũ hơn
Sử dụng :bd #
nếu bạn cũng muốn xóa tệp cũ hơn khỏi danh sách bộ đệm.
Nếu bạn muốn sử dụng lệnh nhanh để đổi tên tệp, hãy thêm tệp mới trong ~ / .vim / plugin với nội dung sau:
function! s:rename_file(new_file_path)
execute 'saveas ' . a:new_file_path
call delete(expand('#:p'))
bd #
endfunction
command! -nargs=1 -complete=file Rename call <SID>rename_file(<f-args>)
Lệnh Rename
sẽ giúp bạn nhanh chóng đổi tên một tập tin.
Có một plugin lớn hơn có tên là vim-eunuch của Tim Pope bao gồm chức năng đổi tên cũng như một số tính năng khác (xóa, tìm, lưu tất cả, chmod, sudo chỉnh sửa, ...).
Để đổi tên một tập tin trong vim-eunuch:
:Move filename.ext
So với rename.vim:
:rename[!] filename.ext
Lưu một vài tổ hợp phím :)
Để đổi tên tập tin hiện có mà không sử dụng plugin, bạn nên sử dụng lệnh
:Explore
Lệnh này cho phép bạn khám phá các tệp in.directory, xóa hoặc đổi tên chúng. hơn bạn nên điều hướng đến tệp cần thiết trong explorer hơn R
lệnh loại sẽ cho phép bạn đổi tên tên tệp
Tôi không biết đây có phải là phương pháp "dễ nhất" không, nhưng giả sử bạn đã lưu tệp của mình (: w) Tôi sẽ gọi shell (: sh) và thực hiện một cp đơn giản foo foo.bak Để quay lại trình chỉnh sửa sử dụng Ctrl-D / Thoát. Danh sách hữu ích của các lệnh soạn thảo vi trên liên kết này
Kịch bản nhỏ này không hoàn hảo (trả lại tiền vận chuyển thêm mà bạn phải nhấn) nhưng nó đã hoàn thành công việc.
function Rename()
let new_file_name = input('New filename: ')
let full_path_current_file = expand("%:p")
let new_full_path = expand("%:p:h")."/".new_file_name
bd
execute "!mv ".full_path_current_file." ".new_full_path
execute "e ".new_full_path
endfunction
command! Rename :call Rename()
nmap RN :Rename<CR>